私は、ansible プロビジョナーで packer を使用して ami を構築し、terraform を使用してその ami をソースとしてインフラストラクチャをセットアップしています - この記事に多少似ています: http://www.paulstack.co.uk/blog/2016/01/ 02/build-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 はどうですか? これらの製品をチェーンする組み込みの方法はありますか、それともそれほどハックではないアプローチですか?
編集:興味があるかもしれない人のためのハッキーなアプローチ。このソリューションでは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}