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_NAMEofの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 コンテナレジストリを参照してください。
