我正在使用带有Ansible provisioner的Packer构建AMI,并使用Terraform以该AMI作为源来设置基础架构——与此文章有些相似:http://www.paulstack.co.uk/blog/2016/01/02/building-an-elasticsearch-cluster-in-aws-with-packer-and-terraform
当命令
packer build pack.json
成功完成时,我将以以下格式获得输出AMI ID:eu-central-1: ami-12345678
在我的terraform变量文件variables.tf
中,我需要指定源ami id和区域等内容。这里的问题是我不想手动或多次指定它们。对于区域(我预先知道),由于我可以在两种情况下都使用环境变量,所以很容易解决,但是对于输出ami呢?是否有内置的方法来连接这些产品或者一些不太hacky的方法来实现呢?
编辑: 对于任何感兴趣的人,这里提供一种hacky方法。在此解决方案中,我从packer输出中grep
了aws区域和ami,并在perl中使用正则表达式将结果写入terraform.tfvars
文件:vars=$(pwd)"/terraform.tfvars"
packer build pack.json | \
tee /dev/tty | \
grep -E -o '\w{2}-\w+-\w{1}: ami-\w+' | \
perl -ne '@parts = split /[:,\s]+/, $_; print "aws_amis." . $parts[0] ." = \"" . $parts[1] . "\"\n"' > ${vars}
export PKR_VAR_commit_hash="$(git rev-parse HEAD)"
。 - openCivilisation