GitLab CI/CDでTerraform Moduleを呼び出すには

GitLabTerraformCI/CDDevOps

はじめに

本投稿ではTerraform Moduleにおいて別GitLabリポジトリを参照する場合におけるTipsを記載していきたいと思います。 また、今回はTerraform Moduleの詳細については割愛させていただきますので、あらかじめご容赦下さい。

Terraform Moduleの設定

Terraform ModuleのsourceにてGitLabレポジトリを指定する必要がありますがサンプルは以下となります。 今回は例としてAWSリソースのVPCを作成するTerraform ResourceコードがGitLabリポジトリsample-terraform-vpc-moduleに格納されているとします。 また、該当リポジトリのcommitにはtagがふられており、refによって該当tagのcommitを参照するようになっています。

module "network" {
  source = "git::ssh://git@gitlab.com/<your_group>/sample-terraform-vpc-modules.git//terraform?ref=v0.0.1"
}

詳細は公式ドキュメントをご覧ください。

対象リポジトリへのアクセス方法

GitLab CIにてTerraform Moduleを適用する際には、その参照先のリポジトリsample-terraform-vpc-moduleへのアクセスが必要となります(Checkoutするために)。 そのため、権限が必要になるのですが、ここではその設定方法について説明していきたいと思います。 Terraform Moduleの設定では、対象sourceをsshによってアクセスするようにしています。 しかしながら、GitLab CIではこれをhttpによるアクセスに変更してあげることで、GitLab CI上に定義された環境変数CI_JOB_TOKENを利用して権限の問題を解消することができます。 GitLab CI/CDにおける定義済み環境変数についてはこちらをご覧下さい。

以下が.gitlab-ci.ymlにおける該当部分のサンプルコードです。

before_script:
  - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/<your_group>/sample-terraform-vpc-module.git".insteadOf ssh://git@gitlab.com/<your_group>/sample-terraform-vpc-module.git

今回はbefore_scriptにて設定を記述しているのですべてのJobで適用される形になりますが、ユースケースにより必要なJob内で個別に実行していただいても構わないと思います。

さいごに

いかがだったでしょうか。分かってしまえば簡単かもしれませんが、個人的には大変学びになりました。 誰かのお役に立てれば幸いです。