List 在Terraform的文件()中使用函数var{count.index}创建AWS IAM策略 我正在创建一个IAM策略列表,它以.json格式存储 我只有一个资源块,通过使用count=length(count)我想创建一个多IAM策略 策略以.json格式存储。我使用file()在Terraform中引用它们
如果我创建了一个多资源块,程序就可以运行了 main.tf:List 在Terraform的文件()中使用函数var{count.index}创建AWS IAM策略 我正在创建一个IAM策略列表,它以.json格式存储 我只有一个资源块,通过使用count=length(count)我想创建一个多IAM策略 策略以.json格式存储。我使用file()在Terraform中引用它们,list,file,variables,terraform,List,File,Variables,Terraform,如果我创建了一个多资源块,程序就可以运行了 main.tf: resource "aws_iam_role_policy" "cloudcheckr" { count = "${length(var.file_name)}" role = "${aws_iam_role.cloudcheckr.id}" // An IAM role is created in another resource block name = "${var.file_name
resource "aws_iam_role_policy" "cloudcheckr" {
count = "${length(var.file_name)}"
role = "${aws_iam_role.cloudcheckr.id}" // An IAM role is created in another resource block
name = "${var.file_name[count.index]}"
policy = "${file("${var.file_name[count.index]}.json")}"
变量.tf:
variable "file_name" {
type = "list"
default = [
"xxxxxx",
"xxxxxx",
"xxxxxx",
"xxxxxx",
]
}
预期成果:
创建了多个IAM策略
实际结果:
aws\u iam\u role\u policy.cloudcheckr:发生3个错误:
*aws_iam_role_policy.cloudcheckr[3]:文件:打开iam_policy_cloudcheckr_security.json:在以下位置中没有此类文件或目录:
${file(${var.file_name[count.index]}.json”)}
*aws_iam_role_policy.cloudcheckr[0]:文件:打开iam_policy_cloudcheckr_cloudwatchflowlogs.json:在以下位置中没有此类文件或目录:
${file(${var.file_name[count.index]}.json”)}
*aws_iam_role_policy.cloudcheckr[2]:文件:打开iam_policy_cloudcheckr_inventory.json:中没有此类文件或目录:
${file(${var.file_name[count.index]}.json”)}
第一次查看时没有问题。但是仍然有几种方法可以解决文件路径问题
在模块内部使用file()
时非常有用,您通常希望创建相对于模块基的路径,如下所示:file(${path.module}/file”)
因此,您的代码可以更改为
resource "aws_iam_role_policy" "cloudcheckr" {
count = "${length(var.file_name)}"
role = "${aws_iam_role.cloudcheckr.id}" // An IAM role is created in another resource block
name = "${var.file_name[count.index]}"
policy = "${file("${path.module}/${var.file_name[count.index]}.json")}"
}
如果这不起作用,请尝试使用format()
考虑使用“Path”:一个摘要:语法是Path.TYPE。类型可以是cwd、模块或根。cwd将插入当前工作目录。模块将插入到当前模块的路径。root将插入根模块的路径。
policy = "${file(format("%s/%s.json", "${path.module}, ${var.file_name[count.index]}"))}"