A few months ago when I posted on building Packer images with Terraform I shared how I use the ID of the null resource to look up the image that I built. While this has worked out pretty well, I started having some trouble if the previous Terraform run failed.
I learned that Terraform’s null_resource
will still create an ID and put it in the state file even if the null_resource
fails, so that on the subsequent runs, the aws_ami
data resource will try to look up an AMI with that ID, causing the Terraform to fail. This would happen even if the null resource was going to be built again. To fix it, I would have to comment out the tag:id filter and search only for the name, at least until I got the stack back into good shape.
Thankfully, it was a pretty easy fix. Since I rebuild my AMIs every time the Terraform runs, I just added a depends_on
clause to the aws_ami
data resource:
data "aws_ami" "this" {
depends_on = [null_resource.packer]
filter {
name = "tag:id"
values = [null_resource.packer.id]
}
filter {
name = "name"
values = [join("-", [var.name, "*"])]
}
most_recent = true
owners = ["self"]
}
Now when I run my terraform, it will wait for the packer image to build before getting the new ID and placing it in the search.
Comments