HCP Terraformで実際にリソースを作成する手順を忘備録を兼ねて記載します。よろしければ参考にしてください。
ここで説明する内容は運用する上での最小手順です。実際に運用する際は扱いやすいように設定を変更してください。
ここでは例として、AWS上でEC2を作成するモジュールにS3を1つ追加します。
前提
以下はリソース作成手順を説明する際の前提です。
- HCP TerraformはFreeプランを使っています
- HCP TerraformのOrganizationを作成済みであること
- GitHub連携済みWorkspaceを作成済みであること
- AWSアカウントがあり、Terraform実行用IAMユーザー/ロールの認証情報を用意できること
- Terraformコードを管理するGitHubリポジトリを用意済みであること
また、現在のディレクトリ構成は以下の通りとします。
.
├── dev/
│ ├── main.tf
│ ├── variables.tf
│ └── versions.tf
└── module/
├── ec2.tf
└── variables.tf
Workspaceの設定
既にWorkspaceは設定済みであることを想定していますが、以下に今回使うWorkspaceの設定内容を記載します。
2-1. Settings > Version Control
VCS連携設定は以下の通りとします。この設定により、developブランチに対して更新を行うタイミングで、devディレクトリに対してplan/applyを実行するようになります。
-
VCS branch: 実行対象ブランチ(例:
develop) -
Terraform Working Directory:
/dev
2-2. Variables
WorkspaceのVariablesには以下の内容が設定されています。
Terraform variables
- pj
作成するリソース名やタグに付けるプロジェクト名です。今回はtestと付いています。
Environment variables
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY-
AWS_SESSION_TOKEN
今回はAWSにリソースを作成するため、アクセスキーを設定します。なお、セキュリティのためにアクセスキーには"Sensitive"が設定されています。実際に運用する際は、アクセスキーには必ずSensitiveの設定をしてください。
全体の流れ
- Terraformファイルを追加・変更し、GitHubにpushする
- HCP Terraformでplan内容を確認し、GitHubよりプルリクエストを出す
- プルリクエストを確認してHCP Terraformよりapplyする
1. Terraformコードを準備する
以下の構成でファイルを作成します。
.
├── dev/
│ ├── main.tf
│ ├── variables.tf
│ └── versions.tf
└── module/
├── ec2.tf
├── s3.tf (ファイル追加)
└── variables.tf
以下に追加するファイルの内容を説明します。
modules/s3.tf
resource "aws_s3_bucket" "this" {
bucket = "hcp-terraform-${var.pj}-5321312512"
tags = {
Name = "hcp-terraform-${var.pj}-5321312512"
}
}
resource "aws_s3_bucket_public_access_block" "this" {
bucket = aws_s3_bucket.this.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "this" {
bucket = aws_s3_bucket.this.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_versioning" "this" {
bucket = aws_s3_bucket.this.id
versioning_configuration {
status = "Enabled"
}
}
作成後、対象ブランチ(例: develop)へpushします。
2. plan内容を確認し、プルリクエストを出す
-
HCP TerraformのUIよりWorkspaceの
Runsのリストよりplan結果を確認する。このとき、画面下にapplyするかを聞く項目が出現します。ここで"Confirm&apply"を押下することでapplyが実行されます。しかし、この時点ではplanの正当性しか確認できないため、まだapplyを実行しないでください。
また、Runsのリストは対象ブランチが更新させる度に追加されていきます。追加されたリストでも同様の操作ができますが、既存のリストのapply処理を完了させなければ操作ができない仕様となっています。そのため、対象ブランチを更新する場合は、更新前に既存のリストの"Discard run"を押下して、applyをキャンセルしてください。

- ここでplan内容に問題がなければGitHubに移動し、合流させたいブランチ(
mainなど)に対するプルリクエストを出してください。
3. applyを実行する
- プルリクエストでも問題がなければHCP Terraformに移動し、先ほどplanを行った"Run List"より"Confirm&apply"を押下してください。1. で"Discard run"を押下していた場合は、右上の"New Runより"再度plan&applyを実行してください。

- ここで以下のように問題があった場合は、問題を修正し、再度対象ブランチへpushさせてください。"Run List"に新しいリストが追加されます。

- 成功した場合は、以下のように"Apply finished"と表示されます。
- 実機でも作成されていることを確認してください。
- 実機での動作に問題がなければ、GitHubで対象ブランチをマージしてください。
作成したリソースの削除
HCP Terraformにはterraform destroyに該当する操作はありません。そのため、削除する際は対象リソースを記述したコードをコメントアウト・削除してから対象ブランチにpushしてください。その後のplan/apply操作は"全体の流れ"の章と同様です。
最後に
GitHubと連携させたHCP Terraformでリソースを作成する流れを説明しました。HCP Terraformを使う利点は多くありますが、ここで紹介した流れに注目すると、以下の点が挙げられます。
- 開発環境を統一できる
- Terraformバージョンや実行元OSなどのメンバーごとの開発環境の違いに起因する問題発生を無くすことができます
- GitHubのコードと実機の稼働内容を一致させられる
- 各個人でTerraformコマンドを打つ場合と比較して、GitHubにコードをpushしなければTerraformを実行できません。そのため、現在の実機の状態とGitHubに上がっているコード内容を一致させることができます
- リソース名やタグに付けるプロジェクト固有の文字を付け忘れる可能性が減る
- アクセスキーが流出するリスクを減らせる
- クラウドにアクセスする環境をHCP Terraformに限定することができ、個人PCやGitHubの設定ミスによりアクセスキーが流出するリスクを減らすことができます
- 個人が実行したplan/applyの実行結果を簡単に共有できる
- plan/applyで問題が発生した際、エラー内容をチームメンバーが直ぐに確認できるため、課題解決を早く行えます


