A documentação oficial atualizada apresenta uma forma de não precisar hard-codar o id da ami no bloco de resource.
É possível usar o bloco data para fazer uma busca da imagem mais recente de acordo com o filtro e depois usar o id para passar ela no bloco resource.
Adicione o seguinte bloco data após o bloco provider:
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*"]
}
owners = ["099720109477"] # Canonical
}
Isso vai pegar a ami mais recente e jogar dentro da variável data.aws_ami.ubuntu.id. Depois é só usar ela em resource:
resource "aws_instance" "app_server" {
ami = data.aws_ami.ubuntu.id
instance_type = "t3.micro"
tags = {
Name = "primeira-instância"
}
}
fonte: https://developer.hashicorp.com/terraform/tutorials/aws-get-started/aws-create#data-sources