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のスレッドを参照してください。このイシューを解決するには、bash
、zsh
または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_AUTOMATION | true | Terraformコマンドが自動化されていることを示すためにtrue 。 |
TF_GITLAB_SOURCED | false |
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_METHOD | POST | Terraformバックエンドのロックエンドポイントに使用するメソッド。 |
TF_HTTP_UNLOCK_ADDRESS | $TF_ADDRESS/lock | Terraformバックエンドのロック解除エンドポイントのアドレス。 |
TF_HTTP_UNLOCK_METHOD | DELETE | Terraformバックエンドのロック解除エンドポイントに使用するメソッド。 |
TF_HTTP_USERNAME | $TF_USERNAME | Terraform バックエンドで認証するユーザー名。 |
TF_HTTP_PASSWORD | $TF_PASSWORD | Terraformバックエンドで認証するためのパスワード。 |
TF_HTTP_RETRY_WAIT_MIN | 5 | Terraform バックエンドへの HTTP リクエストの待ち時間。 |
コマンド変数
gitlab-terraform
を実行すると、これらの変数が設定されます。
変数 | デフォルト | 説明 |
---|---|---|
TF_IMPLICIT_INIT | true |
true の場合、それを必要とするラップされたコマンドの前に、暗黙のterraform init が実行されます。 |
TF_INIT_NO_RECONFIGURE | false |
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/
のコンテナイメージで提供されます。これらのイメージを使ってインテグレーションを設定・管理することができます。
以下のイメージが提供されています:
画像名 | タグ | 説明 |
---|---|---|
stable | latest |
terraform-images の最新リリースと Terraform の最新リリースをバンドル。 |
releases/$TERRAFORM_VERSION | latest | 特定の Terraform リリースにバンドルされた最新のterraform-images リリース。 |
releases/$TERRAFORM_VERSION | $TERRAFORM_IMAGES_VERSION | 特定のterraform-images リリースが特定の Terraform リリースにバンドルされています。 |
サポートされている組み合わせについては、 terraform-images
コンテナレジストリを参照してください。