Skip to content

Instantly share code, notes, and snippets.

@cmaggiulli
Created April 3, 2022 04:09
Show Gist options
  • Select an option

  • Save cmaggiulli/4c83169cff9ea773110bccf63ae27a87 to your computer and use it in GitHub Desktop.

Select an option

Save cmaggiulli/4c83169cff9ea773110bccf63ae27a87 to your computer and use it in GitHub Desktop.
Provisioning Lambda Concurrency
esource "aws_cloudwatch_log_group" "entropy-engine-lambda" {
name = "/aws/lambda/${aws_lambda_function.entropy-engine-lambda.function_name}"
retention_in_days = local.log-retention
tags = {
branch = terraform.workspace
project = var.project
}
}
resource "aws_lambda_function" "entropy-engine-lambda" {
depends_on = [aws_s3_bucket_object.entropy-engine-object]
s3_bucket = "ec-api-lambda-deploys"
s3_key = "${terraform.workspace}/${var.project}/entropy-engine.jar"
function_name = "${terraform.workspace}-${var.project}-entropy-engine"
role = data.aws_iam_role.role_for_lambda.arn
handler = "edu.harvard.api.lambdas.URandom"
source_code_hash = filebase64sha256("../entropy-engine/target/entropy-engine-0.0.1-SNAPSHOT.jar")
runtime = "java11"
publish = true // This is need only when we are have aws_lambda_provisioned_concurrency_config
timeout = 30
memory_size = 768
vpc_config {
subnet_ids = data.aws_subnet_ids.lambda_subnets.ids
security_group_ids = data.aws_security_groups.lambda_security_groups.ids
}
environment {
variables = {
JDBC_URL_SECRET = local.jdbc_secret
MEMCACHED_HOSTNAME = data.aws_elasticache_cluster.memcache_cluster.cluster_address
MEMCACHED_PORT = data.aws_elasticache_cluster.memcache_cluster.port
LOG_LEVEL = local.loglevel
TTL_SECS = "60"
MEMCACHE_HOSTNAME = data.aws_elasticache_cluster.memcache_cluster.cluster_address
MEMCACHE_PORT = data.aws_elasticache_cluster.memcache_cluster.port
}
}
tags = {
branch = terraform.workspace
project = var.project
}
}
resource "aws_lambda_provisioned_concurrency_config" "entropy-engine-concurrency" {
function_name = aws_lambda_function.entropy-engine-lambda.function_name
provisioned_concurrent_executions = 10
qualifier = aws_lambda_function.entropy-engine-lambda.version
}
// Permission for API to invoke Lambda
resource "aws_lambda_permission" "allow-entropy-engine-lambda" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.entropy-engine-lambda.function_name // should match aws_lambda_function resource name defined above
principal = "apigateway.amazonaws.com"
source_arn = "${aws_api_gateway_rest_api.gateway.execution_arn}/*/*/*"
}esource "aws_cloudwatch_log_group" "entropy-engine-lambda" {
name = "/aws/lambda/${aws_lambda_function.entropy-engine-lambda.function_name}"
retention_in_days = local.log-retention
tags = {
branch = terraform.workspace
project = var.project
}
}
resource "aws_lambda_function" "entropy-engine-lambda" {
depends_on = [aws_s3_bucket_object.entropy-engine-object]
s3_bucket = "ec-api-lambda-deploys"
s3_key = "${terraform.workspace}/${var.project}/entropy-engine.jar"
function_name = "${terraform.workspace}-${var.project}-entropy-engine"
role = data.aws_iam_role.role_for_lambda.arn
handler = "edu.harvard.api.lambdas.URandom"
source_code_hash = filebase64sha256("../entropy-engine/target/entropy-engine-0.0.1-SNAPSHOT.jar")
runtime = "java11"
publish = true
timeout = 30
memory_size = 768
vpc_config {
subnet_ids = data.aws_subnet_ids.lambda_subnets.ids
security_group_ids = data.aws_security_groups.lambda_security_groups.ids
}
environment {
variables = {
JDBC_URL_SECRET = local.jdbc_secret
MEMCACHED_HOSTNAME = data.aws_elasticache_cluster.memcache_cluster.cluster_address
MEMCACHED_PORT = data.aws_elasticache_cluster.memcache_cluster.port
LOG_LEVEL = local.loglevel
TTL_SECS = "60"
MEMCACHE_HOSTNAME = data.aws_elasticache_cluster.memcache_cluster.cluster_address
MEMCACHE_PORT = data.aws_elasticache_cluster.memcache_cluster.port
}
}
tags = {
branch = terraform.workspace
project = var.project
}
}
// Very dangerous bug - do not use aliases!!!
resource "aws_lambda_provisioned_concurrency_config" "entropy-engine-concurrency" {
function_name = aws_lambda_function.entropy-engine-lambda.function_name
provisioned_concurrent_executions = 10
qualifier = aws_lambda_function.entropy-engine-lambda.version
}
resource "aws_lambda_permission" "allow-entropy-engine-lambda" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.entropy-engine-lambda.function_name
principal = "apigateway.amazonaws.com"
source_arn = "${aws_api_gateway_rest_api.gateway.execution_arn}/*/*/*"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment