とりゅふの森

GCPデータエンジニアとして生きる

【Cloud Functions】Cloud Schedulerを使って、サーバレス関数をスケジュール実行する【FaaS】

f:id:true-fly:20210824232203p:plain

おはようございます!今回は前回に引き続き、GCPのサーバレスサービスCloud Functionsを使って生きます!

www.true-fly.com

前回はHTTPリクエストで呼び出す方法についてご紹介しましたが、今回のテーマはこちら!

GCPのサーバレスサービス、Google Cloud FunctionsをCloud Schedulerでスケジュール実行してみよう!

今回はCloud Functionsと、Cloud Schedulerを組み合わせて、スケジュール処理を作ってみます!

Cloud SchedulerもCloud Functions同様に無料枠があります。1アカウントにつき3ジョブまでは無料で利用できます!

Cloud Schedulerとは

Cloud Schedulerとは、その名の通りクラウド上で処理をスケジュール実行できるサービスです。GCPにおけるcronです!

Cloud Scheduler  |  Google Cloud

Cloud Scheduler単体では処理は動きませんが、HTTPリクエスト、Pub/Subメッセージを送ることができるので、Cloud Functionsなどの他のGCPサービスと組み合わせて使うことで、1つのバッチ処理基盤のように扱うことができます。

今回は、Cloud Functionsの認証付きHTTP関数を作成し、それをCloud Schedulerでスケジュール実行してみようと思います。

Cloud Functionsの認証付きHTTP関数の作成

以下からCloud Functionsの画面を開き、関数を作成をクリックします。

console.cloud.google.com

以下を設定します。

  • 名前:好きな名前
  • リージョン:asia-northeast1(Tokyo)
  • トリガー: HTTP 、認証が必要にチェック

RUNTIME,BUILD AND CONNECTIONS SETTINGをクリックし、
[ランタイム]タブのランタイムサービスアカウントが「App Engine default service account」であることを確認します。ここでCloud Functionsが利用するサービスアカウントを設定しますが、今回はデフォルトのままで進めます。

f:id:true-fly:20210824234036p:plain

[次へ]をクリックし、ランタイムをPython3.7に切り替え、そのままデプロイします。

ブラウザで関数のURLにアクセスしてみましょう。未認証で403になることを確認します。

f:id:true-fly:20210825000319p:plain

これで外部からはアクセスできないHTTP関数が完成です!

Cloud Schedulerのジョブを作成する

以下からCloud Schedulerの画面を開き、ジョブを作成します。

console.cloud.google.com

以下を設定します。

  • 名前:好きな名前
  • 説明:適当な説明
  • 頻度:今回は30分に1回実行してみたいので、*/30 * * * *と入力
  • タイムゾーン:日本標準時(JST)

f:id:true-fly:20210824234853p:plain

[続行]をクリックします。
次にターゲットを設定します。

  • ターゲットタイプ:HTTP
  • URL:先程作成したCloud FunctionsのHTTP関数のURL
  • HTTPメソッド:GET
  • Authヘッダー:OIDC トークンを追加
  • サービスアカウント:App Engineのdefaultサービスアカウント([プロジェクトID]@appspot.gserviceaccount.com)
  • 対象:先程作成したCloud FunctionsのHTTP関数のURL

f:id:true-fly:20210825000742p:plain

「詳細設定を構成する」は省略し、[作成]をクリックします。

以下のようにSchedulerジョブ一覧に表示されます。早速[今すぐ実行]をクリックしましょう。
結果列に「成功」と表示されればOKです。
たったこれだけの手順で、サーバレススケジュール処理の完成です!

f:id:true-fly:20210825000926p:plain

しばらく寝かせて、Cloud Functions側のログも確認してみます。
ちゃんと30分に1回、リクエストが来ているのが確認できます。

f:id:true-fly:20210825230444p:plain

まとめ

以上、今回はCloud Functionsの関数をCloud Schedulerでスケジュール実行する方法についてご紹介しました。プログラムのスケジュール実行を完全サーバレスで、無料枠の範囲でできるので、個人開発でも覚えておくと便利だと感じました。
次回は、Cloud Functionsをもっと本格的に活用できるように、実際のソースとともに初回していきたいと思います。

GCPの教科書

GCPの教科書

Amazon