IaCクラウド

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

HCP Terraformの無料プランをつかって何ができるか?どこまでできるか?を解説!今回は入門レベルの内容、環境の設定からApplyが完了するまでの流れを説明します。

 はじめに

最近、勉強会等に参加したりするとTerraformのセッションをよく見かけるのですが、Community版(OSS版)をうまく利用されている方が多い一方で、HCP Terraform(旧Terraform Cloud)を使っているパターンをほとんど聞いたことがありません。
なので、Community版と同じように無料で利用できる HCP Terraform Free planを使って環境構築をしてみたいと思います。これからTerraform触ってみようとしている方、ローカル環境を準備するのがめんどくさいなって方の参考になれば幸いです。

準備物

それぞれのアカウントを準備

注意点:
本ブログではAWSにデプロイするリソースは無料枠の範囲に収まる前提で記述しています。
しかし、コード修正による無料枠に収まらないリソースの利用やアカウントに用意された無料枠が既に利用済み等の理由によっては課金が発生いたしますのでご注意ください。
また、本ブログでは HCP Terraform を HCPT と表記することがあります

①各アカウント連携設定

HCP Terraform ↔ GitHub

今回はTokenでの認証を行います。※GitHub Appsでの連携も可能

  • [HCPT で実施]
    • SettingsVersionControlProviders へ移動し、Add a VCS providerから登録
    • register a new OAuth ApplicationのリンクからGitHub側に作成可能
    • ページはそのまま開いておく(次の作業のパラメータが必要)
  • [GitHub で実施]
    • HCPT側のリンクから飛んだページでRegister applicationを実施
    • 直後のページでClientID / Client secretsを取得(secretsは作成も行う)
  • [HCPT で実施]
    • ClientIDClient secretsを入力して設定完了
    • Advanced Settingsはデフォルトで進める

HCP Terraform ↔ AWS

  • [AWS で実施]
    • AWSにてアクセスキーシークレットキーを発行
      • IAMで発行
      • リソース作成に必要なロールをアタッチ
  • [HCPT で実施]
    • SettingsVariable 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
        • + add variableボタンから登録
          • Select variable category
            • Environment variable を選択 (環境変数として利用)
          • Key
            • AWS_ACCESS_KEY_ID
          • Value
            • AWSで作成したアクセスキーを入力
            • Sensitive オプションを有効化
              • このオプションにより入力時にしか値を確認できなくなります。
          • Description (Optional)
            • 任意で説明を追加してください
          • AWS_SECRET_ACCESS_KEYも同様に登録

②コード準備

HashiCorpのチュートリアルから拝借
下記内容でmain.tfを作成
GitHub に新しいリポジトリを作成し、pushしておく
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の実行環境の作成)

Workspaceの画面からCreate a Workspace ボタン、もしくは右上のNewから作成開始
※ProjectはDefault Projectを使用します
  • Version Control Workflowを選択

  • 連携済みのGitHubアカウント一覧の中から利用するものを選択

    • 今回はTokenによる連携のため、GitHub.com(Custom)が表示されているはずです
  • コードを準備したGitHubレポジトリを選択
  • Workspace名/説明/タグの登録を行う(Advanced Option について今回は省略)
  • Create ボタンで作成完了

ここまでくれば準備完了です。
やってみると意外と少ない作業だと思います。

では、実際にTerraformで環境を構築(Apply)してみましょう。

④Terraform Applyの実施

  • Workspace ページ右上にある New run ボタンを選択
    • Run name:実行名です。今回は「テスト」とでも入力しましょう
    • Run type:plan and applyを選択(本ページの手順では、Apply前に承認が入ります)
    • Additional planning option:今回は省略

  • Start ボタンを選択。
  • Plan ⇒ Applyと順次処理が進みます

    • Cost estimate:概算費用算出機能(対応クラウド/サービスのみ)
    • エラーの場合はその時点で中断されます
    • エラーが無かった場合、Apply実行前に承認を求められます
      • 処理を継続する場合はConfirm & applyを選択
      • 承認理由を入力してConfirm planを選択

  • Applyが正常に終了すれば、AWS側にリソースが作成されます
  • ステートファイルはこのワークスペースに保存されます。ダウンロードも可能です

今回は手動でPlan/Applyを実行しましたが、今後はGitHubのリポジトリを更新すれば自動でPlan/Applyを実行してくれます。設定によっては承認無しでApplyまで完了させることも可能です。

⑤通知の設定(Notification)

GitHubのコード更新に連携してHCPTが稼働してくれる環境は構築できたので、通知機能も活用します

  • Workspace の SettingsNotifications と進む

  • Create a Notification ボタン から設定作成

HCPTの通知機能は4種類用意されています。今回はSlackで行います。

  1. Email
  2. Webhook
  3. Slack
  4. MS teams

Slackを選択し、下記のように設定します。

  • Name
    • 通知ルール名。任意のものを入力してください
  • Run Events
    • 今回はAll eventsを選択
      ※Only certain 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 の略

 

なお、今回作成した環境をベースに、モジュール化の話、ポリシー利用の話を今後書いていきます。
また、省略した設定内容や運用観点の話もどこかのタイミングで触れられたらと思います。
そちらもご興味あればぜひよろしくお願いします。

本内容が少しでも皆様のお役に立てれば幸いです。

この記事に関連する製品・サービス

この記事に関連する記事