Terraform Cloud 使ってみる
Terraform Cloud(tCloud) を使って、GCPのデプロイパイプラインを作成します。
デプロイフロー
デプロイパイプラインを作成するにあたり、vcs(github)を使って、CI/CDをしようと思います。
今回は試しに動かしてみようというモチベなので、githubにpushしたらtCloudでplanの実行、tCloudにて手動でapplyという形にします。
初期設定
まずは適当なterraform用のレポジトリを作成しておきます。
テストのためにレポジトリを作成したのでよろしければご使用ください。
https://github.com/IDOShun/learn-terraform-cloud.git
ちなみに公式のAWSのレポジトリもあります(GCPはあるのか見つけきれず)
git clone https://github.com/hashicorp/learn-terraform-cloud.git
次に、tCloudでアカウントを作成して、Project&workspaces
のページより、New
からworkspace
を選択します。
1. Choose Type
タイプには3種類あります。
1. Version Controll workflow
2. CLI-driven workflow
3. API-driven workflow
今回は、Githubにpushした時にplanが発動するようにしたいので、1のVersion Controll workflowを選択します。
2.3. Connect to VCS
1を選択すると、GitHub Appより、GitHubに接続できるので、Terraformを管理しているレポジトリ(先ほど作成したもの)に接続します。
4. Configure settings
Advanced optionsを設定します。
- Workspace Settings
Manual applyにしておきます。今回は冒頭でも説明したように、pushした時にplanまでは自動で行うようにしますが、applyは手動で行うので、こちらを選択します。 - VCS Triggers
今回はレポジトリの中にはroot直下にterraformファイル(.tfなど)があり、他のディレクトリなどはないため設定しませんが、12FactorAppの1(コードベース)に則るならterraformのコードはレポジトリの中のどこかのディレクトリの中に入っていると思います。その際にterraform以外のファイル(ディレクトリ)がpushされた時にもplanが実行されるのを防ぐにはここでterraformの実行フォルダを設定しておきます。branchも必要なら登録します。
Variablesの設定
さて、これでpushして、plan...はまだできません。権限(認証情報)がないからです。
権限(認証情報)は12FactorAppの3(設定)に則り、今後のCI/CDのことも考え、環境変数としてtCloudに保存します。
variables
のタブより、Add variable
で認証情報を追加します。Terraform variable
とEnvironment variable
の二つありますが、Terraformのコードに値を渡すのでTerraform variable
のところに設定します
Key = credentials, Value = (gcpより入手したterraform用のserviceAccountの認証情報)
また、機密情報なので、sensitive
のところにはチェックを入れておきます。
実際にapplyしてみる
それでは、実際にapplyまでしてみます。まず、ターミナルからクローンした先ほどのディレクトリに移動し、
terraform login
と入力し、Tokenを入力し認証まで行います。TokenはtCloudのUser SettingsのTokens
から作成できます。
無事認証されたらターミナルから、
terraform init
でterraformファイルを初期化します。そしてcommit後リモートリポジトリにpushします。
ちなみにここで、terraform apply
としてみても、
terraform apply
╷
│ Error: Apply not allowed for workspaces with a VCS connection
│
│ A workspace that is connected to a VCS requires the VCS-driven workflow to ensure that the VCS remains the single source of truth.
と出て、手動でapplyができなくなっています。
vscodeより、pushしてみると、、、
無事にplanができています!
確認のため手動でapplyしてみると、無事gCloud上にリソースが作成されているのがわかりました。
後片付け
後片付けは簡単です。settings → Destruction and Deletionより、Queue destroy plan
で既存のリソースを手動削除します。削除が成功したので、今後この学習用のworkspaceは使わないので、Delete Workspace
より削除します。
終わりに
今回は初めてCI/CDをしてみました。VCSにアップロードするだけで自動的に反映されるのは感動しました。pull request でplan作成、mergeでapplyという設定にもできるみたいなので、stgの段階に入ったらそちらに移行しようと思います。ありがとうございました。
参考サイト:
Discussion