- 公開日
- 最終更新日
【Terraform】HCP Terraformの初期設定をしよう
この記事を共有する
目次
サービスG松原です。今回はHCP TerraformをセットアップしてAWSリソースをデプロイしてみようの回です。
今回の構成
今回の構成はこちらです。
GitHubに格納したTerraformコードをHCP Terraform経由でAWSにデプロイします。

HCP Terraformとは
クラウド版のTerraformです。旧称Terraform Cloud。 通常のTerraformとの違いはTerraformの実行環境およびStateファイルの管理場所がHCP(Hashicorp Cloud Platform)になる点です。 GitHub等と連携してのCI/CDが容易なのが強みです。※今回はCI/CDのうちCD(継続的デリバリー/デプロイメント)の設定になります。
事前準備
事前に以下の3アカウントを用意します。HCP TerraformはFreeプランが存在し500リソースまで無料で利用可能です。本検証もFreeプランを利用。
- AWSアカウント:1
- GitHubアカウント:1
- Organizationsを作成済みのHCP Terraformアカウント:1
GitHub側の設定
GitHubではプライベートリポジトリを作成し、AWSにデプロイするTerraformコードを配置します。サンプルコードは以下の通り。
今回はリポジトリ内のterraformフォルダ配下に以下のコードを配置しました。(mainブランチを使用)
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
cloud {
organization = "HCP TerraformのOrganizations名"
hostname = "app.terraform.io"
workspaces {
name = "使用するワークスペース名"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
# Create a VPC (サンプルリソース)
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
}
AWS側の設定
AWS側で作成するのはTerraform用の実行ロールとOIDC接続のためのIDプロバイダです。
ロール作成
ロールに設定するカスタム信頼ポリシーは以下。 許可ポリシーは[AdministratorAccess]を設定しました。最小権限にしたい場合は適宜権限を絞るとよいです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::[アカウントID]:oidc-provider/app.terraform.io"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"app.terraform.io:aud": "aws.workload.identity"
},
"StringLike": {
"app.terraform.io:sub": "organization:[HCP CloudのOrganizations名]:project:[プロジェクト名]:workspace:[ワークスペース名]:*"
}
}
}
]
}
OIDCプロバイダ
続いてTerraformと接続するためのOIDCプロバイダの作成です。 IAM > IDプロバイダ > プロバイダを追加 で以下設定のIDプロバイダを作成。
- プロバイダのタイプ:OpenID Connect
- プロバイダのURL:https://app.terraform.io
- 対象者:aws.workload.identity

HCP Terraform側の設定
HCP Terraformではワークスペースを作成しGitHubと連携し、ワークスペースの環境変数にAWSの認証情報を追加します。
ワークスペース新規作成
- ワークスペースを新規作成 > ワークフローは [Version Control Workflow] を選択
- Connect to a version control providerでは[GitHub]を選択し、GitHubアカウントを連携してTerraformコードを格納したリポジトリを指定。
- ワークスペース名を入力し[Create]を押下してワークスペースを作成
ワークスペースの設定
作成したワークスペースにてVersion Control を選択し以下を設定します。今回はリポジトリ直下ではなくterraformディレクトリ下にterraformコードを配置しているため以下設定です。
- Terraform Working Directory : terraform
- VCS branch : main
環境変数の設定
続いてワークスペースにAWS連携用の環境変数を設定します。
作成したワークスペースにてVariables > Workspace Variables > Add variableで以下の環境変数を設定します。いずれも[Environment variable]で登録します。
- TFC_AWS_PROVIDER_AUTH : true
- TFC_AWS_RUN_ROLE_ARN : Terraform用ロールのArn
AWS環境へのデプロイ
これで設定完了です。初回のデプロイはワークスペースのRuns > New Run から実行できます。通常のTerraformと同じく、Plan結果が問題なければApplyを押下します。
これでAWS環境にVPCがデプロイされました。以降、GitHubの対象リポジトリのmainブランチが更新されるたびに自動でRunsが稼働して同様にデプロイが可能です。
おわりに
以上、HCP Terraformでのデプロイの初期設定でした。
これに加えてプルリクエスト時のGitHub Actionsでの処理などが行われるとCI/CDっぽいですね。
今後はそのあたりも試していければと思います。今回は以上です!ありがとうございました!
この記事は私が書きました
松原 唯介
記事一覧2024年4月入社 サービスG所属