とことんDevOps | 日本仮想化技術が提供するDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けするとことんDevOpsでは、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果など、DevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、アジャイル開発、コンテナ開発など

開催予定の勉強会

各種SNSのフォローもよろしくお願いいたします。

Terraform CloudとGitHubを連携してGCPにインスタンスを起動してみる

必要なもの

  • 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しておきます。

github.com

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」をクリックし削除処理を実行してください。

これで削除は完了です。