You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:07:04