Google Cloud Build でデプロイの自動化

GCP By Output不足なエンジニア

Google Cloud Build と Google Source Repository を用いてmasterブランチにPushしたら自動的にGAEにデプロイする環境を構築したので、メモを残します。テストすらせずデプロイしちゃってるので非常に単純な例ですが、テストしたい場合はこの例に設定を追加するだけです。
※驚くほど簡単でした。
リポジトリの作成方法は以前記事にしたのでこちらを参照してください。



GAEのAPIを有効化

公式の手順ではAPIが有効化されている前提ですが、GAEのインスタンスを使用しているからと言ってGAEを操作するAPIは有効になっていません。予めAPIを有効にする必要があります。
コンソール画面から「APIとサービス」で「APIとサービスを有効化」をクリックするとAPIライブラリに行けるので「App Engine Admin API」を有効にしてください。この手順をふまないと、次の手順でCloud BuildにGAEの管理者権限を与えてもデプロイできません。
※画面はちょくちょく変わると思うので、不明点あれば公式を参照してください。

Cloud Build にGAEの管理者権限を付与

この手順は公式ページに乗っているので公式を参照してください。なんだかんだCloud Buildに権限付与する機会が多いので、Cloud Buildがかなり強力になりがちです。。。プロジェクトはなるべく細かく分けたほうが良いですね。

Build コマンドをyamlで記述

Buildのフローをcloudbuild.yamlで記述します。※Dockerfileで記述することも可能
nameにDocker Image 、argsにコマンドを記述します。Docker Image持っていなくても慌てる必要はありません。gcloud コマンドを使うだけならGoogleが用意してくれています。テストするために色々入った環境が必要な場合は用意すればOKです。
今回はリポジトリに保存された暗号化済み認証情報JSONを複合して、デプロイコマンドを実行するyamlを記載します。ダブルクォートで囲んだ部分は環境に合わせてください。

steps:
- name: gcr.io/cloud-builders/gcloud
  args:
  - kms
  - decrypt
  - --ciphertext-file=”AUTH_INFO_FILE.enc”
  - --plaintext-file=”AUTH_INFO_FILE”
  - --location=global
  - --keyring=”KMS_KEYRING”
  - --key=”KMS_KEY”
- name: gcr.io/cloud-builders/gcloud
  args: 
  - app
  - deploy
  - --project=”PROJECT_NAME”

Build コマンドの書き方

見れば解ると思いますが、steps配列にnameとargsを詰めて行くだけです。nameはイメージ名でgcloudコマンドを使うだけなら「gcr.io/cloud-builders/gcloud」固定で大丈夫です。argsはgcloud以降のコマンド文字列を並べるだけです。コマンドのスペース部分で区切るだけですね。

トリガーの作成

デプロイのトリガー作成は公式通りで問題ないと思います。ちなみにトリガー作ってビルドしたけど権限周りとかで失敗した場合、ビルドの履歴から「ビルドの詳細」を開いて「再ビルド」することが出来るので、わざわざ無駄なPushをしなくても再実行可能です。

以上で自動的にデプロイ可能になります。実際はテストを事前に回したりビルド結果をメールなりSlackなりに通知する仕組みも作ると思いますが、必要に応じて簡単に追加出来るはずです。
テストを追加したい場合はテスト用のimageとテストコマンドを追加すれば良いですし、通知を追加したい場合はCloud Pub/Subでビルド終了時にCloud Functionsを呼び出せば出来ると思います。公式に例があるので参考にしてください。

デプロイの自動化はGAEのAPI有効化が盲点だと思うので、詰まったらそこを確認してください。


カテゴリー:GCP,自動化

Output不足なエンジニア

統計が好きになれず、機械学習やったら必然的に統計が必要になるだろうと思ったら想像以上に機械学習にハマる。数学は芸術なので商売にするつもりはないけど、DeepLearningは数学じゃないし商売にしたいと思っているところ。画像処理がメイン。