Terraform循环模块输出引用错误:S3桶Lambda触发器配置失败
解决Terraform中S3桶Lambda触发器的类型错误问题
在使用Terraform通过for_each批量创建shared_services_lambdas模块实例(对应不同数据源的Lambda函数),并为每个实例配置同一S3桶的触发规则时,遇到以下类型错误:
Error: Incorrect attribute value type...Inappropriate value for attribute "lambda_function_arn": string required.
根因分析
问题出在lambda_data_loader模块的输出配置上。当前output.tf中用values(module.shared_services_lambda_data_loader)[*]输出lambda_arn,这会返回一个列表类型的值,但S3桶通知的lambda_function_arn参数要求的是单个字符串类型的Lambda ARN。实际上每个shared_services_lambdas模块实例只对应一个Lambda函数,完全不需要返回列表格式。
解决方案
修改lambda_data_loader模块的output.tf,直接引用容器模块输出的单个ARN字符串:
# lambda_data_loader模块output.tf 修改后 output "lambda_arn" { value = module.shared_services_lambda_data_loader.arn }
修改后,父模块中module.shared_services_lambdas[lambda_function.value].lambda_arn会正确返回单个字符串类型的Lambda ARN,完全匹配S3桶通知所需的参数类型,原错误即可解决。
内容的提问来源于stack exchange,提问作者Nyle Alliss
相关产品推荐
相关产品推荐

