将 aws 资源导入具有 for_each 的 terraform 模块
Import aws resources into terraform module that has a for_each
我正在尝试将几个云端发行版导入到 Terraform 中。由于它们非常相似(并且可以一起管理,所以我想创建 1 个带有 for_each
的资源,然后将它们导入到该资源中)。
模块如下所示:
variable "cloudfront_configurations" {
default = {
distro_1 = {
aliases = ["url_of_distro1.com"],
},
distro_2 = {
aliases = ["url_of_distro2.com"],
},
}
}
module "cloudfront_distribution" {
for_each = var.cloudfront_configurations
source = "terraform-aws-modules/cloudfront/aws"
version = "2.7.0"
aliases = each.value.aliases
...
}
这些云端发行版已经存在于 AWS 中,我想使用以下方法将它们导入到 Terraform 中:
terraform import module.cloudfront_distribution[\"distro_1\"].aws_cloudfront_distribution[0] IDOFDISTRO1
这一直给我错误 no matches found: module.cloudfront_distribution["distro_1"].aws_cloudfront_distribution[0]
知道我在这个命令中做错了什么吗?
当您尝试在 Terraform 中导入某些内容时,通常获取其 ID 的最简单方法是执行 terraform plan
并检查输出
在您的情况下,您正在尝试导入
module // check the module
.cloudfront_distribution // named cloudfront_distribution
[\"distro_1\"] // with ID distro_1 in its for_each
.aws_cloudfront_distribution // inside, it will have a aws_cloudfront_distribution
[0] // ?
如果您检查 the Terraform docs about referencing values,您会看到结构是 <RESOURCE TYPE>.<NAME>
。在您的 ID 中,您遗漏了名称,只输入了一个 [0]
,就好像它是由 count
创建的第一个资源一样
如果您不想使用我之前提到的 terraform plan
技巧,则必须检查 the docs of the module you're using。在那里,您会看到您感兴趣的资源是 aws_cloudfront_distribution.this
因此您的资源 ID 是 module.cloudfront_distribution["distro_1"].aws_cloudfront_distribution.this
(请注意,我将 [0]
更改为 .this
)
经过一番研究,这似乎是引用错误。从 cli 引用模块时,需要像这样引用整个名称:
terraform import 'module.cloudfront_distribution["distro_1"].aws_cloudfront_distribution[0]' IDOFDISTRO1
我正在尝试将几个云端发行版导入到 Terraform 中。由于它们非常相似(并且可以一起管理,所以我想创建 1 个带有 for_each
的资源,然后将它们导入到该资源中)。
模块如下所示:
variable "cloudfront_configurations" {
default = {
distro_1 = {
aliases = ["url_of_distro1.com"],
},
distro_2 = {
aliases = ["url_of_distro2.com"],
},
}
}
module "cloudfront_distribution" {
for_each = var.cloudfront_configurations
source = "terraform-aws-modules/cloudfront/aws"
version = "2.7.0"
aliases = each.value.aliases
...
}
这些云端发行版已经存在于 AWS 中,我想使用以下方法将它们导入到 Terraform 中:
terraform import module.cloudfront_distribution[\"distro_1\"].aws_cloudfront_distribution[0] IDOFDISTRO1
这一直给我错误 no matches found: module.cloudfront_distribution["distro_1"].aws_cloudfront_distribution[0]
知道我在这个命令中做错了什么吗?
当您尝试在 Terraform 中导入某些内容时,通常获取其 ID 的最简单方法是执行 terraform plan
并检查输出
在您的情况下,您正在尝试导入
module // check the module
.cloudfront_distribution // named cloudfront_distribution
[\"distro_1\"] // with ID distro_1 in its for_each
.aws_cloudfront_distribution // inside, it will have a aws_cloudfront_distribution
[0] // ?
如果您检查 the Terraform docs about referencing values,您会看到结构是 <RESOURCE TYPE>.<NAME>
。在您的 ID 中,您遗漏了名称,只输入了一个 [0]
,就好像它是由 count
如果您不想使用我之前提到的 terraform plan
技巧,则必须检查 the docs of the module you're using。在那里,您会看到您感兴趣的资源是 aws_cloudfront_distribution.this
因此您的资源 ID 是 module.cloudfront_distribution["distro_1"].aws_cloudfront_distribution.this
(请注意,我将 [0]
更改为 .this
)
经过一番研究,这似乎是引用错误。从 cli 引用模块时,需要像这样引用整个名称:
terraform import 'module.cloudfront_distribution["distro_1"].aws_cloudfront_distribution[0]' IDOFDISTRO1