AWS Modernization Workshop の「AWS Modernization Workshop with HashiCorp Terraform Cloud」を実施した❗️Terraform Cloud を使って AWS を操作する流れを一通り学べるので,特に Terraform や Terraform Cloud 入門者におすすめ.例えば "今までは AWS CloudFormation をよく使ってたけど今度 Terraform を使う予定があるから試しておこうかなぁ〜" っていうときにピッタリ👏
実施をしながら詰まったところや工夫したところなども含めてワークショップを紹介しようと思う💡
hashicorp-terraform.awsworkshop.io
構成
ワークショップは大きく以下の構成になっている.手順書に所要時間は "1.5時間 ~ 2.5時間" と書いてあって,うまく進めば終わると思うけど,僕自身は調査もしながらワークショップを吟味していて,実際には4時間ほどだった🕛
- Introduction
- Self Guided Setup
- Terraform Cloud
- Deploying Infrastructure
- Sentinel
- Cleanup
🟣 Self Guided Setup
手順には AWS Cloud9 をバージニアリージョン(us-east-1
)に構築すると書いてあるけど,全く使わなくて謎だった💧よって,ここは何もせず skip して良いかと👌
🟣 Terraform Cloud
まず,Terraform Cloud の初期セットアップを行う.アカウントを作って,Organization kakakakakku
を作って,Default Project の中に GitHub と連携した Workspace tfc-guide-example
を作る.連携するリポジトリは hashicorp/tfc-guide-example
にある(フォークして使う).
GitHub と連携した Workspace を作るときに,手順書だと GitHub.com (Custom)
を選択すると書いてある.ただし現在は選択肢が増えていて「GitHub App」を選択してリポジトリに対する権限を付与する必要がある❗️詳しくは以下のドキュメント Configuration-Free GitHub Usage に載っている.
🟣 Deploying Infrastructure
次に Terraform コードを実行する準備をする.今回は Terraform で Amazon EC2 インスタンスを1台構築するため,以下の Terraform variable を設定する.
instance_type
:t2.micro
instance_name
:Provisioned by Terraform
次に AWS を操作するためのアクセスキー(AWS_ACCESS_KEY_ID
と AWS_SECRET_ACCESS_KEY
)を設定する.でも個人的には Terraform Cloud にアクセスキーを設定したくなく,今回は IAM ID プロバイダから「IAM Role」を取得できるようにした.詳しくは以下の記事にまとめてある❗️
TFC_AWS_PROVIDER_AUTH
:true
TFC_AWS_RUN_ROLE_ARN
:arn:aws:iam::xxx:role/xxx
準備ができたら Terraform Cloud から plan と apply をして Amazon EC2 インスタンスを北カリフォルニアリージョン (us-west-1
) に構築する.
\( 'ω')/ 構築できたぞ!やったー!
またプルリクエストを使って Amazon EC2 インスタンス名(Name タグ)を変更して,plan と apply をする流れも体験できる.
\( 'ω')/ 変更できたぞ!やったー!
🟣 Sentinel
今度は Terraform で Policy as code を実現できる「Sentinel」を使って Terraform コードにポリシーを適用する.
手順書には "30日間フリートライアル" を使って Terraform のプランを上げると書いてあるけど,Free プランのままでも 1 Policy set
と 5 Policies
までは使えそうで,手順上少し面倒なところはあるけど結果的に問題なくワークショップは進められた✌️
今回は Terraform のバージョン 1.1.0
以上であることを soft-mandatory
レベルで強制するという内容で,Sentinel コードは hashicorp/learn-terraform-enforce-policies
リポジトリにある.
import "tfplan" import "version" main = rule { version.new(tfplan.terraform_version).greater_than("1.1.0") }
手順書では Policy sets と GitHub を連携するように書いてあるけど,Free プランだと The organization has reached the limit of 0 versioned policy sets.
というエラーで設定できなかった.今回は少し面倒だけど Terraform Cloud の画面で Policies と Policy sets を設定した.
そして,ポリシーを紐付けて同じく plan をすると期待通りに Sentinel policies passed になった❗️
\( 'ω')/ Sentinel 便利!
後半では Terraform Cloud の「Cost Estimation」機能と Sentinel を組み合わせて,見積もりコストが $100 より小さくなるようにポリシーを適用する.今回は Free プランを使ってるので,作成した Policies と Policy sets を一度消して,また Terraform Cloud の画面で設定し直した.
import "tfrun" import "decimal" delta_monthly_cost = decimal.new(tfrun.cost_estimate.delta_monthly_cost) main = rule { delta_monthly_cost.less_than(100) }
そして,ポリシーを紐付けて同じく plan をすると期待通りに Sentinel policies passed になった❗️
\( 'ω')/ コストを意識しながら実行できるのはイイ!
後半で使ったリポジトリを以下にまとめておく.
🟣 Cleanup
不要なリソースが残らないように Destruction and Deletion でお掃除をして終了❗️
まとめ
AWS Modernization Workshop の「AWS Modernization Workshop with HashiCorp Terraform Cloud」は Terraform Cloud x AWS に入門できる良いワークショップだった❗️
もし興味があったら実施してみると良いのではないでしょうか✌️
関連リンク
手順書自体は以下の GitHub で管理されていた.