Terraform-如何创建可选数据块
我已经创建了一些数据块来查找正确的AMI。 我有4个数据块来查找4个基于AMI的4个操作系统。例如Terraform-如何创建可选数据块,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我已经创建了一些数据块来查找正确的AMI。 我有4个数据块来查找4个基于AMI的4个操作系统。例如 data "aws_ami" "centos" { owners = ["123456789"] most_recent = true filter { name = "name" values = ["CentOS*${var.os-version}*
data "aws_ami" "centos" {
owners = ["123456789"]
most_recent = true
filter {
name = "name"
values = ["CentOS*${var.os-version}*x86_64"]
}
}
data "aws_ami" "suse" {
owners = ["amazon"]
most_recent = true
filter {
name = "name"
values = ["suse-sles-${var.os-version}-sp*-v????????-hvm-ssd-x86_64"]
}
}
我像下面那样调用它们ami\u id=data.${os\u name}.image id
所以我只想运行已经调用的数据块。如果用户选择“suse”,则只有suse数据块将运行。不是所有的。
现在这是一个问题,因为用户选择基于操作系统的版本。例如,16.04只适用于ubuntu,而不适用于任何其他数据块,因此其他数据块会引发如下异常:
Error: Your query returned no results. Please change your search criteria and try again.
on main.tf line 79, in data "aws_ami" "suse":
79: data "aws_ami" "suse" {
那么我该如何实现它呢?一种方法可以是将地形模块和
计数相结合。例如,您可以这样构造项目:
AMI的数据
查找可以是子文件夹中的一个模块。此模块的输入将是您的操作系统版本
在该模块内,您必须验证输入操作系统是否有效。然后,您可以构造每个数据块。每个数据
块都有一个计数
值,根据传入的操作系统版本
,在该值处进行查找(值1
)或不进行查找(值0
)
作为一个简单的例子,我构建了以下内容
# Main Terraform project
module "ami" {
source = "./ami"
arch = "arm64"
}
output "ami_arn" { value = module.ami.arn }
此示例不适用于os版本
,因为我无法轻松模拟您的环境。然而,实现是相同的
AMI模块的输出是ARN,或者您选择的任何其他有效输出,然后您可以将其传递给构建EC2实例
在这种情况下,您不必使用模块,可以在主代码中执行相同级别的验证和count
操作。我选择了这种方法,假设您有一个EC2模块,您正在为其编码。一种方法可以是地形模块和计数的组合。例如,您可以这样构造项目:
AMI的数据
查找可以是子文件夹中的一个模块。此模块的输入将是您的操作系统版本
在该模块内,您必须验证输入操作系统是否有效。然后,您可以构造每个数据块。每个数据
块都有一个计数
值,根据传入的操作系统版本
,在该值处进行查找(值1
)或不进行查找(值0
)
作为一个简单的例子,我构建了以下内容
# Main Terraform project
module "ami" {
source = "./ami"
arch = "arm64"
}
output "ami_arn" { value = module.ami.arn }
此示例不适用于os版本
,因为我无法轻松模拟您的环境。然而,实现是相同的
AMI模块的输出是ARN,或者您选择的任何其他有效输出,然后您可以将其传递给构建EC2实例
在这种情况下,您不必使用模块,可以在主代码中执行相同级别的验证和count
操作。我选择这种方法的前提是您有一个为其编码的EC2模块。您已经看过条件/计数了吗?这可能会有所帮助。您是否已经了解了条件/计数?这可能会有帮助