nav*_*8tr 9 amazon-web-services terraform terraform-provider-aws
我们将最新批准的 AMI 存储在 AWS 参数存储中。使用 Terraform 创建新实例时,我想以编程方式获取此 AMI ID。我有一个命令来提取 AMI ID,但我不确定如何将它与 Terraform 一起使用。
这是我用来提取 AMI ID 的命令:
$(aws ssm get-parameter --name /path/to/ami --query 'Parameter.Value' --output text)
Run Code Online (Sandbox Code Playgroud)
这是我的 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"
]
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用命令在 Terraform 脚本中提取 AMI ID?
yda*_*coR 20
您可以使用aws_ssm_parameter
数据源在运行时获取参数的值:
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"
]
}
}
Run Code Online (Sandbox Code Playgroud)
但是,更好的方法可能是使用aws_ami
数据源更直接地过滤您想要的 AMI,而不是将 AMI ID 推送到 SSM 参数存储,然后稍后再查找。您可以过滤许多条件,包括名称、帐户所有者和标签。以下是aws_instance
资源文档中正在寻找最新 Ubuntu 20.04 AMI的示例:
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.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"
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11967 次 |
最近记录: |