Terraform配置AWS Lambda权限报错:source_arn需字符串,求正确语法
解决AWS Lambda Permission中source_arn数组报错的问题
Terraform的aws_lambda_permission资源中,source_arn参数仅支持字符串类型,不接受数组值,这就是你遇到"expecting a string"错误的原因。要给多个Secrets Manager密钥配置Lambda调用权限,需要为每个ARN创建独立的权限规则,推荐用for_each批量生成资源,避免重复代码。
正确配置示例:
# 定义需要授权的Secrets Manager密钥ARN列表 locals { secret_arns = ["secret.arn", "secret.arn2", "secret.arn3"] } # 批量生成Lambda权限资源,每个密钥ARN对应一条权限 resource "aws_lambda_permission" "allow_rotate_secrets_permission" { for_each = toset(local.secret_arns) statement_id = "AllowExecutionFromSecretsManager-${replace(each.value, "/[^a-zA-Z0-9]/", "-")}" action = "lambda:InvokeFunction" function_name = "UserCredentialsRotationLambda" principal = "secretsmanager.amazonaws.com" source_arn = each.value }
说明:
- 通过
locals统一管理密钥ARN列表,后续增删密钥只需修改此处 for_each = toset(local.secret_arns)会遍历列表,为每个ARN创建独立的权限资源statement_id通过替换ARN中的特殊字符生成唯一标识,避免资源命名冲突- 每个权限资源的
source_arn对应列表中的单个ARN,完全符合参数的字符串类型要求
内容的提问来源于stack exchange,提问作者Coding_ninja
相关产品推荐
相关产品推荐

