Slide 1

Slide 1 text

GitHub と Terraform Cloud を 連携してみた Takuya Terada

Slide 2

Slide 2 text

GitHubとTerraform Cloud GitHubとTerraform Cloud

Slide 3

Slide 3 text

GitHub バージョン管理システム (VCS) 最もメジャーなVCS チーム開発用機能が充実 最新ツールとの連携 GitHubとTerraform Cloud 3

Slide 4

Slide 4 text

GitHubとTerraform Cloud 4

Slide 5

Slide 5 text

Terraform Cloud Infrastructure as Code (IaC) ツールのSaaS版 OSS版との主な違い 基盤とstateのクラウド管理 GUIの追加 チーム開発用機能が充実 最新ツールとの連携 GitHubとTerraform Cloud 5

Slide 6

Slide 6 text

GitHubとTerraform Cloud 6

Slide 7

Slide 7 text

GitHub と Terraform Cloud 両者を連携することで基盤の CICDが簡単に! GitHubは無料でもプライベ ートレポジトリ無制限! Terraform Cloudも5人未満 なら無料! GitHubとTerraform Cloud 7

Slide 8

Slide 8 text

連携方法 1. GitHubとTerraform Cloud (or HashiCorp Cloud Platform) アカウントを作成 2. GitHubにコードをプッシュ 3. Terraform Cloudで新規ワークスペースを作成 1. Version control workflow を選択 2. GitHubを選択しウィンドウに従い接続(初回のみ) 3. 対象とするレポジトリを選択 GitHubとTerraform Cloud 8

Slide 9

Slide 9 text

連携方法(オプション) 1. ローカル環境に terraform バイナリをインストール 2. terraform login コマンドで API Tokenを取得し接続 上記はオプションですが、設定を推奨します。 ローカルでplanしたりstateを取り込んだりCLIの実行が出来ます。 ※実行環境はリモートです GitHubとTerraform Cloud 9

Slide 10

Slide 10 text

コード上での設定(オプション) 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

Slide 11

Slide 11 text

GitHubとTerraform Cloudによる CICDワークフロー GitHubとTerraform CloudによるCICDワークフロー

Slide 12

Slide 12 text

GitHubとTerraform CloudによるCICDワーク フロー 1. 開発用ブランチを切りコード作成 2. コードをプッシュしプルリクエストを作成 3. レビュアーがコードとChecksを確認し承認 4. プルリエストをマージ、レビュアー承認のもと terraform apply GitHubとTerraform CloudによるCICDワークフロー 12

Slide 13

Slide 13 text

開発用ブランチを切りコード作成 GitHubとTerraform CloudによるCICDワークフロー 13

Slide 14

Slide 14 text

コードをプッシュしプルリクエストを作成 GitHubとTerraform CloudによるCICDワークフロー 14

Slide 15

Slide 15 text

レビュアーがコードとChecksを確認し承認 GitHubとTerraform CloudによるCICDワークフロー 15

Slide 16

Slide 16 text

レビュアーがコードとChecksを確認し承認 GitHubとTerraform CloudによるCICDワークフロー 16

Slide 17

Slide 17 text

レビュアーがコードとChecksを確認し承認 GitHubとTerraform CloudによるCICDワークフロー 17

Slide 18

Slide 18 text

レビュアーがコードとChecksを確認し承認 GitHubとTerraform CloudによるCICDワークフロー 18

Slide 19

Slide 19 text

プルリエストをマージ、レビュアー承認のもと terraform apply GitHubとTerraform CloudによるCICDワークフロー 19

Slide 20

Slide 20 text

プルリエストをマージ、レビュアー承認のもと terraform apply GitHubとTerraform CloudによるCICDワークフロー 20

Slide 21

Slide 21 text

プルリエストをマージ、レビュアー承認のもと terraform apply GitHubとTerraform CloudによるCICDワークフロー 21

Slide 22

Slide 22 text

プルリエストをマージ、レビュアー承認のもと terraform apply GitHubとTerraform CloudによるCICDワークフロー 22

Slide 23

Slide 23 text

トラブルシュート トラブルシュート

Slide 24

Slide 24 text

アクセスキーを利用していると state import でエラー トラブルシュート 24

Slide 25

Slide 25 text

アクセスキーがSensitive設定になっていることが原因 トラブルシュート 25

Slide 26

Slide 26 text

対策は以下の通り(優先度順) OIDCプロバイダを設定、IAMロールを利用 Dynamic Credentials with the AWS Provider GitHub Issueのワークアラウンドを頑張る remote backend does not allow imports with sensitive remote variables Variablesを削除、Sensitive設定なしでアクセスキーを再登録 トラブルシュート 26

Slide 27

Slide 27 text

OIDC連携するための作業概要 1. 【AWS】IDプロバイダを設定 2. 【AWS】プロバイダに割り当てるIAMロールを設定 3. 【Terraform Cloud】環境変数を設定 トラブルシュート 27

Slide 28

Slide 28 text

【AWS】IDプロバイダ トラブルシュート 28

Slide 29

Slide 29 text

【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

Slide 30

Slide 30 text

【Terraform Cloud】環境変数 トラブルシュート 30

Slide 31

Slide 31 text

まとめ まとめ

Slide 32

Slide 32 text

まとめ GitHubとTerraform Cloudの連携は簡単で、 チーム開発の安全性と速度を劇的に向上させます! 参考:参画案件での実績 チーム 名 で AWSアカウント 以上を管理! 年間 plan 以上! 年間 apply 以上! まとめ Takuya Terada 32