しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Pipelines を使った Terraform 1.0 移行時の注意点

先日ついに Terraform が 1.0 に到達して GA したというニュースが飛び込んできましたね。個人的には Terraform は 1.0 にならない系のプロダクトだと思っていましたが違っていたようです。

既に Terraform と Azure の組み合わせを多くのプロジェクトで使ってきたので、0.1x からの State の移行がスムーズに行えるのは非常にありがたいです。

最近は新しいプロジェクトでは GitHub と GitHub Actions で Terraform 向けの Workflow を作成することが多いのですが、既に Azure を使っている場合は Azure AD でシームレスにログインが行える Azure DevOps を使った方が便利なことも多いです。

それ故に Terraform 向けの Pipeline も数多く作成してきましたが、Azure Pipelines 向けの Terraform Task には 0.15 の時点で問題がありました。

Azure のデプロイに使用する Service Principal を渡す方法が新しくなり、それの後方互換性が 0.15 から完全に切られたので、古い方法にしか対応していなかった TerraformTaskV1@0 では 0.15 以降のバージョンが使えない状態でした。

当然ながら手動で必要な環境変数を設定すれば動作しましたが、Service Connection 経由で使えないのが面倒でした。この問題が少し前のアップデートで修正されたので Terraform 1.0 も使えるようになりました。

Azure Pipelines 向けの Terraform 拡張は検索するといくつか出てくるのですが、最近は Microsoft DevLabs の Terraform 拡張を使うようにしています。数年前に HashiCorp とのパートナーシップによってこの辺り拡充されるという話があった割にイマイチではありますが…。

インストール済みの拡張がバージョンアップされているかは、Azure DevOps の Manage extensions から確認できます。自動で行われるはずですが、タイミングが良くわからないので確認しておきたい部分です。

f:id:shiba-yan:20210609143617p:plain

一先ずはバージョン 0.1.10 がインストールされていれば問題ありません。

Terraform CLI のインストール Task は変更されていませんが、CLI 実行の Task は TerraformTaskV2@2 に更新されているので、既存の Pipeline で参照している部分を置き換える必要があります。

f:id:shiba-yan:20210609143908p:plain

古い Task も維持されているので、拡張が更新されても既存の Pipeline が壊れることはありませんが、0.14 以降では差分が大幅に見やすくなっているのでさっさとバージョンアップしておくのが良いです。

個人的ベストプラクティスとして公開している GitHub Repo は TerraformTaskV2@2 と Terraform 1.0 への対応を行っておいたので、興味がある方は該当の PR を参照して貰えればと思います。

要するに Terraform 拡張の更新と Task の変更を行えば問題なく利用できるという話でした。自分のように 0.15 へのアップデートを試みて諦めた人もいるのかなと思ったので、少し経緯を含めて書きました。