ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【Terraform】HCP Terraformの初期設定をしよう

この記事を共有する

目次

サービスG松原です。今回はHCP TerraformをセットアップしてAWSリソースをデプロイしてみようの回です。

今回の構成

今回の構成はこちらです。 GitHubに格納したTerraformコードをHCP Terraform経由でAWSにデプロイします。 構成図.png

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

スクリーンショット 2026-03-03 215457.png

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

IMG_0017.png

AWS環境へのデプロイ

これで設定完了です。初回のデプロイはワークスペースのRuns > New Run から実行できます。通常のTerraformと同じく、Plan結果が問題なければApplyを押下します。

IMG_0019.png

これでAWS環境にVPCがデプロイされました。以降、GitHubの対象リポジトリのmainブランチが更新されるたびに自動でRunsが稼働して同様にデプロイが可能です。

おわりに

以上、HCP Terraformでのデプロイの初期設定でした。

これに加えてプルリクエスト時のGitHub Actionsでの処理などが行われるとCI/CDっぽいですね。

今後はそのあたりも試していければと思います。今回は以上です!ありがとうございました!

この記事は私が書きました

松原 唯介

記事一覧

2024年4月入社 サービスG所属

松原 唯介

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。