(なるべく)無料で始めるTerraformのインフラ構築体験(Level.1 初期設定とインフラのコード化)

HCP Terraformの無料プランをつかって何ができるか?どこまでできるか?を解説!今回は入門レベルの内容、環境の設定からApplyが完了するまでの流れを説明します。
はじめに
準備物
- GitHub (Free plan)
- HCP Terraform(Free plan)
- Amazon Web Service
- コードサンプル
- 今回はTerraform のチュートリアルにあるコードを使用
また、本ブログでは HCP Terraform を HCPT と表記することがあります
①各アカウント連携設定
HCP Terraform ↔ GitHub
今回はTokenでの認証を行います。※GitHub Appsでの連携も可能
- [HCPT で実施]
- Settings ⇒ VersionControl ⇒ Providers へ移動し、Add a VCS providerから登録
- register a new OAuth ApplicationのリンクからGitHub側に作成可能
- ページはそのまま開いておく(次の作業のパラメータが必要)
- [GitHub で実施]
- HCPT側のリンクから飛んだページでRegister applicationを実施
- 直後のページでClientID / Client secretsを取得(secretsは作成も行う)
- [HCPT で実施]
- ClientIDとClient secretsを入力して設定完了
- Advanced Settingsはデフォルトで進める
HCP Terraform ↔ AWS
- [AWS で実施]
- AWSにてアクセスキーとシークレットキーを発行
- IAMで発行
- リソース作成に必要なロールをアタッチ
- AWSにてアクセスキーとシークレットキーを発行
- [HCPT で実施]
- Settings ⇒ Variable setsへ移動し、Create variable set ボタン を選択
- Configure settings
- Name:AWS_access(任意ですが、あとからわかりやすいものを推奨)
- Description (Optional):AWS認証情報
- Variable set scope
- Apply to all projects and workspaces を選択
- Variable set priority
- チェックボックスは空のまま
- Variables
- Configure settings
- Settings ⇒ Variable setsへ移動し、Create variable set ボタン を選択
②コード準備
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "app_server" {
ami = "ami-830c94e3"
instance_type = "t2.micro"
tags = {
Name = "ExampleAppServerInstance"
}
}
③Workspaceの作成 (Terraformの実行環境の作成)
※ProjectはDefault Projectを使用します
- Version Control Workflowを選択
- 連携済みのGitHubアカウント一覧の中から利用するものを選択
- 今回はTokenによる連携のため、GitHub.com(Custom)が表示されているはずです
- コードを準備したGitHubレポジトリを選択
- Workspace名/説明/タグの登録を行う(Advanced Option について今回は省略)
- Create ボタンで作成完了
ここまでくれば準備完了です。
やってみると意外と少ない作業だと思います。
では、実際にTerraformで環境を構築(Apply)してみましょう。
④Terraform Applyの実施
- Workspace ページ右上にある New run ボタンを選択
- Start ボタンを選択。
- Plan ⇒ Applyと順次処理が進みます
- Applyが正常に終了すれば、AWS側にリソースが作成されます
- ステートファイルはこのワークスペースに保存されます。ダウンロードも可能です
今回は手動でPlan/Applyを実行しましたが、今後はGitHubのリポジトリを更新すれば自動でPlan/Applyを実行してくれます。設定によっては承認無しでApplyまで完了させることも可能です。
⑤通知の設定(Notification)
GitHubのコード更新に連携してHCPTが稼働してくれる環境は構築できたので、通知機能も活用します
HCPTの通知機能は4種類用意されています。今回はSlackで行います。
- Webhook
- Slack
- MS teams
Slackを選択し、下記のように設定します。
- Name
- 通知ルール名。任意のものを入力してください
-
- 通知先のSlack Webhook URLを入力してください
Webhook URLの作成方法
- 通知先のSlack Webhook URLを入力してください
- Run Events
- 今回はAll eventsを選択
※Only certain events を選ぶとトリガーになる動作を選択できます
- 今回はAll eventsを選択
Create a Notification ボタンを選択して、設定完了!
これでPlan/Applyが実行されれば指定のSlackに全て通知されるようにできました。
さて、ここまでの作業でHCP Terraformを利用したインフラ構築の基本的な流れを一通り実行できました。ローカルで環境を準備するときと比べれば下記のような作業が楽になると思います。
- ステートファイルの保存/運用はHCPT側に全任。特に意識しなくて良い
- 変数はHCPT側に登録し、紐づけるだけ。再利用しやすく、センシティブな値も取り扱える
- Plan/Apply実行履歴がHCPTに集約され、だれがいつ構成を変更したか?の管理がより楽に。
- TerraformのバージョンはWorkspaceごとに指定可能。デフォルトはコードを判断して自動設定
- アクションに応じた通知環境の準備
最後に
最後まで読んでいただきましてありがとうございました。
Community版 Terraformに比べ、あまり認知度の高くない(私調べ)のHCPTですが無料プランでも同じような構築・検証は行えます。注意が必要な点としてはHCPTの無料プランではTerraform経由で管理しているインフラの合計RUMが500までという制限があります。RUMの利用状況はトップメニューのUsageを開き、Billable Managed Resourcesで値を確認できます。
※RUM=Resource Under Management の略
なお、今回作成した環境をベースに、モジュール化の話、ポリシー利用の話を今後書いていきます。
また、省略した設定内容や運用観点の話もどこかのタイミングで触れられたらと思います。
そちらもご興味あればぜひよろしくお願いします。
本内容が少しでも皆様のお役に立てれば幸いです。