islamelkadi/terraform-aws-lambda
GitHub: islamelkadi/terraform-aws-lambda
一个生产级 Terraform 模块,用于创建符合多项安全合规框架要求的 AWS Lambda 函数,支持基于环境的自动化安全控制和审计追踪。
Stars: 0 | Forks: 0
# Terraform AWS Lambda 模块
[](https://github.com/islamelkadi/terraform-aws-lambda/actions/workflows/terraform-security.yaml)
[](https://github.com/islamelkadi/terraform-aws-lambda/actions/workflows/terraform-lint.yaml)
[](https://github.com/islamelkadi/terraform-aws-lambda/actions/workflows/terraform-docs.yaml)
一个可复用的 Terraform 模块,用于创建符合 AWS Security Hub 合规性(FSBP、CIS、NIST 800-53、NIST 800-171、PCI DSS)的 AWS Lambda 函数,支持 VPC 集成、KMS 加密和灵活的安全控制覆盖。
## 前置条件
本模块专为 macOS 设计。您的机器上必须已安装:
- Python 3 和 pip
- [Kiro](https://kiro.dev) 和 Kiro CLI
- [Homebrew](https://brew.sh)
要安装其余开发工具,请运行:
```
make bootstrap
```
这将安装/升级:tfenv、Terraform(通过 tfenv)、tflint、terraform-docs、checkov 和 pre-commit。
## 安全性
### 基于环境的安全控制
安全控制通过 [terraform-aws-metadata](https://github.com/islamelkadi/terraform-aws-metadata?tab=readme-ov-file#security-profiles) 模块的安全配置文件自动应用于不同环境:
| 控制项 | Dev | Staging | Prod |
|---------|-----|---------|------|
| KMS 客户户托管密钥 | 可选 | 必需 | 必需 |
| VPC 集成 | 可选 | 必需 | 必需 |
| 预留并发 | 可选 | 必需 | 必需 |
| 死信队列 | 可选 | 必需 | 必需 |
| X-Ray 追踪 | 可选 | 必需 | 必需 |
| 日志保留 | 7 天 | 90 天 | 365 天 |
有关安全配置文件以及控制如何随环境变化的完整详细信息,请参阅 [安全配置文件](https://github.com/islamelkadi/terraform-aws-metadata?tab=readme-ov-file#security-profiles) 文档。
### 安全扫描抑制
本模块抑制了某些 Checkov 安全检查,这些检查要么不适用于示例/演示代码,要么代表可选功能。以下检查在 `.checkov.yaml` 中被抑制:
**模块源版本控制 (CKV_TF_1, CKV_TF_2)**
- 被抑制是因为我们使用语义版本标签(`?ref=v1.0.0`)而不是提交哈希,以提高可维护性和可读性
- 语义版本控制是稳定版本的有效且广泛接受的版本控制策略
**KMS IAM 策略 (CKV_AWS_111, CKV_AWS_356, CKV_AWS_109)**
- 在示例代码中被抑制,因为 KMS 模块使用灵活的 IAM 策略进行演示
- 生产部署应根据特定的安全要求自定义 KMS 策略,并应用最小权限原则
**Lambda 可选功能**
- **VPC 公有子网 (CKV_AWS_130)**:公有子网旨在为需要互联网访问的资源自动分配公有 IP;这是有意为之
- **代码签名 (CKV_AWS_272)**:可选的安全功能,会增加复杂性并需要额外的基础设施;请根据安全要求启用
## 包含的示例
### 1. 基础 Lambda 函数
使用虚构部署包进行简单任务的最小配置。
**功能特性:**
- 无 VPC 集成(公有 Lambda)
- 无 KMS 加密(无敏感数据)
- 启用 X-Ray 追踪
- 7 天日志保留
- 为简化起见的安全控制覆盖
**使用场景:**
- 简单的数据转换
- 计划任务
- 不涉及敏感数据的事件驱动处理
### 2. 完全合规的生产 Lambda
强制执行所有控制的完全安全合规配置。
**功能特性:**
- VPC 集成(私有子网)
- 环境变量的 KMS 加密
- 用于错误处理的死信队列
- 预留并发(50)
- X-Ray 追踪(Active 模式)
- 365 天日志保留
- 自定义 IAM 策略
**使用场景:**
- 生产工作负载
- 处理敏感数据
- 从私有子网访问数据库
- 高可用性要求
### 3. API Lambda(API Gateway 集成)
针对 API Gateway 优化的面向公网的 Lambda。
**功能特性:**
- 无 VPC 集成(减少冷启动)
- 启用 KMS 加密
- 死信队列
- 预留并发(10)
- X-Ray 追踪
- 90 天日志保留
**使用场景:**
- REST API 端点
- GraphQL 解析器
- Webhook 处理器
- 面向公网的服务
## 开始之前
在使用这些示例之前,您需要:
1. **Lambda 部署包** - 创建包含 Lambda 代码的 ZIP 文件
2. **KMS 密钥** - 用于加密环境变量(生产/API 示例)
3. **VPC 资源** - 私有子网和安全组(生产示例)
4. **死信队列** - 用于错误处理的 SQS 队列(生产/API 示例)
## 用法
### 步骤 1:创建 Lambda 部署包
创建简单的 Lambda 函数用于测试:
```
# 创建 lambda-packages 目录
mkdir -p lambda-packages
# Basic Lambda
cat > index.py << 'EOF'
def handler(event, context):
return {
'statusCode': 200,
'body': 'Hello from Basic Lambda!'
}
EOF
zip lambda-packages/basic.zip index.py
# Production Lambda
cat > index.py << 'EOF'
import os
def handler(event, context):
log_level = os.environ.get('LOG_LEVEL', 'INFO')
return {
'statusCode': 200,
'body': f'Production Lambda - Log Level: {log_level}'
}
EOF
zip lambda-packages/processor.zip index.py
# API Lambda
cat > index.py << 'EOF'
import json
def handler(event, context):
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'API Lambda response'})
}
EOF
zip lambda-packages/api.zip index.py
# 清理
rm index.py
```
### 步骤 2:更新变量
编辑 `params/input.tfvars` 并将虚构值替换为您实际的 AWS 资源:
```
namespace = "your-org"
environment = "dev"
region = "us-east-1"
# 替换为您的实际 KMS key ARN
kms_key_arn = "arn:aws:kms:us-east-1:YOUR_ACCOUNT:key/YOUR_KEY_ID"
# 替换为您的实际 VPC subnet IDs
vpc_subnet_ids = [
"subnet-YOUR_SUBNET_1",
"subnet-YOUR_SUBNET_2"
]
# 替换为您的实际 security group IDs
vpc_security_group_ids = [
"sg-YOUR_SECURITY_GROUP"
]
# 替换为您的实际 SQS DLQ ARN
dlq_arn = "arn:aws:sqs:us-east-1:YOUR_ACCOUNT:YOUR_DLQ_NAME"
```
### 步骤 3:部署
```
# 初始化 Terraform
terraform init
# 查看计划
terraform plan -var-file=params/input.tfvars
# 应用配置
terraform apply -var-file=params/input.tfvars
```
### 步骤 4:测试 Lambda 函数
```
# 测试 basic Lambda
aws lambda invoke \
--function-name example-dev-basic-function \
--region us-east-1 \
response.json && cat response.json
# 测试 production Lambda
aws lambda invoke \
--function-name example-prod-data-processor \
--region us-east-1 \
response.json && cat response.json
# 测试 API Lambda
aws lambda invoke \
--function-name example-dev-public-api \
--region us-east-1 \
response.json && cat response.json
```
## 安全控制覆盖
这些示例演示了安全控制覆盖系统:
### 基础示例
```
security_control_overrides = {
disable_vpc_requirement = true
disable_kms_requirement = true
justification = "Basic Lambda function with no sensitive data or private resource access."
}
```
### 生产示例
无覆盖 - 强制执行所有安全控制(VPC、KMS、DLQ、预留并发)
### API 示例
```
security_control_overrides = {
disable_vpc_requirement = true
justification = "Public-facing Lambda invoked by API Gateway. VPC would add cold start latency."
}
```
## 成本估算
**Lambda 定价(美国东部):**
- 请求:$0.20 / 100 万次请求
- 持续时间:$0.0000166667 / GB-秒
- 免费套餐:每月 100 万次请求 + 400,000 GB-秒
**示例月度成本:**
- 基础 Lambda(10 万次请求,512MB,平均 1 秒):约 $0.10
- 生产 Lambda(100 万次请求,2GB,平均 5 秒):约 $18.00
- API Lambda(50 万次请求,1GB,平均 0.5 秒):约 $4.50
**额外成本:**
- CloudWatch Logs:$0.50 / GB(摄取量)
- X-Ray:$5 / 100 万次追踪记录
- KMS:$1/月/密钥 + $0.03 / 10,000 次请求
- VPC:无额外费用(NAT Gateway 另计)
## 常见问题
### 冷启动延迟
**问题:** 首次调用速度慢
**解决方案:**
- 使用预留并发(会增加成本)
- 对于面向公网的函数避免使用 VPC
- 减小部署包大小
- 使用 ARM64 架构(Graviton2)
### VPC 连接问题
**问题:** Lambda 无法访问互联网或 AWS 服务
**解决方案:**
- 确保公有子网中有 NAT Gateway
- 为 AWS 服务添加 VPC 端点(S3、DynamoDB 等)
- 检查安全组出站规则
- 验证路由表配置
### 权限错误
**问题:** Lambda 无法访问 AWS 资源
**解决方案:**
- 检查 IAM 角色是否具有所需权限
- 验证基于资源的策略(S3、SQS 等)
- 检查 KMS 密钥策略以获取加密访问权限
- 查看 CloudWatch Logs 以了解具体错误
### 部署包过大
**问题:** 部署包超过 50MB(直接上传)或 250MB(解压后)
**解决方案:**
- 使用 Lambda Layers 存放依赖项
- 通过 S3 部署(支持最大 250MB 压缩包)
- 使用容器镜像(最大 10GB)
- 从包中移除不必要的文件
## 清理
```
# 销毁所有资源
terraform destroy -var-file=params/input.tfvars
```
**注意:** CloudWatch Log Groups 可能会根据保留设置保留。
## 高级配置
### 添加自定义 IAM 策略
```
module "custom_lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
inline_policies = {
s3_access = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject", "s3:PutObject"]
Resource = "arn:aws:s3:::my-bucket/*"
}]
})
}
}
```
### 使用 Lambda Layers
```
module "lambda_with_layers" {
source = "github.com/islamelkadi/terraform-aws-lambda"
layers = [
"arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"
]
}
```
### 容器镜像部署
```
module "container_lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
package_type = "Image"
image_uri = "123456789012.dkr.ecr.us-east-1.amazonaws.com/my-lambda:latest"
}
```
## 参考资料
- [AWS Lambda 文档](https://docs.aws.amazon.com/lambda/)
- [Lambda 最佳实践](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)
- [Lambda 定价](https://aws.amazon.com/lambda/pricing/)
- [VPC 集成](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)
- [X-Ray 追踪](https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html)
- Terraform 合规性验证检查
## 使用示例
### 基础示例
```
module "lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
namespace = "example"
environment = "prod"
name = "event-processor"
region = "us-east-1"
runtime = "python3.13"
handler = "index.handler"
filename = "lambda.zip"
memory_size = 512
timeout = 30
environment_variables = {
LOG_LEVEL = "INFO"
}
tags = {
Project = "CorporateActions"
}
}
```
### 带安全控制的生产函数
```
module "lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
security_controls = module.metadata.security_controls
namespace = "example"
environment = "prod"
name = "event-processor"
region = "us-east-1"
runtime = "python3.13"
handler = "index.handler"
filename = "lambda.zip"
# VPC configuration (required by security controls)
vpc_config = {
subnet_ids = module.vpc.private_subnet_ids
security_group_ids = [module.lambda_sg.id]
}
# KMS encryption (required by security controls)
kms_key_arn = module.kms.key_arn
# Reserved concurrency (required by security controls)
reserved_concurrent_executions = 10
# Dead letter queue (required by security controls)
dead_letter_config = {
target_arn = module.dlq.arn
}
# CloudWatch Logs with compliance retention
log_retention_days = 365
# X-Ray tracing enabled
enable_tracing = true
memory_size = 1024
timeout = 300
environment_variables = {
DB_ENDPOINT = module.rds.endpoint
S3_BUCKET = module.s3.bucket_name
}
}
```
### 带覆盖的开发函数
```
module "lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
security_controls = module.metadata.security_controls
# Override security controls for development
security_control_overrides = {
disable_vpc_requirement = true
disable_reserved_concurrency = true
disable_dead_letter_queue = true
justification = "Development function for testing. No VPC access needed. Unpredictable load pattern. Non-critical failures acceptable."
}
namespace = "example"
environment = "dev"
name = "test-function"
region = "us-east-1"
runtime = "python3.13"
handler = "index.handler"
filename = "lambda.zip"
memory_size = 256
timeout = 60
log_retention_days = 7
}
```
### 公有 API 函数
```
module "api_lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
security_controls = module.metadata.security_controls
# Override VPC requirement for public API
security_control_overrides = {
disable_vpc_requirement = true
justification = "Public API function invoked by API Gateway. No private resource access required. Reviewed and approved by security team."
}
namespace = "example"
environment = "prod"
name = "api-handler"
region = "us-east-1"
runtime = "nodejs20.x"
handler = "index.handler"
filename = "api-lambda.zip"
# Still use KMS encryption for environment variables
kms_key_arn = module.kms.key_arn
# Reserved concurrency for API stability
reserved_concurrent_executions = 100
memory_size = 512
timeout = 30
environment_variables = {
API_KEY_SECRET = "arn:aws:secretsmanager:..."
}
}
```
## MCP 服务器
本模块包含两个在 `.kiro/settings/mcp.json` 中配置的 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 服务器,用于 Kiro:
| 服务器 | 包 | 描述 |
|--------|---------|-------------|
| `aws-docs` | `awslabs.aws-documentation-mcp-server@latest` | 提供对 AWS 文档的访问,用于服务功能、API 参考和最佳实践的上下文查找。 |
| `terraform` | `awslabs.terraform-mcp-server@latest` | 支持直接从 IDE 执行 Terraform 操作(init、validate、plan、fmt、tflint),并为常见工作流提供自动批准的命令。 |
这两个服务器都通过 `uvx` 运行,除了 [引导](#prerequisites) 步骤外,无需额外安装。
## 用法
```
# Lambda 函数示例
# 演示具有安全控制覆盖的各种 Lambda 配置
# ============================================================================
# 示例 1:Basic Lambda Function
# 具有虚构部署包的最小配置
# 覆盖:简单函数不需要 VPC 和 KMS
# ============================================================================
module "basic_lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
namespace = var.namespace
environment = var.environment
name = "basic-function"
region = var.region
handler = "index.handler"
runtime = "python3.13"
# Fictitious deployment package - replace with your actual Lambda code
# Create a simple Lambda: zip index.py -r lambda.zip
filename = "${path.module}/lambda-packages/basic.zip"
description = "Basic Lambda function for simple tasks"
memory_size = 512
timeout = 60
# Security Control Overrides: Relaxed for basic function
security_control_overrides = {
disable_vpc_requirement = true
disable_kms_requirement = true
justification = "Basic Lambda function with no sensitive data or private resource access. VPC and KMS encryption not required."
}
# Basic monitoring
enable_tracing = true
log_retention_days = 90
tags = {
Example = "basic"
}
}
# ============================================================================
# 示例 2:具有完全合规性的 Production Lambda
# 强制执行所有安全控制(VPC, KMS, DLQ, Reserved Concurrency)
# ============================================================================
module "production_lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
namespace = var.namespace
environment = "prod"
name = "data-processor"
region = var.region
handler = "index.handler"
runtime = "python3.13"
filename = "${path.module}/lambda-packages/processor.zip"
description = "Production Lambda with full security compliance"
memory_size = 2048
timeout = 300
# VPC Configuration - replace with your actual VPC resources
vpc_config = {
subnet_ids = var.vpc_subnet_ids
security_group_ids = var.vpc_security_group_ids
}
# KMS Encryption - replace with your actual KMS key ARN
kms_key_arn = var.kms_key_arn
# Dead Letter Queue - replace with your actual SQS queue ARN
dead_letter_config = {
target_arn = var.dlq_arn
}
# Reserved Concurrency - prevent resource exhaustion
reserved_concurrent_executions = 50
# X-Ray Tracing - observability
enable_tracing = true
tracing_mode = "Active"
# CloudWatch Logs - 365-day retention for compliance
log_retention_days = 365
create_log_group = true
# Environment Variables
environment_variables = {
LOG_LEVEL = "INFO"
STAGE = "production"
}
tags = {
Environment = "Production"
Compliance = "FullyCompliant"
Example = "production"
}
}
# ============================================================================
# 示例 3:API Lambda(API Gateway 集成)
# 覆盖:面向公众的函数不需要 VPC
# ============================================================================
module "api_lambda" {
source = "github.com/islamelkadi/terraform-aws-lambda"
namespace = var.namespace
environment = var.environment
name = "public-api"
region = var.region
handler = "index.handler"
runtime = "python3.13"
filename = "${path.module}/lambda-packages/api.zip"
description = "Public-facing Lambda invoked by API Gateway"
memory_size = 1024
timeout = 30
# Security Control Override: VPC not required
security_control_overrides = {
disable_vpc_requirement = true
justification = "Public-facing Lambda invoked by API Gateway. VPC integration would add cold start latency without security benefit."
}
# KMS encryption for environment variables
kms_key_arn = var.kms_key_arn
# Dead letter queue
dead_letter_config = {
target_arn = var.dlq_arn
}
reserved_concurrent_executions = 10
enable_tracing = true
log_retention_days = 90
environment_variables = {
API_VERSION = "v1"
}
tags = {
UseCase = "PublicAPI"
Example = "api-gateway"
}
}
```
## 要求
| 名称 | 版本 |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.14.3 |
| [aws](#requirement\_aws) | >= 6.34 |
## 提供商
| 名称 | 版本 |
|------|---------|
| [aws](#provider\_aws) | >= 6.34 |
## 模块
| 名称 | 来源 | 版本 |
|------|--------|---------|
| [metadata](#module\_metadata) | github.com/islamelkadi/terraform-aws-metadata | v1.1.0 |
## 资源
| 名称 | 类型 |
|------|------|
| [aws_cloudwatch_log_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_log_group) | resource |
| [aws_iam_role.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role_policy.inline_policies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |
| [aws_iam_role_policy_attachment.managed_policies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_lambda_function.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function) | resource |
| [aws_iam_policy_document.assume_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
## 输入
| 名称 | 描述 | 类型 | 默认值 | 必需 |
|------|-------------|------|---------|:--------:|
| [architectures](#input\_architectures) | Lambda 函数的指令集架构(x86\_64 或 arm64) | `list(string)` |
仅在有书面业务理由时使用。
示例用例:
- disable\_vpc\_requirement:公有 API 函数(API Gateway 集成,无私有资源访问)
- disable\_kms\_requirement:无环境变量或仅包含公有配置
- disable\_reserved\_concurrency:具有可变负载的开发/测试函数
- disable\_dead\_letter\_queue:仅同步调用且调用方进行错误处理
重要提示:出于审计目的,请在 'justification' 字段中记录原因。 |
[| 否 | | [assume\_role\_policy](#input\_assume\_role\_policy) | 自定义 assume role 策略 JSON。如果未提供,则使用默认 Lambda assume role 策略 | `string` | `null` | 否 | | [attributes](#input\_attributes) | 用于命名的附加属性 | `list(string)` | `[]` | 否 | | [create\_log\_group](#input\_create\_log\_group) | 是否为 Lambda 函数创建 CloudWatch Log Group | `bool` | `true` | 否 | | [create\_role](#input\_create\_role) | 是否为 Lambda 函数创建 IAM 角色 | `bool` | `true` | 否 | | [dead\_letter\_config](#input\_dead\_letter\_config) | 失败调用的死信队列配置 |
"x86_64"
]
object({
target_arn = string
}) | `null` | 否 |
| < name="input_delimiter"> [delimiter](#input\_delimiter) | 名称组件之间使用的分隔符 | `string` | `"-"` | 否 |
| [description](#input\_description) | Lambda 函数的描述 | `string` | `""` | 否 |
| [enable\_tracing](#input\_enable\_tracing) | 为 Lambda 函数启用 X-Ray 追踪 | `bool` | `true` | 否 |
| [environment](#input\_environment) | 环境名称(dev、staging、prod) | `string` | n/a | 是 |
| [environment\_variables](#input\_environment\_variables) | Lambda 函数的环境变量映射 | `map(string)` | `{}` | 否 |
| [ephemeral\_storage\_size](#input\_ephemeral\_storage\_size) | /tmp 目录的大小(MB) | `number` | `512` | 否 |
| [filename](#input\_filename) | Lambda 部署包的路径(Zip) | `string` | `null` | 否 |
| [handler](#input\_handler) | 代码中的函数入口点 | `string` | `null` | 否 |
| [image\_uri](#input\_image\_uri) | 基于容器的 Lambda 的 ECR 镜像 URI(Image 包类型) | `string` | `null` | 否 |
| [inline\_policies](#input\_inline\_policies) | 要附加到 Lambda 角色的内联 IAM 策略映射(名称 => 策略 JSON) | `map(string)` | `{}` | 否 |
| [kms\_key\_arn](#input\_kms\_key\_arn) | 用于加密环境变量和日志组的 KMS 密钥 ARN | `string` | `null` | 否 |
| [layers](#input\_layers) | 要附加的 Lambda 层 ARN 列表 | `list(string)` | `[]` | 否 |
| [log\_retention\_days](#input\_log\_retention\_days) | CloudWatch Logs 保留期(天) | `number` | `365` | 否 |
| [managed\_policy\_arns](#input\_managed\_policy\_arns) | 要附加到 Lambda 角色的 IAM 托管策略 ARN 列表 | `list(string)` | `[]` | 否 |
| [memory\_size](#input\_memory\_size) | 分配给 Lambda 函数的内存量(MB) | `number` | `128` | 否 |
| [name](#input\_name) | Lambda 函数的名称 | `string` | n/a | 是 |
| [namespace](#input\_namespace) | 命名空间(组织/团队名称) | `string` | n/a | 是 |
| [package\_type](#input\_package\_type) | Lambda 部署包类型(Zip 或 Image) | `string` | `"Zip"` | 否 |
| [region](#input\_region) | 将创建资源的 AWS 区域 | `string` | n/a | 是 |
| [reserved\_concurrent\_executions](#input\_reserved\_concurrent\_executions) | 预留并发执行的数量。设为 -1 表示无预留 | `number` | `-1` | 否 |
| [role\_arn](#input\_role\_arn) | 要使用的现有 IAM 角色的 ARN。如果 create\_role 为 false 则必需 | `string` | `null` | 否 |
| [runtime](#input\_runtime) | Lambda 函数的运行时环境 | `string` | `null` | 否 |
| [s3\_bucket](#input\_s3\_bucket) | 包含 Lambda 部署包的 S3 存储桶 | `string` | `null` | 否 |
| [s3\_key](#input\_s3\_key) | Lambda 部署包的 S3 键 | `string` | `null` | 否 |
| [s3\_object\_version](#input\_s3\_object\_version) | Lambda 部署包的 S3 对象版本 | `string` | `null` | 否 |
| [security\_control\_overrides](#input\_security\_control\_overrides) | 覆盖此 Lambda 函数的特定安全控制。仅在有书面业务理由时使用。
示例用例:
- disable\_vpc\_requirement:公有 API 函数(API Gateway 集成,无私有资源访问)
- disable\_kms\_requirement:无环境变量或仅包含公有配置
- disable\_reserved\_concurrency:具有可变负载的开发/测试函数
- disable\_dead\_letter\_queue:仅同步调用且调用方进行错误处理
重要提示:出于审计目的,请在 'justification' 字段中记录原因。 |
object({
disable_vpc_requirement = optional(bool, false)
disable_kms_requirement = optional(bool, false)
disable_cloudwatch_logs = optional(bool, false)
disable_xray_tracing = optional(bool, false)
disable_reserved_concurrency = optional(bool, false)
disable_dead_letter_queue = optional(bool, false)
disable_log_retention_validation = optional(bool, false)
# Audit trail - document why controls are disabled
justification = optional(string, "")
}) | {
"disable_cloudwatch_logs": false,
"disable_dead_letter_queue": false,
"disable_kms_requirement": false,
"disable_log_retention_validation": false,
"disable_reserved_concurrency": false,
"disable_vpc_requirement": false,
"disable_xray_tracing": false,
"justification": ""
} | 否 |
| [security\_controls](#input\_security\_controls) | 来自 metadata 模块的安全控制配置。用于强制执行安全标准 | object({
encryption = object({
require_kms_customer_managed = bool
require_encryption_at_rest = bool
require_encryption_in_transit = bool
enable_kms_key_rotation = bool
})
logging = object({
require_cloudwatch_logs = bool
min_log_retention_days = number
require_access_logging = bool
require_flow_logs = bool
})
monitoring = object({
enable_xray_tracing = bool
enable_enhanced_monitoring = bool
enable_performance_insights = bool
require_cloudtrail = bool
})
network = object({
require_private_subnets = bool
require_vpc_endpoints = bool
block_public_ingress = bool
require_imdsv2 = bool
})
compliance = object({
enable_point_in_time_recovery = bool
require_reserved_concurrency = bool
enable_deletion_protection = bool
})
}) | `null` | 否 |
| [tags](#input\_tags) | 应用于资源的附加标签 | `map(string)` | `{}` | 否 |
| [timeout](#input\_timeout) | 最大执行时间(秒) | `number` | `3` | 否 |
| [tracing\_mode](#input\_tracing\_mode) | X-Ray 追踪模式(Active 或 PassThrough) | `string` | `"Active"` | 否 |
| [vpc\_config](#input\_vpc\_config) | Lambda 的 VPC 配置(subnet\_ids 和 security\_group\_ids) | object({
subnet_ids = list(string)
security_group_ids = list(string)
}) | `null` | 否 |
## 输出
| 名称 | 描述 |
|------|-------------|
| [function\_arn](#output\_function\_arn) | Lambda 函数的 ARN |
| [function\_invoke\_arn](#output\_function\_invoke\_arn) | 用于从 API Gateway 调用 Lambda 函数的 ARN |
| [function\_name](#output\_function\_name) | Lambda 函数的名称 |
| [function\_qualified\_arn](#output\_function\_qualified\_arn) | Lambda 函数的限定 ARN(包含版本) |
| [function\_version](#output\_function\_version) | Lambda 函数的最新发布版本 |
| [log\_group\_arn](#output\_log\_group\_arn) | CloudWatch Log Group 的 ARN |
| [log\_group\_name](#output\_log\_group\_name) | CloudWatch Log Group 的名称 |
| [role\_arn](#output\_role\_arn) | Lambda 函数使用的 IAM 角色 ARN |
| [role\_name](#output\_role\_name) | Lambda 函数使用的 IAM 角色名称 |
| [tags](#output\_tags) | 应用于 Lambda 函数的标签 |
## 示例
有关包含所有功能的完整工作示例,请参阅 [example/](example/)。
标签:AWS Lambda, AWS Security Hub, CIS, CSP, EC2, ECS, IaC, Kiro, KMS 加密, NIST, PCI DSS, PE 加载器, Python, Terraform, Tflint, VPC 集成, X-Ray, 人工智能安全, 企业级, 合规性, 安全标准, 并发控制, 无后门, 无服务器, 日志留存, 模块, 死信队列, 特权提升, 生产就绪, 自动化部署, 逆向工具