tfe providerを使って、HCP TerraformにGitHubと連携したWorkspaceを作成する

tfe providerを使って、HCP TerraformにGitHubと連携したWorkspaceを作成する

Clock Icon2024.12.28

HCP TerraformでWorkspacesを作る際に、GitHubと連携させるパターン(VCS Driven Workflow)は多いかと思います。

今回はこの構成をtfe providerを使って作成してみました。

前提: GitHubとHCP Terraformの接続方法

GitHubと連携させるためには、HCP TerraformとGitHubを接続する必要があります。

接続方法は2つの方法があります。

  • GitHub Apps
  • OAuth

設定が簡単でより細かい権限設定が可能なため、GitHub Appsを使うパターンがおすすめです。

本記事でも、GitHub Appsを使う方法を紹介します。

より詳細な違いを知りたい場合は、以下の公式ドキュメントをご確認ください。

https://developer.hashicorp.com/terraform/cloud-docs/vcs/github-app
https://developer.hashicorp.com/terraform/cloud-docs/vcs/github

GitHub Apps VCSプロバイダーを設定する

tfe providerではできなさそうだったので、手動で行います。

GitHub Organizations毎に行う必要はありますが、変更頻度は低い作業のため、手動でも問題ないかと思います。

Workspaceの作成画面から、HCP Terraform用のGitHub Appをインストールできます。

HCP Terraformの管理画面にアクセスし「Workspaces」-> 「New」 -> 「Workspace」-> 「<任意のプロジェクトを選択>」-> 「Create」の順に選択します。

この際、Projectの選択が必要です。

実際にWorkspaceは作成しないため、適当なProjectを選んでいただいて問題ありません。

Workspace作成

「Version Control Workflow」を選択します。

VCS Workflow

連携方法の選択が求められるため、GitHubアプリを選択します。(私の環境ではすでにアプリが存在するため、以下はOrganizationを追加するスクショです)

Add Organizations

Intall App

HCP Terraformからのアクセスを許可するリポジトリを選択して、「Install」を選択します。

Cursor_と_Installing_Terraform_Cloud.png

これでインストールは完了です。

HCP TerraformのWorkspace作成の画面は閉じても構いません。

https://developer.hashicorp.com/terraform/cloud-docs/vcs/github-app

tfe providerを使ってWorkspaceを作成

ここからは、Terraformを使って設定を行います。

今回は以下のコードで、GitHubと連携したWorkspaceを作成します。

main.tf
terraform {
  required_providers {
    tfe = {
      source  = "hashicorp/tfe"
      version = "0.62.0"
    }
  }
}

provider "tfe" {}

data "tfe_project" "this" {
  name         = var.project_name
  organization = var.organization_name
}

data "tfe_github_app_installation" "this" {
  name = var.github_organization_name
}

resource "tfe_workspace" "this" {
  name              = "test-vcs-workspace"
  organization      = var.organization_name
  project_id        = data.tfe_project.this.id
  working_directory = var.terraform_working_directory

  vcs_repo {
    identifier                 = "${var.github_organization_name}/${var.github_repo_name}"
    branch                     = "main"
    github_app_installation_id = data.tfe_github_app_installation.this.id
  }
}
variables.tf
variable "organization_name" {
  type = string
}

variable "project_name" {
  type = string
}

variable "github_organization_name" {
  type = string
}

variable "github_repo_name" {
  type = string
}
variable "terraform_working_directory" {
  type = string
}

terraform.tfvarsに環境に合わせた値を入力します。

terraform.tfvars
organization_name          = "<HCP Terraform Organizations名>"
project_name               = "<HCP Terraform Project名>"
github_organization_name = "<GitHub Organization名またはユーザー名>"
github_repo_name        = "<GitHubリポジトリ名>"
terraform_working_directory = "<terraform実行ディレクトリ>"

terraformを実行して、Workspaceを作成します。

$ terraform apply

HCP TerraformでWorkspaceが作成されたことを確認できました。

Workspaces

該当Workspace -> Settings -> Version ControlからGitHubリポジトリと接続されていることも確認できました。

Workspace GitHub

Tips: GitHub AppインストールIDの確認

先程のTerraformコード上にあったgithub_app_installation_idに馴染が無い方も多いかもしれません。

これはHCP Terraform側でGitHub Appを管理するためのIDです。

ご参考までに、HCP TerraformのAPIを叩いて確認する方法を紹介します。(HCP TerraformのGUI上で確認できる部分を見つけられませんでした)

以下の手順でGitHub AppインストールIDを確認します。

$ cat ~/.terraform.d/credentials.tfrc.json
{
  "credentials": {
    "app.terraform.io": {
      "token": "<トークン>"
    }
  }
}
$ TOKEN="<前のコマンドで確認したトークンの値>"

~/.terraform.d/credentials.tfrc.jsonが存在しない場合は、terraform loginを実行してトークンを作成してください。

以下のAPIリクエストを実行します。

$ curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  https://app.terraform.io/api/v2/github-app/installations

data.idがGitHub AppインストールIDです。

# 以下はAPIリファレンスのサンプルレスポンス
{
    "data": [
        {
            "id": "ghain-BYrbNeGQ8nAzKouu",
            "type": "github-app-installations",
            "attributes": {
                "name": "octouser",
                "installation-id": 54810170,
                "icon-url": "https://avatars.githubusercontent.com/u/29916665?v=4",
                "installation-type": "User",
                "installation-url": "https://github.com/settings/installations/54810170"
            }
        }
    ]
}

https://developer.hashicorp.com/terraform/cloud-docs/api-docs/github-app-installations

おわりに

tfe providerでGitHubと連携したWorkspaceを作成してみました。

github_app_installation_idにいれる値は、GitHub側で確認できるhttps://github.com/settings/installations/<ID>の末尾のIDではないことに注意してください。

dataリソースtfe_github_app_installationで取得するか、Tipsに書いた直接APIリクエストして取得してください。(dataリソースが簡単なため、おすすめです。)

以上、AWS事業本部の佐藤(@chari7311)でした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.