BLOG

ブログ

【terraform】gcpでcicd環境を構築する方法

背景

今後GCP環境を使用していく上で工数が拡大しないように、 早い段階でcicd環境を設定しており、 今回はGCP環境にて構築した際の方法を記載したい。

設計

AWSの設計とほぼ同様に以下の構成で作成を行った

内容GCPサービスAWSの場合
リポジトリCloud Source RepositoriesAWS CodeCommit
cicdCloud BuildAWS CodeBuild + AWS CodePipeline
環境構築terraformterraform

構成を考える上で気になった点は以下の内容である。

  • 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などを早く開発するユースケースが特に使いやすい印象でした。

SinkCapitalではデータに関する支援を行っています

弊社はスペシャリスト人材が多く在籍するデータ組織です。 データ分析や分析基盤の設計などでお困りの方がいらっしゃれば、 まずは無料で、こちらから各分野のスペシャリストに直接相談出来ます。