tfe providerを使って、HCP TerraformにGitHubと連携したWorkspaceを作成する
HCP TerraformでWorkspacesを作る際に、GitHubと連携させるパターン(VCS Driven Workflow)は多いかと思います。
今回はこの構成をtfe providerを使って作成してみました。
前提: GitHubとHCP Terraformの接続方法
GitHubと連携させるためには、HCP TerraformとGitHubを接続する必要があります。
接続方法は2つの方法があります。
- GitHub Apps
- OAuth
設定が簡単でより細かい権限設定が可能なため、GitHub Appsを使うパターンがおすすめです。
本記事でも、GitHub Appsを使う方法を紹介します。
より詳細な違いを知りたい場合は、以下の公式ドキュメントをご確認ください。
GitHub Apps VCSプロバイダーを設定する
tfe providerではできなさそうだったので、手動で行います。
GitHub Organizations毎に行う必要はありますが、変更頻度は低い作業のため、手動でも問題ないかと思います。
Workspaceの作成画面から、HCP Terraform用のGitHub Appをインストールできます。
HCP Terraformの管理画面にアクセスし「Workspaces」-> 「New」 -> 「Workspace」-> 「<任意のプロジェクトを選択>」-> 「Create」の順に選択します。
この際、Projectの選択が必要です。
実際にWorkspaceは作成しないため、適当なProjectを選んでいただいて問題ありません。
「Version Control Workflow」を選択します。
連携方法の選択が求められるため、GitHubアプリを選択します。(私の環境ではすでにアプリが存在するため、以下はOrganizationを追加するスクショです)
HCP Terraformからのアクセスを許可するリポジトリを選択して、「Install」を選択します。
これでインストールは完了です。
HCP TerraformのWorkspace作成の画面は閉じても構いません。
tfe providerを使ってWorkspaceを作成
ここからは、Terraformを使って設定を行います。
今回は以下のコードで、GitHubと連携したWorkspaceを作成します。
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
}
}
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
に環境に合わせた値を入力します。
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が作成されたことを確認できました。
該当Workspace
-> Settings
-> Version Control
から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"
}
}
]
}
おわりに
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)でした。