wikipediaより。
Infrastructure as Code(IaC) はコンピューティング・インフラ(プロセス、ベアメタルサーバー、仮想サーバーなど)の構成管理・機械処理可能な定義ファイルの設定・プロビジョニングを自動化するプロセスである。
以下の公式チュートリアルをなぞって Infrastructure as code に挑戦しました。
Managing infrastructure as code with Terraform, Cloud Build, and GitOps
チュートリアルではGit リポジトリ上にコードで管理された設定に基づいて、VPC / Firewall / HTTP サーバー をセットアップする流れを体験できます。
終了すると GCP 上でコンテンツ (html) をホスティングし、また Git リポジトリ上のブランチへのマージをトリガとしたインフラ設定変更をデプロイできるようになります。
チュートリアルは Cloud Shell と Github 上で全て行うので、Web ブラウザ単体完了できます。
流れは以下の通りです。
- 前提条件の準備
- チュートリアル用のリポジトリをフォーク
- CloudStorage バケットの作成と Terraform への設定
- Cloud Build サービスアカウントへの権限付与
- Cloud Build と Github リポジトリの接続
- コードベース上で環境構成を変更
- dev / prod 環境へデプロイ
- プロジェクト削除
やっていきましょう
前提条件の準備
https://cloud.google.com/solutions/managing-infrastructure-as-code#before-you-begin
Gcloud console を使ってプロジェクトを作成します。
このチュートリアルを実施していくにあたって新規プロジェクトを作った方が、最後にまとめて消すことができるのでオススメです。
プロジェクトを作成した後、GCP の API の有効化や、Git の設定変更は Cloud Shell で行います。
チュートリアル用のリポジトリをフォーク
https://cloud.google.com/solutions/managing-infrastructure-as-code#setting_up_your_github_repository
このチュートリアルを実施するためのリポジトリがあり、Terraform の設定ファイルがほぼ完成した状態で用意されていますので、自身のアカウントにフォークします。
enviroments
には開発環境 (dev
) と本番環境 (prod
) 用の各設定が入っており、
modules
にはそれぞれの環境用の設定から読み込むために共通化された設定が入っています。
各設定は HCL(HashiCorp Configuration Language) で記述され、拡張子は .tf です。
cloudbuild.yaml には Cloud Build が実行するビルド内容が書かれています。
ビルド内容はブランチによって変わるようになっており、
dev/prod
ブランチでは
terraform init terraform plan terraform apply
が実行され、それ以外のブランチでは
terraform init terraform plan
が実行されます。
実際に環境に変更を反映する terraform apply
は dev/prod
ブランチでのみ行われるということです。
CloudStorage バケットの作成と Terraform への設定
Terraform が管理するリソースの状態 (tfstate) をリモート上で管理するために Cloudstorage バケットを作成します。
先の設定ファイルに対し、実際のリソースの状態を表すのが tfstate です。
通常はローカルに保存されますがチーム開発を進めるためにリモートで管理されることが多いです。
作成できたらコードベースに移って設定ファイルを変更(プロジェクトIDを実際のものに変更)します。
Cloud Build サービスアカウントへの権限付与
Cloud Build サービスアカウントはユーザのアカウントに代わってビルドを実行するアカウントで、プロジェクトに紐づいています。
サービスアカウントがビルドを実行するために必要な権限を付与します。
Cloud Build と Github リポジトリの接続
Cloud Build GitHub app を使って Cloud Builid と Github リポジトリを接続します。
これが終わると、GitHub リポジトリ上のブランチへコードがマージされることをトリガとして Cloud Build が実行されるようになります。
コードベース上で環境構成を変更
チュートリアルのためにあらかじめ用意された typo を修正します。
前項までの設定が正しくできていると、Github 上でコードを修正して PR を作成した時点で Cloud Build が実行されます。
新しいブランチが作成されている状態ですので、この時実行されるのは terraform plan
までです。
Cloud Build が実行されることを確認できたら、Github リポジトリの設定を Cloud Build がパスすることを PR マージの条件にするように変更します。
dev / prod 環境へデプロイ
先ほど作成した PR をマージすると Cloud Build が実行され、今度は terraform apply
まで行われます。
Gcloud Console 上から Cloud Build のログを参照し、公開された外部 IP アドレスにブラウザでアクセスするとコンテンツの配布が行われていることが確認できます。
prod 環境への配布は同様に dev ブランチから PR を作成して行います。
プロジェクト削除
全てのチュートリアルが終わったら、課金されることを防ぐためにプロジェクトを削除して終わります。
お疲れ様でした。