只是作为一种补充解决方案。如果你已经定义了你的aws_iam_role内部模块,你可能需要在terraform import命令中添加两个前缀。从模块中找到正确资源名称的一种方法是使用terraform plan命令。
例如,aws_iam_role模块内的这个资源
resource "aws_iam_role" "reports_role" {
name = "${var.environment}_reports_role"
inline_policy {
name = "${var.environment}_s3_access_policy"
policy = templatefile("${path.module}/templates/s3_access_policy.json", {
bucket_name = var.bucket_name
})
}
}
尝试为dev覆盖(环境)部署它时出现以下错误:
╷│错误:创建IAM角色时出错(prod_reports_role):EntityAlreadyExists:名称为prod_reports_role的角色已经存在。│ 状态码:409,请求 id:************************ │ │ with module.aws_role.aws_iam_role.reports_role,│ on ../../modules/authorization /roles/role.tf 第 1 行,在资源“aws_iam_role”“reports_role”中:│1:资源“aws_iam_role”“reports_role”{│╵</p>
使用该terraform plan命令后,我可以看到它的名称并导入它。如您所见,我必须module.aws_role在aws_iam_role.reports_role.
terraform import module.aws_role.aws_iam_role.reports_role dev_reports_role