Closed6
Cloud SchedulerからGAEのFlexible環境のサービスを停止する
- 「APIとサービス」から、App Engine Admin APIを有効化する
- 「IAMと管理」>「サービスアカウント」から、Cloud Schedulerで利用するサービスアカウントを作成する。
- 「IAMと管理」>「IAM」から、メンバーを追加し、サービスアカウントを紐付ける。ロールとして「App Engine サービス管理者」を追加する
- APIから操作しやすいようにserviceのversionを指定して固定にしておく。
- 予約名: "default", "latest", and any name with the prefix "ah-" は使えないので注意
- Cloud Schedulerから、上記サービスアカウントにて、App Engine Admin API の apps.services.versionsを叩いて、PATCHリクエストでServingStatusをSTOPPEDに変更する。
https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status
リクエストするとGAE側で 無効な引数(HTTP 400): At least one field must be specified for this operation.
というエラーメッセージが表示される。
CLIの説明を見ると
--message-body=MESSAGE_BODY
Data payload to be included as the body of the HTTP request. May only
be given with compatible HTTP methods (PUT or POST).
だから、もしかしてPATCHリクエストではbodyが送れてない?
でもリファレンスにはPATCHも書いてある。
string (bytes format)
HTTP request body. A request body is allowed only if the HTTP method is POST, PUT, or PATCH. It is an error to set body on a job with an incompatible HttpMethod.
A base64-encoded string.
updateMaskの指定が必要らしい
QueryParameterとして、 ?updateMask=servingStatus
を付けて成功した!
ヘッダーの指定はコンソールからはできないのでgcloudから行う。
gcloud beta scheduler jobs update http --update-headers="Content-Type=application/json" [job名]
このスクラップは2021/03/05にクローズされました