GCPのAuto Scaler(GCE Instagnce Template, Intance Group, HTTP Load Balancer) をTerraformでコード化しているのですが、起動設定(Instance Template)に登録するGCEのイメージを常に最新にしたい場合があります。
都度都度GCEイメージ名をハードコーディングするとイメージの更新時に漏れてしまう可能性があるため、最新イメージ取得を自動的にやりたいとします。
Terraformのドキュメントを見ていたら「Deploying the Latest Image」というトピックがあり、期待通りに動作したので本記事で共有したいと思います。
Google: google_compute_instance_template - Terraform by HashiCorp
なお、AWSのAMIの場合は以下の記事がとても参考になります。
参考: Terraformでもいつでも最新AMIからEC2を起動したい | DevelopersIO
GCEイメージファミリー
GCEイメージには「ファミリー」というイメージをグルーピングできる機能があります。
このイメージファミリーに含めることで、イメージ名が違ったとしても最新のイメージを取得するのが容易になります。
例えば、 debian-9
というイメージファミリーで検索すると、サポート終了のイメージも含めて多くのイメージがヒットします。ここで最新のイメージは debian-9-stretch-v20181011
となります。
Terraformで最新のGCEイメージを取得
ドキュメントにあるソース を引っ張ってきました。
data "google_compute_image" "my_image" { family = "debian-9" project = "debian-cloud" } resource "google_compute_instance_template" "instance_template" { name_prefix = "instance-template-" machine_type = "n1-standard-1" region = "us-central1" // boot disk disk { initialize_params { image = "${data.google_compute_image.my_image.self_link}" } } }
google_compute_image
はデータリソースといって、GCPのAPIをリクエストして取得するコンポーネントになります。今回は family
が debian-9
なので、先程の図と同じく debian-9-stretch-v20181011
というイメージを指定することになります。実際の参照は${data.google_compute_image.my_image.self_link}
となります。
まとめ
Terraformで最新のGCEイメージを取得したい方法を紹介しました。AWS AMIよりシンプルでわかりやすいですが、細かいフィルタ設定ができないので、その場合はイメージファミリーを細かく指定するなどして対応してください。