如何通过Terraform数据块获取Lambda绑定的IAM角色ARN?
解决Terraform获取Lambda角色ARN的报错问题
问题根源
你出错的核心原因:data.aws_lambda_function.existing.role返回的是角色的完整ARN(格式类似arn:aws:iam::123456789012:role/my-lambda-role),但aws_iam_role数据块的name参数要求传入纯角色名称(比如my-lambda-role),把ARN直接塞进去自然会触发格式验证错误。
最简解决方案
其实完全不需要额外的aws_iam_role数据块,Lambda函数数据块返回的role字段本身就是你要的角色ARN,直接用就行:
data "aws_lambda_function" "existing" { function_name = var.function_name } # 直接引用Lambda数据块的role字段即可 allowed-principal-arns = [ data.aws_lambda_function.existing.role ]
可选场景:如果必须通过角色名称获取ARN
要是因为特殊场景需要先拿到角色名称再查询ARN,可以用Terraform的字符串函数从ARN里提取角色名称:
data "aws_lambda_function" "existing" { function_name = var.function_name } # 从ARN中拆分出纯角色名称 locals { lambda_role_name = element(split("/", data.aws_lambda_function.existing.role), length(split("/", data.aws_lambda_function.existing.role)) - 1) } data "aws_iam_role" "example" { name = local.lambda_role_name } allowed-principal-arns = [ data.aws_iam_role.example.arn ]
不过这种做法属于多此一举,优先用第一种方案更高效直接。
内容的提问来源于stack exchange,提问作者DukeOfDoors
相关产品推荐
相关产品推荐

