Google App Engine(GAE)でスケジュール実行したい場合、cron.yamlを書いてデプロイするわけですが、それをCloud Buildを使ってやりたい場合に軽くハマったことなど。
問題
まず、大前提として、Cloud Buildにてアプリケーションをデプロイできているものとします。
となると、すでにcloud_build.yamlファイルがあるはずなので、そこに
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy', 'cron.yaml']
というステップを追加します。
これだけで完了!と思うじゃないですか?
ところが、実際にやってみるとこんなエラーが出てしまいました。
Already have image (with digest): gcr.io/cloud-builders/gcloud
Configurations to update:
descriptor: [/workspace/cron.yaml]
type: [cron jobs]
target project: [XXXXXX]
Do you want to continue (Y/n)?
Updating config [cron]...
.failed.
ERROR: (gcloud.beta.app.deploy) Server responded with code [403]:
Forbidden Unexpected HTTP status 403.
You do not have permission to modify this app (app_id=u'b~ XXXXXX').
解決方法
CloudBuildのサービスアカウント(例:999999999999@cloudbuild.gserviceaccount.com)に「Cloud Scheduler 管理者」の役割を追加します。