Amazon web services 使用Terraform获取AMI的动态数据源
因此,以下数据源将获取带有Amazon web services 使用Terraform获取AMI的动态数据源,amazon-web-services,terraform,Amazon Web Services,Terraform,因此,以下数据源将获取带有组件的最新AMI:web标记。假设我有一些组件有自己的AMI。是否有一种方法可以使这个块更加动态,而不是创建5次相同的块,这样我就可以传入组件的值?我似乎想不出我能传递的唯一价值。我需要重构一下我的代码吗 data "aws_ami" "web" { filter { name = "state" values = ["available"] } filter { name = "tag:component" val
组件的最新AMI:web
标记。假设我有一些组件有自己的AMI。是否有一种方法可以使这个块更加动态,而不是创建5次相同的块,这样我就可以传入组件的值
?我似乎想不出我能传递的唯一价值。我需要重构一下我的代码吗
data "aws_ami" "web" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:component"
values = ["web"]
}
most_recent = true
}
我有一个默认值
模块,它充当元数据查找,在那里它获取并输出基本内容,如AMI ID和VPC ID
默认模块
主代码
我将
aws\u ami
数据源移动到模块中,让它直接查找ami,而不是从外部传入
因此,我将ec2_实例
模块更改为:
variable "ami_component" {}
data "aws_ami" "selected" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:component"
values = ["${var.ami_component"]
}
most_recent = true
}
resource "aws_instance" "instance" {
ami = "${data.aws_ami.selected.id}"
instance_type = "t2.micro"
tags {
Name = "HelloWorld"
}
}
如果您当时觉得需要能够覆盖ec2\u实例
模块中的AMI,您可以将其改为:
variable "ami_component" {}
variable "override_ami" {
default = ""
}
data "aws_ami" "selected" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:component"
values = ["${var.ami_component"]
}
most_recent = true
}
resource "aws_instance" "instance" {
ami = "${var.override_ami != "" ? var.override_ami : data.aws_ami.selected.id}"
instance_type = "t2.micro"
tags {
Name = "HelloWorld"
}
}
这将使用一个条件来检查override\u ami
变量是否已设置为其他变量,在这种情况下,它将使用该变量,否则它将使用ami\u组件
变量来查找适当的ami并使用该变量
这样做的好处是将AMI选择逻辑移动到Terraform模块中,使该模块的接口更加简单。为什么这样做,而不是让
ec2_实例
模块根据组件查找AMI id,然后将组件
作为变量传递给模块?如果需要怎么办出于某种原因覆盖ami id?向模块添加可选的override\u ami\u id
变量,然后让实例资源使用它(如果已填充)。这里是新的terraform guy。。。有什么例子吗?我不确定我将如何使用这个新变量来反对最新版本的数据源。用一个例子回答。主要思想是模块应该尽量隐藏一些复杂性,并尽可能提供一个简单的接口。模块的调用者在大多数情况下不需要知道如何获取“正确的”AMI,相反,应该能够说它想要一个“web”AMI,并让模块处理它。啊,好的,这是非常有意义的。今天晚些时候让我试一试。
variable "ami_component" {}
data "aws_ami" "selected" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:component"
values = ["${var.ami_component"]
}
most_recent = true
}
resource "aws_instance" "instance" {
ami = "${data.aws_ami.selected.id}"
instance_type = "t2.micro"
tags {
Name = "HelloWorld"
}
}
variable "ami_component" {}
variable "override_ami" {
default = ""
}
data "aws_ami" "selected" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:component"
values = ["${var.ami_component"]
}
most_recent = true
}
resource "aws_instance" "instance" {
ami = "${var.override_ami != "" ? var.override_ami : data.aws_ami.selected.id}"
instance_type = "t2.micro"
tags {
Name = "HelloWorld"
}
}