🧑‍🎓

Terraform Cloud 使ってみる

2023/10/12に公開

Terraform Cloud(tCloud) を使って、GCPのデプロイパイプラインを作成します。

デプロイフロー

デプロイパイプラインを作成するにあたり、vcs(github)を使って、CI/CDをしようと思います。
今回は試しに動かしてみようというモチベなので、githubにpushしたらtCloudでplanの実行、tCloudにて手動でapplyという形にします。

初期設定

まずは適当なterraform用のレポジトリを作成しておきます。
テストのためにレポジトリを作成したのでよろしければご使用ください。

my test repo
https://github.com/IDOShun/learn-terraform-cloud.git

ちなみに公式のAWSのレポジトリもあります(GCPはあるのか見つけきれず)

hashicorp AWSレポ
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が発動するようにしたいので、1Version 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 variableEnvironment 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の段階に入ったらそちらに移行しようと思います。ありがとうございました。


参考サイト:
https://developer.hashicorp.com/terraform/tutorials/cloud-get-started/cloud-vcs-change

Discussion