TL;DR
- 弊チームではGitHub ActionsとTerraform Cloudを用いてデプロイ作業の自動化、デプロイ構成情報を管理しています
- GitHub ActionsからTerraform Cloudの設定を変更することによって、構成情報の一元管理を実現しています。
- Terraform Cloudの設定を変更できるGitHub Actionsがあれば嬉しい
弊チームのデプロイ方針
弊チームでは、タクシー事業者のDXを推進 LINEを活用した「配車サービス」の8月本格提供に向けて 一部タクシー事業者へのテスト導入を開始に記載されているLINEを活用した「配車サービス」をタクシー事業者に提供しております。このサービスのデプロイ作業の可視化(コード化)にTerraformを、自動デプロイを実現するためにGitHub Actionsを用いました。またデプロイ構成情報(tfstate)の保管先にTerraform Cloudを用いて、デプロイ作業のチーム内における「べき等性」を確保しました。
このおかげで、同様な構成をもつサービスを横展開する際にデプロイ作業の簡略化も実現しています。
上記のフローは以下の通りです。
課題
このフローを実現するためには、課題がありました。Amazon Elastic Container Serviceへのデプロイ - GitHub ActionsやAzure App Service に Docker をデプロイする - GitHub Actionsにあるように、GitHub Actiosのドキュメントで継続的デプロイ(CD)を実現するために、AWS for GitHub ActionsやGitHub Actions for Azureを用いています。
この方法では、デプロイ構成情報がTerraform Cloudに保存されません。Terraform Cloud上で想定している使用コンテナーイメージと実際に動作しているコンテナーイメージの不一致が発生しました。
解決方法
この課題を解決する上でTerraform Cloud上で作成したWorkspace特有のVariableをGitHub Actionsから直接変更する方針を採用しました。
幸いにも、Terraform CloudにはWebAPIが提供されています。
本作業に必要なWebAPIは以下の3つです。
- Workspaces -> List workspaces
- Workspace-Specific Variables -> List Variables
- Workspace-Specific Variables -> List Variables
このWebAPIを利用して、Workspace特有のVaribleと指定しているデプロイに使うコンテナーイメージの値を更新 しています
今後の課題
Terraform CloudのWebAPIをたたくことができるGitHub Actionsがあればいいですね。
業務ではありませんが個人的にレポジトリを作成しました(README.mdしか作成していませんが)。時間を見つけて埋めていきます。