おはようございます!今回は前回に引き続き、GCPのサーバレスサービスCloud Functionsを使って生きます!
前回はHTTPリクエストで呼び出す方法についてご紹介しましたが、今回のテーマはこちら!
今回はCloud Functionsと、Cloud Schedulerを組み合わせて、スケジュール処理を作ってみます!
Cloud Schedulerとは
Cloud Scheduler | Google Cloud
Cloud Scheduler単体では処理は動きませんが、HTTPリクエスト、Pub/Subメッセージを送ることができるので、Cloud Functionsなどの他のGCPサービスと組み合わせて使うことで、1つのバッチ処理基盤のように扱うことができます。
Cloud Functionsの認証付きHTTP関数の作成
以下からCloud Functionsの画面を開き、関数を作成をクリックします。
以下を設定します。
- 名前:好きな名前
- リージョン:asia-northeast1(Tokyo)
- トリガー: HTTP 、認証が必要にチェック
RUNTIME,BUILD AND CONNECTIONS SETTINGをクリックし、
[ランタイム]タブのランタイムサービスアカウントが「App Engine default service account」であることを確認します。ここでCloud Functionsが利用するサービスアカウントを設定しますが、今回はデフォルトのままで進めます。
[次へ]をクリックし、ランタイムをPython3.7に切り替え、そのままデプロイします。
ブラウザで関数のURLにアクセスしてみましょう。未認証で403になることを確認します。
これで外部からはアクセスできないHTTP関数が完成です!
Cloud Schedulerのジョブを作成する
以下からCloud Schedulerの画面を開き、ジョブを作成します。
以下を設定します。
- 名前:好きな名前
- 説明:適当な説明
- 頻度:今回は30分に1回実行してみたいので、
*/30 * * * *
と入力 - タイムゾーン:日本標準時(JST)
[続行]をクリックします。
次にターゲットを設定します。
- ターゲットタイプ:HTTP
- URL:先程作成したCloud FunctionsのHTTP関数のURL
- HTTPメソッド:GET
- Authヘッダー:OIDC トークンを追加
- サービスアカウント:App Engineのdefaultサービスアカウント([プロジェクトID]@appspot.gserviceaccount.com)
- 対象:先程作成したCloud FunctionsのHTTP関数のURL
「詳細設定を構成する」は省略し、[作成]をクリックします。
以下のようにSchedulerジョブ一覧に表示されます。早速[今すぐ実行]をクリックしましょう。
結果列に「成功」と表示されればOKです。
たったこれだけの手順で、サーバレススケジュール処理の完成です!
しばらく寝かせて、Cloud Functions側のログも確認してみます。
ちゃんと30分に1回、リクエストが来ているのが確認できます。
まとめ
以上、今回はCloud Functionsの関数をCloud Schedulerでスケジュール実行する方法についてご紹介しました。プログラムのスケジュール実行を完全サーバレスで、無料枠の範囲でできるので、個人開発でも覚えておくと便利だと感じました。
次回は、Cloud Functionsをもっと本格的に活用できるように、実際のソースとともに初回していきたいと思います。