BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【GCP】Let's サーバーレス!「Cloud Scheduler」をイチから学ぶ その②

f:id:bftnagoya:20210323144541j:plain

はじめに

こんにちは!
BFT2020年新卒の金丸&島田です!

前回の記事では、GCPのジョブスケジューラサービス「Cloud Scheduler」の概要を説明しました。今回は実際にジョブを作成して実行する手順をご紹介します!

サービスアカウントを使用して認証する

HTTP/Sエンドポイントをターゲットとする場合、サービスアカウントを使用した認証を行うことでよりセキュアにリクエストを処理することができます。

概要

サービスアカウントを使用した認証では、HTTPリクエストのヘッダーにサービスアカウントの情報を含んだID トークンを追加し、HTTPエンドポイントにリクエストを送ります。そうすることで、あたかもそのサービスアカウントがHTTPリクエストを送ってきたかのように見せることができます。

 

今回の作業環境では、GCPの認証サービスであるIdentity-Aware Proxy(以下、IAP)を使用しています。サービスアカウントにIAPで保護されたリソースへのアクセスを許可するロールを付与し、アプリケーションではなく、IAP側で認証しています。

サービスアカウントを作成・設定する

ここからは実際にサービスアカウントの作成・設定をしていきたいと思います。


使用するサービスアカウントは2つです。1つ目がCloud Schedulerにデフォルトで用意されている、「Cloud Scheduler サービス エージェント」のロールが付与されたサービスアカウント(以下、Cloud Schedulerサービスアカウント)、2つ目がジョブに紐づけるバッチジョブ用サービスアカウント(以下、バッチジョブサービスアカウント)です。

Cloud Schedulerサービスアカウントの設定

はじめにCloud Schedulerサービスアカウントの設定を行います。この設定によって、バッチジョブサービスアカウントに代わり、認証に使用するID トークンを生成することができます。

 

  1. GCPコンソールから「IAMと管理」-「IAM」を開きます。
  2. [□Google提供のロール付与を含みます]にチェックを付け、「Cloud Scheduler サービス エージェント」のロールが付与されたサービスアカウントがあることを確認します。
  3. アカウントが表示されていない場合は、Cloud Scheduler APIが有効になっていない可能性があるので、有効にしてください。
  4. 1で確認したアカウントを編集していきます。
    [+別のロールを追加]を押下し、「サービスアカウント トークン作成者」を選択します。

    f:id:bftnagoya:20210323170920p:plain

  5. [保存]を押下し、Cloud Schedulerサービスアカウントにロールが追加されたことを確認します。
バッチジョブサービスアカウントの作成

次にバッチジョブサービスアカウントを作成します。

 

  1. GCPコンソールから「IAMと管理」-「サービスアカウント」を開き、[サービスアカウントを作成]をクリックします。
  2. サービスアカウント名を一意になるように設定します。サービスアカウントIDはサービスアカウント名を設定する際に自動で設定されます。
  3. サービスアカウントの説明を任意で設定することができます。
  4. サービスアカウント名、サービスアカウントの説明を設定し終えたら、[作成]を押下します。
  5. サービスアカウントに付与するロールを設定します。
  6. バッチジョブサービスアカウントがIAPでの認証を通過するように、「IAPで保護されたウェブアプリユーザー」のロールを選択し、[続行]を押下します。

    f:id:bftnagoya:20210323171318p:plain

  7. ユーザーにこのサービスアカウントへのアクセスを許可するか設定します。ここでは何も設定せずに[完了]を押下します。
  8. バッチジョブサービスアカウントが作成されたことを確認します。
バッチジョブサービスアカウントの設定

バッチジョブサービスアカウントをIAPのアクセスリストに追加します。

 

  1. GCPコンソールから「セキュリティ」-「Identity-Aware Proxy」を開きます。
  2. HTTPSのリソースから対象のバックエンドサービスを選択します。
  3. 画面右端に表示された情報パネルの[メンバーを追加]を押下します。
  4. 新しいメンバーにバッチジョブサービスアカウントのメールアドレスを設定します。
  5. 「IAP-secured Web App User」ロールを付与し、[保存]を押下します。

    f:id:bftnagoya:20210323171705p:plain

  6. 情報パネルのロール/メンバーにバッチジョブサービスアカウントが追加されたことを確認します。

ジョブを作成・実行する

ジョブの作成

  1. GCPコンソールから「Cloud Scheduler」を開き、[ジョブの作成]を押下します。
  2. ジョブの名前をプロジェクト内で一意になるように指定します。
  3. ジョブの設定を任意で設定します。
  4. ジョブの実行頻度を設定します。
  5. タイムゾーンを指定します。ここでは日本標準時JST)を選択します。
  6. ターゲットのプルダウンメニューから[HTTP]を選択し、URLを記述する欄にジョブが接続するエンドポイントの完全修飾URLを指定します。
  7. HTTPメソッドのプルダウンメニューから[GET]を選択し、SHOW MOREを押下します。
  8. Authヘッダーのプルダウンメニューから[OIDCトークンを追加]を選択し、バッチジョブサービスアカウントのメールアドレスを指定します。
  9. 対象にはOAuthクライアントのクライアントIDを指定します。OAuthクライアントのクライアントIDはGCPコンソールから「セキュリティ」-「Identity-Aware Proxy」画面を開き、使用しているバックエンドサービスの「OAuthクライアントを編集」をクリックすることで確認できます。
  10. 最後に[作成]を押下し、ジョブの作成は完了です。

 

ここではGCPコンソールよりジョブの作成を行いましたが、gcloudコマンドラインツールを使用することによって、ジョブの再試行回数や再試行までの時間等、詳細まで設定することが可能です。

詳しくは以下の公式ドキュメントを参照してください。

cloud.google.com

ジョブの実行

実際に作成したジョブを実行します。

GCPコンソールから「Cloud Scheduler」を開き、対象のジョブの[今すぐ実行]を押下します。

ログの確認

ログはロギングのログエクスプローラで実行結果を確認できます。各ジョブの実行開始時と終了時にログを記録しており、ジョブの実行回数や時刻、HTTPステータスコードなど実行時の状況を詳細に確認できます。

f:id:bftnagoya:20210323173640p:plain

終わりに

いかがでしたでしょうか。二回にわたってCloud Schedulerの概要と、ジョブ作成の手順についてご紹介してきました。

ボタン一つでジョブが実行できるGCPコンソールは、ジョブスケジューラを初めて触る方でも直感的に操作できるので非常に使いやすいと思います。

毎日のメールの定時配信や、定期的な業務データのエクスポートなど、日々の業務の自動化には欠かせないジョブスケジュール。

どのジョブスケジューラを利用するかお悩みの方、サーバーレスなジョブスケジューリングに興味をもった方は、ぜひ一度「Cloud Scheduler」の使用を検討してみてはいかがでしょうか。