Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHubとTerraformCloudを連携してみた

 GitHubとTerraformCloudを連携してみた

GitHubとTerraformCloudを連携したAWS環境のCICDワークフロー例を説明します。
登壇情報:https://jawsug-bgnr.connpass.com/event/282341/

Takuya Terada

May 06, 2023
Tweet

More Decks by Takuya Terada

Other Decks in Technology

Transcript

  1. 連携方法 1. GitHubとTerraform Cloud (or HashiCorp Cloud Platform) アカウントを作成 2.

    GitHubにコードをプッシュ 3. Terraform Cloudで新規ワークスペースを作成 1. Version control workflow を選択 2. GitHubを選択しウィンドウに従い接続(初回のみ) 3. 対象とするレポジトリを選択 GitHubとTerraform Cloud 8
  2. 連携方法(オプション) 1. ローカル環境に terraform バイナリをインストール 2. terraform login コマンドで API

    Tokenを取得し接続 上記はオプションですが、設定を推奨します。 ローカルでplanしたりstateを取り込んだりCLIの実行が出来ます。 ※実行環境はリモートです GitHubとTerraform Cloud 9
  3. コード上での設定(オプション) CLI利用に必要です。 backend "remote" 設定は古く、 cloud での設定が推奨です。 Backend Type: remote

    | Terraform | HashiCorp Developer terraform { cloud { hostname = "app.terraform.io" organization = "terada-takuya-org" workspaces { name = "aws-organizations" } } } GitHubとTerraform Cloud 10
  4. 対策は以下の通り(優先度順) OIDCプロバイダを設定、IAMロールを利用 Dynamic Credentials with the AWS Provider GitHub Issueのワークアラウンドを頑張る

    remote backend does not allow imports with sensitive remote variables Variablesを削除、Sensitive設定なしでアクセスキーを再登録 トラブルシュート 26
  5. 【AWS】IAMロール(信頼されたエンティティ) { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal":

    { "Federated": "arn:aws:iam::999999999999:oidc-provider/app.terraform.io" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "app.terraform.io:aud": "aws.workload.identity" }, "StringLike": { "app.terraform.io:sub": "organization:terada-takuya-org:project:*:workspace:*:run_phase:*" } } } ] } トラブルシュート 29