// Copyright 2022 Amazon.com and its affiliates; all rights reserved. // SPDX-License-Identifier: MIT No Attribution terraform { required_providers { aws = { source = "hashicorp/aws" configuration_aliases = [aws] } } } data "aws_ssm_parameter" "pandas_lambda_layer" { name = "/${var.APP}/${var.ENV}/pandas-lambda-layer" } module "function_kms_key" { source = "../../modules/kms" providers = { aws = aws } NAME = "${var.APP}-${var.ENV}-${var.API_NAME}-${var.FUNCTION_NAME}-key" DESCRIPTION = "${var.APP}-${var.ENV}-${var.API_NAME}-${var.FUNCTION_NAME}-key" } resource "aws_lambda_function" "function" { function_name = "${var.APP}-${var.ENV}-${var.API_NAME}-${var.FUNCTION_NAME}" s3_bucket = var.S3_BUCKET s3_key = var.S3_KEY runtime = var.RUNTIME handler = var.LAMBDA_HANDLER timeout = 300 publish = true source_code_hash = var.SOURCE_CODE_HASH role = var.LAMBDA_IAM_ROLE vpc_config { subnet_ids = var.SUBNET_IDS security_group_ids = var.SECURITY_GROUP_IDS } layers = [data.aws_ssm_parameter.pandas_lambda_layer.value] tracing_config { mode = "Active" } kms_key_arn = module.function_kms_key.key_arn memory_size = 2048 ephemeral_storage { size = 2048 } environment { variables = { APP = var.APP ENV = var.ENV } } #checkov:skip=CKV_AWS_272: "Ensure AWS Lambda function is configured to validate code-signing" #checkov:skip=CKV_AWS_115: "Ensure that AWS Lambda function is configured for function-level concurrent execution limit" #checkov:skip=CKV_AWS_116: "Ensure that AWS Lambda function is configured for a Dead Letter Queue(DLQ)" } resource "aws_lambda_alias" "function" { name = "${var.APP}-${var.ENV}-${var.API_NAME}-${var.FUNCTION_NAME}" description = "${var.APP}-${var.ENV}-${var.API_NAME}-${var.FUNCTION_NAME}" function_name = aws_lambda_function.function.arn function_version = aws_lambda_function.function.version } resource "aws_lambda_provisioned_concurrency_config" "function" { function_name = aws_lambda_function.function.function_name provisioned_concurrent_executions = var.CONCURRENCY qualifier = aws_lambda_function.function.version } data "aws_caller_identity" "current" {} data "aws_region" "current" {} resource "aws_kms_key" "key" { description = "${var.APP}-${var.ENV}-${var.API_NAME}-${var.FUNCTION_NAME}-log-key" enable_key_rotation = true tags = { Name = "${var.APP}-${var.ENV}-${var.API_NAME}-${var.FUNCTION_NAME}-log-key" } policy = <