はじめに
- この記事では Cloud Run の認証が必要なサービスを GCP の定時ジョブ実行サービスである Cloud Scheduler から実行する方法を紹介します。
Cloud Run 実行用のサービスアカウントの作成
- GCP コンソールにログイン
- メニューから「IAM と管理」の「サービスアカウント」に移動
- 「サービスアカウントを作成」から作成開始
- 「サービスアカウント名」と「サービスアカウントID」は任意のもの
- 「ロール」に「Cloud Run 起動元」を追加
- 「作成」ボタン押下で作成完了
Cloud Run のサービスの作成
コンテナの作成
- https://github.com/GoogleCloudPlatform/golang-samples を clone
- コンテナをビルドして Cloud Registry に push
cd run/helloworld
gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/helloworld
サービスの作成
- GCP コンソールにログイン
- メニューから「Cloud Run」に移動
- 「サービスの作成」から作成開始
- 「既存のコンテナ イメージから 1 つのリビジョンをデプロイする」で push したコンテナを選択
- 「サービス名」と「リージョン」は任意
- 「認証」は「認証が必要」にチェックする
- 「作成」ボタン押下で作成完了
Cloud Scheduler のジョブの作成
- GCP コンソールにログイン
- メニューから「Cloud Scheduler」に移動
- 「ジョブを作成」から作成開始
- 「名前」「頻度」「タイムゾーン」は任意のもの
- 「ターゲット」は「HTTP」
- 「URL」は作成したサービスの URL
- 「HTTPメソッド」は「GET」
- 「SHOW MORE」の中の「Auth ヘッダー」は「OIDC トークンを追加」で「サービスアカウント」は作成したサービスアカウントのメールアドレスを指定
- 「作成」ボタン押下で作成完了
- 作成したジョブの「今すぐ実行」ボタンを押下して動作確認
手順通りに設定しても「PERMISSION_DENIED」になる場合
- Cloud Scheduler API を 2019 年 3 月 19 日より前に有効にした場合のみ必要なサービスアカウントが不足しており手動で作成しなければ正常に動作しないという状態になっています。
- 作成手順は https://cloud.google.com/scheduler/docs/http-target-auth?hl=ja#add です。