GitLab Terraformヘルパー

GitLabはGitLabが管理するTerraform Stateとのインテグレーションを容易にするために2つのヘルパーを提供しています。

  • gitlab-terraform スクリプトはterraform コマンドの薄いラッパーです。
  • terraform-images コンテナイメージ。gitlab-terraform スクリプトとterraform 自体が含まれます。

どちらのヘルパーもTerraform Imagesプロジェクトでメンテナーされています。

gitlab-terraform

gitlab-terraform スクリプトはterraform コマンドの薄いラッパーです。

CI/CD パイプラインでgitlab-terraform を実行し、GitLab が管理する Terraform Stateバックエンドに接続するために必要な環境変数を設定します。

ヘルパースクリプトのソース(実行はしない)を作成します。

gitlab-terraform スクリプトをソースにすると、terraform 呼び出しの terraformための環境設定は行わterraform れますが、 実際には実行 terraformされません。このスクリプトをソース化できるのは、環境を準備するために余分な手順を実行する必要がある場合や、terragrunt のような代替ツールを使用する場合です。

スクリプトをソースするには、以下を実行します:

source $(which gitlab-terraform)

BusyBoxのように、他のスクリプトがあなたのスクリプトをソースするケースをサポートしていないShellもあります。詳細は、Stack Overflowのスレッドを参照してください。このイシューを解決するには、bashzsh またはksh を使用するか、gitlab-terraform をシェルから直接ソースしてください。

コマンド

以下のコマンドでgitlab-terraform を実行できます。

コマンドコマンドラインを転送しますか?暗黙のinit?説明
gitlab-terraform applyはいはい terraform apply
gitlab-terraform destroyはいはい terraform destroy
gitlab-terraform fmtはいなし terraform fmt をチェックモードで実行します。
gitlab-terraform initはい該当なし terraform init
gitlab-terraform planはいはい terraform plan を実行し、plan.cache ファイルを作成します。
gitlab-terraform plan-jsonなしなし plan.cache ファイルをMR インテグレーション用の GitLab Terraform レポートに変換します。
gitlab-terraform validateはいあり(バックエンドなし) terraform validate
gitlab-terraform -- <cmd>はいなしラップされていてもterraform <cmd> を実行します。
gitlab-terraform <cmd>はいなしコマンドがラップされていない場合、terraform <cmd> を実行します。

汎用変数

gitlab-terraform を実行すると、これらの変数が設定されます。

変数デフォルト説明
TF_ROOT設定なしTerraform設定のルート。設定されている場合、Terraform-chdir の引数値として使用されます。読み書きされるファイルはすべて、指定された設定ルートからの相対パスとなります。
TF_CLI_CONFIG_FILE$HOME/.terraformrc Terraform設定ファイルの場所。
TF_IN_AUTOMATIONtrueTerraformコマンドが自動化されていることを示すためにtrue
TF_GITLAB_SOURCEDfalse gitlab-terraform が内部ソースである場合はtrue に設定します。
TF_PLAN_CACHE $TF_ROOT/plan.cache または$PWD/plan.cache プランキャッシュファイルの場所。TF_ROOT が設定されていない場合、そのパスは現在の作業ディレクトリ ($PWD) からの相対パスとなります。
TF_PLAN_JSON $TF_ROOT/plan.json または$PWD/plan.json MR インテグレーション用の計画 JSON ファイルの場所。TF_ROOT が設定されていない場合、そのパスは現在の作業ディレクトリ ($PWD) からの相対パスとなります。
DEBUG_OUTPUT"false" "true" に設定された場合、すべての文はset -x で記録されます。

GitLabが管理するTerraformの状態変数

gitlab-terraform を実行すると、これらの変数が設定されます。

変数デフォルト説明
TF_STATE_NAME設定なし TF_ADDRESS が設定されておらず、内部でTF_STATE_NAME 指定 TF_STATE_NAMEされている場合は、GitLabが管理するTerraformのステート名としてTF_STATE_NAME ofの TF_STATE_NAME値が使用されます。
TF_ADDRESSのTerraform State API URLです。$TF_STATE_NAME TF_HTTP_ADDRESSのデフォルトとして使用されます。デフォルトではGitLabが管理するTerraform State名としてTF_STATE_NAME
TF_USERNAME $GITLAB_USER_LOGIN $TF_PASSWORD が設定されていない場合はgitlab-ci-token を使います。 TF_HTTP_USERNAME のデフォルトとして使用。
TF_PASSWORD$CI_JOB_TOKEN TF_HTTP_PASSWORD のデフォルトとして使用。
TF_HTTP_ADDRESS$TF_ADDRESS Terraform バックエンドのアドレス
TF_HTTP_LOCK_ADDRESS$TF_ADDRESS/lock Terraformバックエンドのロックエンドポイントへのアドレス
TF_HTTP_LOCK_METHODPOST Terraformバックエンドのロックエンドポイントに使用するメソッド
TF_HTTP_UNLOCK_ADDRESS$TF_ADDRESS/lock Terraformバックエンドのロック解除エンドポイントのアドレス
TF_HTTP_UNLOCK_METHODDELETE Terraformバックエンドのロック解除エンドポイントに使用するメソッド
TF_HTTP_USERNAME$TF_USERNAME Terraform バックエンドで認証するユーザー名
TF_HTTP_PASSWORD$TF_PASSWORD Terraformバックエンドで認証するためのパスワード
TF_HTTP_RETRY_WAIT_MIN5Terraform バックエンドへの HTTP リクエストの待ち時間

コマンド変数

gitlab-terraform を実行すると、これらの変数が設定されます。

変数デフォルト説明
TF_IMPLICIT_INITtrue true の場合、それを必要とするラップされたコマンドの前に、暗黙のterraform init が実行されます。
TF_INIT_NO_RECONFIGUREfalse true の場合、暗黙のterraform init-reconfigureなしで実行されます。
TF_INIT_FLAGS設定なし terraform init 追加フラグ。

Terraformの入力変数

gitlab-terraform を実行すると、これらのTerraform入力変数が自動的に設定されます。デフォルト値の詳細については、定義済み変数を参照してください。

変数デフォルト
TF_VAR_CI_JOB_ID$CI_JOB_ID
TF_VAR_CI_COMMIT_SHA$CI_COMMIT_SHA
TF_VAR_CI_JOB_STAGE$CI_JOB_STAGE
TF_VAR_CI_PROJECT_ID$CI_PROJECT_ID
TF_VAR_CI_PROJECT_NAME$CI_PROJECT_NAME
TF_VAR_CI_PROJECT_NAMESPACE$CI_PROJECT_NAMESPACE
TF_VAR_CI_PROJECT_PATH$CI_PROJECT_PATH
TF_VAR_CI_PROJECT_URL$CI_PROJECT_URL

Terraformイメージ

gitlab-terraform ヘルパースクリプトとterraform 自体はregistry.gitlab.com/gitlab-org/terraform-images/のコンテナイメージで提供されます。これらのイメージを使ってインテグレーションを設定・管理することができます。

以下のイメージが提供されています:

画像名タグ説明
stablelatest terraform-images の最新リリースと Terraform の最新リリースをバンドル。
releases/$TERRAFORM_VERSIONlatest特定の Terraform リリースにバンドルされた最新のterraform-images リリース。
releases/$TERRAFORM_VERSION$TERRAFORM_IMAGES_VERSION特定のterraform-images リリースが特定の Terraform リリースにバンドルされています。

サポートされている組み合わせについては、 terraform-images コンテナレジストリを参照してください。