我已经为导入客户管理的策略创建了资源存根,如下所示。
resource "aws_iam_policy" "customer_managed_policy" {
name = var.customer_managed_policy_name
policy = "{}"
}
使用的导入命令为:
$ terraform import -var 'customer_managed_policy_name=ec2-readonly' aws_iam_policy.customer_managed_policy arn:aws:iam::<account ID>:policy/ec2-readonly
这在第一次运行时很好。但如果我想让它动态,以便导入任意数量的策略,我不知道该怎么做。
因为"aws_iam_policy"资源将使用策略名称和策略数据/json作为属性,通过使用for_each或list,可以创建多个资源,但在导入命令中,我需要传递不同的策略arn。
我认为人们对terraform的工作方式存在误解。
Terraform将一个资源映射到状态中的一个项目,状态文件用于管理所有创建的资源。
导入"X"资源,"X"资源必须存在于您的地形配置中,所以"x";可以映射到状态
实现此目的的两个简单方法是使用"count"或";for_each"映射"x";资源状态。因此,能够导入"x";资源。
现在,重要的是要注意,在您导入资源之后,如果您的地形配置不等于导入的资源,一旦您运行terraform apply, terraform将更新所有导入的资源以匹配您的地形配置文件。