testing/tf-modules/lambda_deployment/main.tf (85 lines of code) (raw):

resource "aws_iam_role" "iam_for_lambda" { name = "${var.resource_prefix}_apm_aws_lambda_iam" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Principal": { "Service": "lambda.amazonaws.com" }, "Effect": "Allow", "Sid": "" } ] } EOF } resource "aws_lambda_layer_version" "extn_layer" { count = var.custom_lambda_extension_arn == "" ? 1 : 0 filename = var.apm_aws_extension_path layer_name = "${var.resource_prefix}_apm_aws_lambda_extn" source_code_hash = filebase64sha256(var.apm_aws_extension_path) } resource "aws_iam_role_policy_attachment" "cw" { role = aws_iam_role.iam_for_lambda.name policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" } resource "aws_cloudwatch_log_group" "cw_log_group" { name = "/aws/lambda/${var.lambda_function_name}" retention_in_days = 1 } resource "aws_lambda_function" "test_fn" { filename = var.lambda_function_zip function_name = var.lambda_function_name role = aws_iam_role.iam_for_lambda.arn handler = var.lambda_handler runtime = var.lambda_runtime source_code_hash = filebase64sha256(var.lambda_function_zip) timeout = var.lambda_timeout memory_size = var.lambda_memory_size layers = concat( [var.custom_lambda_extension_arn == "" ? aws_lambda_layer_version.extn_layer[0].arn : var.custom_lambda_extension_arn], var.additional_lambda_layers, ) environment { variables = merge({ ELASTIC_APM_LAMBDA_APM_SERVER = var.apm_server_url ELASTIC_APM_SECRET_TOKEN = var.apm_secret_token ELASTIC_APM_LAMBDA_CAPTURE_LOGS = "true" ELASTIC_APM_SEND_STRATEGY = "background" }, var.environment_variables) } depends_on = [ aws_cloudwatch_log_group.cw_log_group, ] } resource "aws_apigatewayv2_api" "trigger" { name = var.lambda_function_name protocol_type = "HTTP" description = "API Gateway to trigger lambda for testing apm-aws-lambda" } resource "aws_apigatewayv2_stage" "trigger" { api_id = aws_apigatewayv2_api.trigger.id name = "${var.resource_prefix}_apm-aws-lambda-test-tf" auto_deploy = true } resource "aws_apigatewayv2_integration" "trigger" { api_id = aws_apigatewayv2_api.trigger.id integration_uri = aws_lambda_function.test_fn.invoke_arn integration_type = "AWS_PROXY" integration_method = "POST" } resource "aws_apigatewayv2_route" "trigger" { api_id = aws_apigatewayv2_api.trigger.id route_key = "GET ${var.lambda_invoke_path}" target = "integrations/${aws_apigatewayv2_integration.trigger.id}" } resource "aws_lambda_permission" "trigger" { statement_id = "invoke-from-api-gw" action = "lambda:InvokeFunction" function_name = aws_lambda_function.test_fn.function_name principal = "apigateway.amazonaws.com" source_arn = "${aws_apigatewayv2_api.trigger.execution_arn}/*/*" }