我正在使用带有 ansible provisioner 的 packer 来构建一个 ami,并使用 terraform 以该 ami 作为源来设置基础设施 - 有点类似于这篇文章: http: //www.paulstack.co.uk/blog/2016/01/ 02/构建-一个-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 方法。在此解决方案中,我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}