gpt4 book ai didi

amazon-web-services - Terraform-从参数存储中获取值并传递给资源

转载 作者:行者123 更新时间:2023-12-03 15:21:36 30 4
gpt4 key购买 nike

我们将最新批准的AMI存储在AWS参数存储中。使用Terraform创建新实例时,我想以编程方式获取此AMI ID。我有一个命令可以拉出AMI ID,但是我不确定如何在Terraform中使用它。

这是我用来提取AMI ID的命令:

$(aws ssm get-parameter --name /path/to/ami --query 'Parameter.Value' --output text)

这是我的Terraform脚本:
resource "aws_instance" "nginx" {
ami = "ami-c58c1dd3" # pull value from parameter store
instance_type = "t2.micro"
#key_name = "${var.key_name}"

provisioner "remote-exec" {
inline = [
"sudo yum install nginx -y",
"sudo service nginx start"
]
}
}

如何使用命令在Terraform脚本中提取AMI ID?

最佳答案

您可以使用 aws_ssm_parameter data source在运行时获取参数的值:

data "aws_ssm_parameter" "ami" {
name = "/path/to/ami"
}

resource "aws_instance" "nginx" {
ami = "${data.aws_ssm_parameter.ami.value}" # pull value from parameter store
instance_type = "t2.micro"

provisioner "remote-exec" {
inline = [
"sudo yum install nginx -y",
"sudo service nginx start"
]
}
}

但是,更好的方法可能是使用 aws_ami data source直接针对所需的AMI进行过滤,而不是将AMI ID推送到SSM参数存储中,然后在以后查找它。您可以过滤许多条件,包括姓名,帐户所有者和标签。这是来自 aws_instance resource documentation的示例,该示例正在寻找最新的Ubuntu 14.04 AMI:
data "aws_ami" "ubuntu" {
most_recent = true

filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]
}

filter {
name = "virtualization-type"
values = ["hvm"]
}

owners = ["099720109477"] # Canonical
}

resource "aws_instance" "web" {
ami = "${data.aws_ami.ubuntu.id}"
instance_type = "t2.micro"

tags = {
Name = "HelloWorld"
}
}

关于amazon-web-services - Terraform-从参数存储中获取值并传递给资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776524/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com