TerraformとGitLabによるInfrastructure as Codeの実現

GitLabでインフラストラクチャを管理するには、Terraformとのインテグレーションを使って、バージョン管理、再利用、共有が可能なリソースを定義することができます:

  • コンピュート、ストレージ、ネットワークリソースのような低レベルのコンポーネントを管理します。
  • DNSエントリやSaaS機能などの高レベルコンポーネントを管理します。
  • GitOps デプロイと Infrastructure-as-Code (IaC) ワークフローの組み込み。
  • GitLabをTerraformのステートストレージとして使用します。
  • Terraformモジュールを保存して使用し、一般的で複雑なインフラストラクチャのパターンを簡素化します。

TerraformとのインテグレーションでGitLabが提供する機能の概要をビデオでご覧ください。

プロジェクトとTerraformのインテグレーション

IaC ScanningはGitLab 14.6で導入されました。

GitLabとTerraformとのインテグレーションはGitLab CI/CDを通して行われます。include 属性を使って Terraform テンプレートをプロジェクトに追加し、そこからカスタマイズします。

始めるには、あなたのニーズに最も適したテンプレートを選んでください:

すべてのテンプレート

  • GitLabが管理するTerraformステートをTerraformステートストレージのバックエンドとして使用します。
  • 4つのパイプラインステージをトリガーします:test,validate,build, anddeploy.
  • Terraformコマンドを実行します:test validate,plan,plan-json. また、デフォルトブランチでのみapply を実行します。
  • IaC Scanningを使ってセキュリティの問題をチェックします。

最新のTerraformテンプレート

最新のテンプレートは最新のGitLabバージョンに対応しています。最新のGitLabの機能を提供しますが、変更を含む可能性があります。

最新のTerraformテンプレートを安全に使うことができます:

  • GitLab.comを使うなら。
  • GitLabの新しいリリースごとに更新されるセルフマネージドインスタンスを使う場合。

安定した高度なTerraformテンプレート

以前のバージョンのGitLabを使用している場合、GitLabのバージョンとテンプレートのバージョンの非互換エラーに直面するかもしれません。このような場合、これらのテンプレートのいずれかを使うことができます:

note
GitLabの各メジャーリリース(例えば15.0)では、最新のテンプレートが古いテンプレートを置き換えます。このプロセスでは、変更を壊す可能性があります。必要であれば、古いバージョンのテンプレートを使うことができます。

Terraformテンプレートを使う

Terraformテンプレートを使うには:

  1. 左のサイドバーで、Searchを選択するか、もしくはGo toを選択し、Terraformとインテグレーションしたいプロジェクトを探します。
  2. Code > Repositoryを選択します。
  3. .gitlab-ci.yml ファイルを編集し、include 属性を使用して Terraform テンプレートを取得します:

    include:
     # To fetch the latest template, use:
      - template: Terraform.latest.gitlab-ci.yml
     # To fetch the advanced latest template, use:
      - template: Terraform/Base.latest.gitlab-ci.yml
     # To fetch the stable template, use:
      - template: Terraform.gitlab-ci.yml
     # To fetch the advanced stable template, use:
      - template: Terraform/Base.gitlab-ci.yml
    
  4. 以下のように変数を追加します:

    variables:
     TF_STATE_NAME: default
     TF_CACHE_KEY: default
     # If your terraform files are in a subdirectory, set TF_ROOT accordingly. For example:
     # TF_ROOT: terraform/production
    
  5. オプション。.gitlab-ci.yml ファイルで、設定をカスタマイズするために取得したテンプレートに存在する属性をオーバーライドします。

Terraformテンプレートレシピ

GitLabが作成したテンプレートレシピについては、Terraform template recipesを参照してください。