前回のterraformのテスト記事に引き続き、テクニカルエバンジェリストグループのMです。
前半の記事からだいぶ間が空いてしまいましたが、terraformのテストの後半記事です。
前回は、terraform testで実行できるテストで、terraform plan時にテストが実行されるものを作りました。
今回は、terraform applyしてわかるところに対するテストを書いてみたいと思います。
テーマとして使うterraformのリソースは、公式のモジュールからec2-insntanceとなります。
ドキュメントはこちら
公式で用意されているモジュールを使うと、自前でリソースを定義せず、
パッケージ化されたものに値をいれるだけで比較的楽にリソースが作成できます。
今回作成するコードはこちらになります。
シンプルにVPCの中にEC2を1台立てているだけの構成です。
今回の焦点は構成ではないので、細かいコードについてのお話は割愛します。
今回使用しているterraform-aws-modules/ec2-instance/awsモジュールには、create_iam_instance_profileという値があります。
これをtrueにすると、作成するインスタンス用にロールが作られ、割り当てられます。
名前を特に指定していないと、モジュールで定義されているユニークな名前が自動的につきます。
ロール名を特に意識していなくとも、terraform plan, terraform applyが通ります。
作ったときにあれ、ロールの名前が自動でついてるやつになってる!名前つけ忘れた!
なんてことになるわけですね。(自分がよくこれをやらかします)
そこで、こんなテストコードを書いておくと名前をつけ忘れる、といったことが減るわけです。
早速実行してみましょう。
このような形で、terraform testを実行すると、実際に裏でリソースが作成され、自動的に作成されたロール名が想定と違うことでテストが失敗します。
このように、applyして実際にロール名を目で確認するまで命名ミスに気づかない、ということがなくなります。
本当は作ったあとにインスタンスの状態などを取得して、なにかのミスで利用不可能や疎通不可能になった場合のテストなどができればよいのですが、
流石にそこまで複雑なことをしようとすると、null_resourceやlocal_execを使わないと実現はできなさそうです。
ですが、このような簡単なテストでも手動で確認するような手間が省け、
より構築時に発生するような軽微なミスを減らすテストをかけるのではないかなと思います。
以上、Mでした。