はじめに
Google CloudのCI/CDツール
Cloud Build
CI/CDを実現するツールは様々ありますが、Google CloudでCI/CDを実現できるCloud Buildを紹介します。Google Cloud でビルド、テスト、デプロイを実行するサービスです。Cloud Build は、さまざまなリポジトリやクラウドストレージからソースコードをインポートし、仕様に合わせてビルドが実行されることで、Docker コンテナや Java アーカイブなどのアーティファクトを生成できます。
手順
①前準備
1 2 3 4 5 6 7 8 9 |
. ├── README.md ├── ci │ ├── terraform_apply.sh │ └── terraform_plan.sh ├── cloudbuild.yaml └── terraform └── main.tf └── backend.tf |
terraform_apply.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash cd terraform WORKSPACE=prd terraform init -backend-config="prefix=${WORKSPACE}" -reconfigure if [ ! $(terraform workspace list | grep ${WORKSPACE}) ]; then terraform workspace new ${WORKSPACE} fi terraform workspace select ${WORKSPACE} echo 'terraform apply' terraform apply -auto-approve -parallelism=50 |
terraform_plan.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash cd terraform WORKSPACE=prd terraform init -backend-config="prefix=${WORKSPACE}" -reconfigure if [ ! $(terraform workspace list | grep ${WORKSPACE}) ]; then terraform workspace new ${WORKSPACE} fi terraform workspace select ${WORKSPACE} echo 'terraform plan' terraform plan -parallelism=50 |
main.tf
Google Compute Engineを起動させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
provider "google" { project = "プロジェクト名" } resource "google_compute_instance" "default"{ name = "インスタンス名" machine_type = "e2-medium" zone = "asia-northeast1-b" tags = ["demo"] boot_disk { initialize_params { image = "debian-10-buster-v20220719" } } network_interface { network = "default" access_config {} } } |
backend.tf
Terraformではリソースを作成や変更したときに、stateというインフラの状態を管理するファイルを作成します。そのstateファイルは、個人で使う分にはローカルに保存しておいても問題ないのですが、複数人で使用する場合、共有フォルダを作成してどこかで管理する必要が出てきます。その共有フォルダの指定を行うために、このbackendというものがあります。今回はGoogle CloudのCloud Storageで管理するので、バケット名を指定します。
1 2 3 4 5 6 |
terraform { backend "gcs" { bucket = "一意なバケット名" prefix = "terraform/state" } } |
cloudbuild.yaml
Cloud Buildでビルドを開始するために使用できるビルド構成ファイルです。ファイルの内容としては、利用したいコマンドを1つずつ書いていくようなイメージです。
1 2 3 4 5 6 7 8 9 10 11 |
substitutions: _TERRAFORM_VERSION_: 0.12.10 steps: - id: 'tf plan' name: 'hashicorp/terraform:${_TERRAFORM_VERSION_}' entrypoint: 'sh' args: ['./ci/terraform_plan.sh'] - id: 'tf apply' name: 'hashicorp/terraform:${_TERRAFORM_VERSION_}' entrypoint: 'sh' args: ['./ci/terraform_apply.sh'] |
②Cloud Buildの設定
③cloudbuild.yamlについて
実行前には、backend.tfで指定したバケットを事前に作成する必要があります。
トリガーが作成されコンソールから、トリガーを実行しリソースが作成されるか確認します。
実行が正常に完了したことを確認します。
設定ファイルに記載した、Google Compute Engineが作成されているか確認します。
設定ファイルを変更し、リソースに反映されるか確認します。今回はインスタンスタイプを変更しています。インスタンスタイプ変更には、一度インスタンスを停止する必要があるのでdesired_status = “TERMINATED”を記載して停止させています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
provider "google" { project = "プロジェクト名" } resource "google_compute_instance" "default"{ name = "インスタンス名" machine_type = "f1-micro" zone = "asia-northeast1-b" desired_status = "TERMINATED" tags = ["demo"] boot_disk { initialize_params { image = "debian-10-buster-v20220719" } } network_interface { network = "default" access_config {} } } |
変更をpushして、Cloud Source Repositoriesに反映させます。
作成したリポジトリに、変更が加えられたタイミングでトリガーが起動していることがわかります。これにより、自動的にリソースに変更が反映されます。
設定ファイルを変更した通りに、Google Compute Engineも変更されていることがわかります。
まとめ
インフラコードをリポジトリで管理することで、環境変更作業する前に、作業実施前後の差分をコードで客観的にレビュー可能となり、インフラ運用における人的ミス混入が最小化されると感じています。
執筆者プロフィール
-
AWS、Azure、GCPの全てを極めることを目標に日々奮闘しております。
新しい技術が好きで、常に情報収集しています。皆様に有益な情報を届けられるようにしていきたいです。
この執筆者の最新記事
- Pick UP!2024.05.13Google CloudでインフラCI/CDを実現する
- Pick UP!2023.04.27クラウドの構築をInfrastructure as Code(IaC)で実現する