!!! AWS Lambda
!! Resources
* [https://en.wikipedia.org/wiki/AWS_Lambda]
* [Getting Started with AWS Lambda|https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html]
* [the SLA|https://aws.amazon.com/lambda/sla/], you get credits if they don't meet the SLA
* [AWS Lambda limits|https://docs.aws.amazon.com/lambda/latest/dg/limits.html]
* [Building Lambda functions in Go|https://docs.aws.amazon.com/lambda/latest/dg/go-programming-model.html]
* [AWS Lambda Function Handler in Go|https://docs.aws.amazon.com/lambda/latest/dg/go-programming-model-handler-types.html]
* [My sample Golang ALB lambda function on github|https://github.com/metskem/LambdaSample01]
* [AWS Lambda Context Object in Go|https://docs.aws.amazon.com/lambda/latest/dg/go-programming-model-context.html]
* [Lambda environment variables|https://docs.aws.amazon.com/lambda/latest/dg/lambda-environment-variables.html]
* [Lambda Functions as Targets|https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html]
* [Respond to the Load Balancer|https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#respond-to-load-balancer]
* [AWS Lambda pricing|https://aws.amazon.com/lambda/pricing/], $0.20 per 1M requests and $0.000016667 for every GB-second
You pay for the execution time of your function, rounded to 100 ms.\\
As event source you can have (just a few examples) S3 buckets, SES, SNS, DynamoDB and API Gateway or ALB (web requests), [complete list here|https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html], both synchronous and asynchronous.\\
Your function runs in one of the [available runtimes|https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html] ((versions of) languages)\\
The code you write does not have to be re-entrant, ''"If the function is invoked again while a request is still being processed, another instance is provisioned, increasing the function's concurrency."''\\
You can specify a timeout during creation of your function.\\
If you invoke your Lambda function via an ALB, you can use lb listener rules to send request to functions based of path or http headers, see [Using AWS Lambda with an Application Load Balancer|https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html], for each Lambda function you need an lb tgt group.
To create a Lambda function you first create a Lambda function deployment package, a .zip file consisting of your code (a Go executable) and any dependencies:
{{{
GOOS=linux go build main.go
zip function.zip main
}}}
Allow the ALB to invoke your function:
{{{
aws lambda add-permission --function-name LambdaSample01 \
--statement-id load-balancer --action "lambda:InvokeFunction" \
--principal elasticloadbalancing.amazonaws.com
}}}
When coding a lambda in golang that responds to ALB events, make sure to use the [aws-lambda-go alb events|https://github.com/aws/aws-lambda-go/blob/master/events/alb.go]
!! Questions / things to find out
* configuration, how to configure your app?
* logging, where does the output of the app go?
* (blue/green) deployment
* security / context, what options are there?
* throttling options?
* monitoring (throughput and response times)
* integration with other functions and (AWS) services
* application session state options?
* What are layers?