背景
今後GCP環境を使用していく上で工数が拡大しないように、 早い段階でcicd環境を設定しており、 今回はGCP環境にて構築した際の方法を記載したい。
設計
AWSの設計とほぼ同様に以下の構成で作成を行った
内容 | GCPサービス | AWSの場合 |
---|---|---|
リポジトリ | Cloud Source Repositories | AWS CodeCommit |
cicd | Cloud Build | AWS CodeBuild + AWS CodePipeline |
環境構築 | terraform | terraform |
構成を考える上で気になった点は以下の内容である。
- AWSと比較してCloud Buildはトリガーが組みやすい(CodePipelineが不要)
- Cloud Buildは権限管理が楽だが、複数のcicdを組む際に権限を分けると行ったことは苦手そう
- terraformの代わりにDeployment Managerも検討したが、AWS等使用も考慮し共通でterraformを使用した
AWS CodeDeployもそうだがサービス固有のdeploymentよりかは、 第三者がラップしたterraformが使い勝手が良い印象。。。
実際のコード
準備
stateファイル格納バケット作成
$ gcloud auth login
$ gcloud config set project {{プロジェクト名}}
$ gsutil mb gs://{{バケット名}}
「Cloud Source Repositories」「Cloud Build」はUIぽちぽちでよしなに作成。 デプロイフロー次第だが今回はmasterへのpushで作成されるように設計。
フォルダ構成
$ tree .
.
├── README.md
├── ci
│ ├── terraform_apply.sh
│ └── terraform_plan.sh
├── cloudbuild.yaml
└── terraform
└── backend.tf
各種コード
#!/bin/bash
cd terraform
WORKSPACE=prd
terraform init -backend-config="prefix=${WORKSPACE}" -reconfigure
<em>if</em> [ ! $(terraform workspace list | grep ${WORKSPACE}) ]; <em>then</em>
terraform workspace new ${WORKSPACE}
<em>fi</em>
terraform workspace <em>select</em> ${WORKSPACE}
echo 'terraform apply'
terraform apply -auto-approve -parallelism=50
#!/bin/bash
cd terraform
WORKSPACE=prd
terraform init -backend-config="prefix=${WORKSPACE}" -reconfigure
<em>if</em> [ ! $(terraform workspace list | grep ${WORKSPACE}) ]; <em>then</em>
terraform workspace new ${WORKSPACE}
<em>fi</em>
terraform workspace <em>select</em> ${WORKSPACE}
echo 'terraform plan'
terraform plan -parallelism=50
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']
terraform {
backend "gcs" {
bucket = "{{バケット名}}"
prefix = "terraform/state"
}
}
感想
実際に作ってみた感想としてはAWSよりもかなり簡単に作成ができたというのが大きかったです。 その一方権限管理はAWSの方が細かな設定ができる印象が強く、 他のGCPサービス同様スタートアップ向けな感じが強かったです。 特殊要件などを考慮しない状態においてPocなどを早く開発するユースケースが特に使いやすい印象でした。