TerraformCloud-GitHub連携

technologies

ベンジャミンのクワバラです。

弊社ではインフラ構築にTerraformを利用しています。案件としてはWebサイト構築が多いのですが、WebサイトのAWSアーキテクチャ選定では以下2パターンのどちらかを採用しています。

Webサイト構築パターン

  1. FrontendとBackendどちらもAmplify
  2. FrontendはAmplify hostingでBackendをECS Fargateで構築

インフラメンバーがBackendをECS Fargateで構築する際はTerraformを利用しています。TerraformはローカルPCから実行できるのですが、そうすると特定の作業者に依存してしまうため、依存を避けるためにTerraformCloudを採用しました。Terraform利用開始して1年経過し、複数案件を進めていくと案件毎にTerraformソースコードが増えて色々課題が見えてきました。

課題

  • Terraformソースコードを案件毎に切られたBacklogプロジェクトのファイルに保管しているため保管場所がバラバラ
  • GitHubなどのソースコードリポジトリで管理していないため変更管理ができていない
  • インフラ構成の変更に対してレビューができていない(Stagingで問題なければ本番リリース)

対策

  • GitHubを用意してTerraformCloudとインテグレーションさせることで課題が全てクリアになる見込み

アーキテクチャ

対応したこと

既存案件はインフラ変更されては困るため、GitHubとTerraformCloudは連携させずにGitHubにソース保存するのみとしました。新規案件から上記の構成でGitHub-TerraformCloud連携させる方針としています。具体的に実施した作業は以下になります。

  • 既存案件(Terraformソース管理のみ)
    • GitHub作業
      • 案件毎のGitHubリポジトリを用意
      • コラボレーターとして社内メンバーを招待
      • TerraformソースコードをGitHubリポジトリにPush
  • 新規案件(ソース管理+IaC CI/CD環境構築)
    • GitHub作業
      • 新規案件用のGitHubプライベートリポジトリを用意
      • コラボレーターとして社内メンバーを招待
    • TerraformCloud作業
      • 案件用のプロジェクトを作成
      • 環境毎にWorkspaceを作成してブランチと連携
    • AWS作業
      • 案件用のAWSアカウントでIAMロールを作成し、TerraformCloudからAssumeRole可能にする(OIDC認証の実現)

成果

TerraformソースコードをGitHubに移動できたため、課題だったソース管理と変更管理は実現できました。

インフラ変更に対するレビュー(プルリクマージの運用)が出来ていないという課題については一度インフラを作った後は中々インフラを修正する機会がなく、まだ実現できていません。

今後

最近TerraformCloudの料金体系が変更され、ユーザ数に応じた課金体系からリソース単位の課金体系になりました。そのためこのままTerraformを利用し続けるかどうかは様子見つつ、他のIaCツール(AWS CDKやAWS Copilot)も試してみる予定です。

Related posts