Terraform AWS 提供商数据源 aws_iam_role 所需的参数“名称”是不是需要角色的路径?

Posted

技术标签:

【中文标题】Terraform AWS 提供商数据源 aws_iam_role 所需的参数“名称”是不是需要角色的路径?【英文标题】:Does the Terraform AWS provider data source aws_iam_role required argument "name" require the path to the role?Terraform AWS 提供商数据源 aws_iam_role 所需的参数“名称”是否需要角色的路径? 【发布时间】:2022-01-09 10:04:38 【问题描述】:

Documentation for this data source

假设我在两个路径中有两个名为 s-s-r-lambda 的角色,/path-a//path-b/

如果我们这样声明数据源:

data "aws_iam_role" "example" 
  name = "s-s-r-lambda"

它怎么知道自己是哪个角色?

我是否需要在角色名称中包含路径,例如:/path-a/s-s-r-lambda

文档声明path 属性可以被引用,但它不是参数。

aws_iam_policy 数据源确实允许您指定路径前缀,这就是我觉得这令人困惑的原因。

【问题讨论】:

【参考方案1】:

IAM 角色名称在每个账户中必须是唯一的,因此我的示例无效,两个角色永远不会具有相同的名称。

我通过尝试在一个 Terraform 项目中创建两个名称相同但路径不同的角色来得出这个结论。失败了。

错误:创建 IAM 角色 (s-s-r-lambda) 时出错:EntityAlreadyExists:名称为 s-s-r-lambda 的角色已存在。状态码:409

这就是为什么在为他们使用数据源时从不需要路径的原因。

【讨论】:

请注意,IAM 文档明确指出,相同的名称可以存在于不同的路径中。您在此处观察到的是 AWS API 中的一个错误。

以上是关于Terraform AWS 提供商数据源 aws_iam_role 所需的参数“名称”是不是需要角色的路径?的主要内容,如果未能解决你的问题,请参考以下文章

Terraform:传递 AWS 系统管理器参数存储变量时,Terraform AWS 提供商凭证无效

如何使用 Terraform 配置 AWS EKS 自动扩缩器?

在 AWS 中使用 Terraform 创建角色,并附加 SAML 提供程序

如何在 local-exec 配置程序中从 terraform 继承 aws 凭据

通过 Terraform 在 AWS 上进行路由传播

AWS Beanstalk Tomcat 和 Terraform