必要なもの
- GCPのアカウント
- GitHubのアカウント
- Terraform Cloudのアカウント
GCPの設定
Terraform CloudからGCPにアクセスするため、サービスアカウントとクレデンシャルが必要になります。以下の手順で作成してください。
gcloud iam service-accounts create terraform --display-name 'Service Account for Terraform'
サービスアカウントにポリシーをバインディング
GCP_PROJECT_ID=$(gcloud config list --format='value(core.project)') SA_EMAIL=$(gcloud iam service-accounts list --filter='displayName="Service Account for Terraform"' --format='value(email)') gcloud projects add-iam-policy-binding $GCP_PROJECT_ID --member serviceAccount:$SA_EMAIL --role roles/owner
サービスアカウントのクレデンシャルをダウンロード
CREDENTIAL_FILE=./terraform-credentials.json SA_EMAIL=$(gcloud iam service-accounts list --filter='displayName="Service Account for Terraform"' --format='value(email)') gcloud iam service-accounts keys create $CREDENTIAL_FILE --iam-account=$SA_EMAIL
GitHubの設定
Terraform Cloudから参照するためのリポジトリが必要です。サンプルプロジェクトを用意したので、自分のアカウントにForkしておきます。
Terraform Cloudの設定
何はともあれ、Terraform Cloudにアカウントがないと話が始まりません。こちらからアカウント登録を進めてください。Eメールアドレスの確認まで終わると以下の画面に遷移すると思います。
「Start from scratch」からOrganizationの設定をお願いします。
既にアカウントをお持ちの方は、赤枠よりOrganizationの作成をお願いします。
Organizationの作成が完了するといよいよ連携の設定です。
右上にある「New workspace」に進み、VCSの設定に入っていきます。
赤枠のregister a new OAuth Application
をクリックするとGitHubのOAuthアプリの設定に入っていきます。
青枠のApplication name
Homepage URL
Authorization callback URL
をGitHubの画面に入力し、登録を完了してください。
登録が完了すると以下の画面に遷移しますので、赤枠の「Generate a new client secret」からシークレットを生成します。
GitHubの画面に表示されているClient ID
Client Secrets
をTerraform Cloudの画面に入力し「Connect and continue」をクリックすることで、GitHubとの連携確認画面がでてきますので、「Authorize xxx」することで連携は完了します。
「Choose a repository」の画面に遷移するので「tfc-sample」を選択してください。
「Create workspace」でWorkspaceの作成は完了です。
続いてGCPのクレデンシャルと、対象のプロジェクトを登録していきます。
「Variables」タブに移動し、「Add variable」をクリックします。
クレデンシャルは改行を削除して登録します。以下のコマンドを実行してください。
CREDENTIAL_FILE=./terraform-credentials.json jq -c < $CREDENTIAL_FILE
これで改行が削除されたJSONができあがるので登録していきます。
「Environment variable」のラジオボタン選択します。
Keyは「GOOGLE_CREDENTIALS」Valueは先ほど改行を削除した値になります。貼り付けたValueの最終行に改行が入っていないか確認してください。もし改行されているようであれば削除してください。
「Sensitive」のチェックボックスがあるのでチェックしておきましょう。ここにチェックをつけないとVariablesの画面から丸見えになってしまいます。
最後に「Save variable」をクリックして完了です。
続いてGCPのプロジェクトを登録します。サービスアカウント作成時からgcloudでプロジェクトを変更していなければ、以下のコマンドで取得できます。
gcloud config list --format='value(core.project)'
今回は「Terraform variable」のラジオボタンを選択します。
このようにWorkspace variablesが2つ登録されていれば完了です。
実行してみる
「Actions」から「Start new run」をクリックすると実行開始の画面に遷移します。「Start run」をクリックすることで、Terraformが実行されます。
Runsタブに遷移され、Planが実行されます。>
をクリックすることでPlanの内容が画面に展開されます。ここでエラーが出なければ「Confirm & Apply」をクリックし、「Confirm Plan」をクリックすることでApplyが実行できます。
「Applied」の表示になり、Terraform Cloudでの操作は完了です。GCPの画面をみるとインスタンスが起動してるのが確認できると思います。
削除する
使い終わったら片付けです。
「Settings」の「Destruction and Deletion」をクリックし、削除画面に進んでください。
「Queue destory plan」をクリックすると、削除確認画面がでてくるので、Workspace名を入力し「Queue destory plan」をクリックすると削除キューが追加されます。Runsタブに移動されるので、「Confirm & Apply」をクリックし削除処理を実行してください。
これで削除は完了です。