如何解决Terraform:模块的depends_on无法在AWS中按预期工作
我是新来的Terraform。我以前使用的是terraform v0.12,并且由于我想在模块之间引入依赖关系,所以我最近开始使用terraform v0.13。我正在尝试创建一个IAM角色,并将一些策略附加到创建的角色。但是问题出在对角色的政策重视上。很少有策略附加到角色上,但是一些策略会抛出错误,说明不存在这样的角色,而其他策略正确地附加到了角色上。我的实现中有什么问题吗?
module.tf
provider "aws" {
region = "ap-southeast-1"
}
#Control Plane role and policies
module "ControlPlane_Role" {
source = "../../templates/IAM/roles"
role_name = var.EKS-master-role
}
module "ControlPlane_Policy1" {
source = "../../templates/IAM/aws_policy"
role_name = var.EKS-master-role
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
depends_on = [module.ControlPlane_Role.role_create]
}
module "ControlPlane_Policy2" {
source = "../../templates/IAM/aws_policy"
role_name = var.EKS-master-role
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSServicePolicy"
depends_on = [module.ControlPlane_Role.role_create]
}
templates / IAM / roles / role.tf
resource "aws_iam_role" "role_create" {
assume_role_policy = data.aws_iam_policy_document.trusted_entity.json
name = var.role_name
}
aws_policy.tf
resource "aws_iam_role_policy_attachment" "aws_policy" {
role = var.role_name
policy_arn = var.policy_arn
}
我将分别传递变量文件,并且没有问题。
错误:
Error: Error attaching policy arn:aws:iam::aws:policy/AmazonEKSClusterPolicy to IAM Role EKS-master: NoSuchEntity: The role with name EKS-master cannot be found.
Error attaching policy arn:aws:iam::aws:policy/AmazonEKSServicePolicy to IAM Role EKS-master: NoSuchEntity: The role with name EKS-master cannot be found.
如果我重新运行terraform命令,将其再次应用到相同的资源而不进行任何更改,则策略将被附加。
解决方法
除某些特殊情况外,您不应使用depends_on
。从templates/IAM/roles
定义一个输出,该输出是角色的名称,并在其他模块中传递此输出(role_name = module.ControlPlane_Role.output_role_name
)。通过此设置,依赖关系图变得清晰(创建角色,创建依赖角色的事物),而不必使用depends_on
手动定义依赖关系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。