ecspresso や ecschedule から Terraform Cloud の state を参照する方法
Terraform Cloud の state を参照したい!
ecspressoとecscheduleの便利な機能の一つに Terraform の state を参照するプラグイン(tfstate プラグイン)があります。
tfstate プラグインを利用すると、以下ののようなマスタッシュ構文で Terraform で管理しているリソースの設定値を参照することができます。
{{ tfstate `path.to.resource` }}
READMEに記載されているtfstateプラグインの利用例として、ローカルの path を指定する方法とS3 bucketのURLを指定する方法がありますが、Terraform Cloud で管理している state を参照する例がありません。 ( 自分が見つけきれていないだけかもしれません... )
ecspresso のコードを読むと内部的に tfstate-lookup を利用していることがわかりました。
上記リポジトリを参照することで Terraform Cloud の場合の URL 指定方法を知ることができましたので記事にしてみました。
TFE_TOKEN
に設定する
API Token を発行して環境変数 まず、 Terraform Cloud にアクセスするためには、あらかじめ API Token を発行して環境変数 TFE_TOKEN
に設定しておく必要があります。
以下の PR にそのあたりの記述がありました。
API Token の作成方法についてはについては以下を参照してください。
API Token の種類として、 User, Team, Organization がありますので、運用形態にあわせて選択すると良いと思います。
たとえば、私のチームでは Terraform Cloud で1つのチームが1つの Organization を利用しており、 Team という単位では別れていないため Organization token を作成しました。
環境変数が設定できたら、次に進みます。
ecspresso と ecschedule の設定
ecsoresso, ecschedule それぞれの設定例を示します。
Terraform Cloud 上の state を参照するURLは remote://app.terraform.io/{ORGANIZATION}/{WORKSPACE}
の形式になります。
たとえば Organization foo
の Workspace bar
の state を参照する場合には ecspresso や ecschedule の config.yaml に以下のような設定を記述します。
plugins:
- name: tfstate
config:
url: remote://app.terraform.io/foo/bar
設定はこれだけです。
実際にデプロイする前に ecspresso render
や ecschedule diff
などを実行すると Terraform Cloud から state の値を読み取って設定が反映されることが確認できると思います。
さいごに
ecspresso や ecschedule のtfstateプラグインを利用してTerraformのstateを読み取ってリソースの設定値を参照できることは README を読んで理解していましたが、 Terraform Cloud で管理している場合の参照方法がやや分かりづらかったので記事として公開してみました。
この情報が誰かの参考となれば幸いです。
Discussion
(ecspressoの作者です)
記事ありがとうございます!おっしゃるとおり、ドキュメントになかったので追加しておきました。
ありがとうございます!!