0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloud Run functions × TypeScript 開発をしよう!Advent Calendar 2024

Day 20

Cloud Run functions × TypeScript 開発をしよう!【発展編:Cloud Schedulerで Cloud Run functionsの定期実行をする】

Posted at

はじめに

この記事では以下のことについて話しています。

  • Terraform で Cloud Scheduler を構成する方法
  • Cloud Run functions と Cloud Scheduler をお得に組み合わせて使うアーキテクチャ

この記事では Cloud Schedulerの構成方法と、Cloud Run functionsと組み合わせて使うときのコツみたいなのを紹介したいと思います。Cloud Scheduler で呼び出す Cloud Run functions 関数は認証有りにしておきます。

前準備

Cloud Scheduler を初めて使う場合はAPIを有効にしておきましょう。

gcloud services enable cloudscheduler.googleapis.com

Terraform で Cloud Scheduler を構成する

まずCloud Schedulerのリソースを定義します。Cloud Scheduler は認証付きのエンドポイントを呼び出す際、メールで指定されたサービス アカウントに基づくIDトークン(OIDCトークン)をヘッダーに付与して呼び出します。

main.tf
resource "google_cloud_scheduler_job" "scheduler" {
  name             = "functions-scheduler"               # スケジューラ名
  description      = "7:00/13:00/17:00で定期処理を実行する" # スケジューラの説明
  schedule         = "0 7,13,17 * * *"                   # 定期実行の設定
  time_zone        = "Asia/Tokyo"                        # タイムゾーン
  region           = "asia-northeast1"                   # リージョン
  attempt_deadline = "180s"                              # HTTP リクエストのタイムアウト
  
  http_target {
    http_method = "GET"
    # Cloud Run functions のエンドポイント
    uri         = google_cloudfunctions2_function.default.service_config[0].uri
    
    oidc_token {
      # 認証付きのエンドポイントを呼び出せるサービスアカウントのメールアドレス
      service_account_email = "${data.google_project.project.number}-compute@developer.gserviceaccount.com"
      # Cloud Run functions のエンドポイント。uri と同じにする
      audience              = google_cloudfunctions2_function.default.service_config[0].uri
    }
  }
  
  depends_on = [
    google_cloudfunctions2_function.default
  ]
}

いざ terraform apply します。

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Cloud Scheduler のページに移動します。特定の時間にならないと実行確認できないので「操作」の三点リーダをクリックして「強制実行」してみます。実行が成功すれば「最後の実行のステータス」のところが緑になります。

スクリーンショット 2024-12-24 1.54.35.png

参考

Cloud Run functions と Cloud Scheduler をお得に使う

Cloud Schedulerは3つまでジョブを毎月無料で使えます。なので時間帯によって実行する処理がある場合は、関数の中で時間によって処理を分岐させると結構なコスト削減になります。

import { toZonedTime } from 'date-fns-tz'
const date = new Date()
// 東京の現在時刻
const dateTokyo = toZonedTime(date, 'Asia/Tokyo')
const hour = dateTokyo.getHours();

// 7時, 13時, 17時でロジックの呼び分け
if (hour === 7) {
    // 7時に実行する処理
} else if (hour === 13) {
    // 13時に実行する処理
} else if (hour === 17) {
    // 17時に実行する処理
}

見た目は汚くなりますが、ドケチに使ってナンボです。クリーンアーキテクチャとかDDDとか知りません。

終わりに

Cloud Scheduler で 認証付きの Cloud Run functions 関数を呼び出す方法を紹介しました。発展編とは銘打っているものの特に発展っぽいことはしていませんが、Cloud Schedulerの毎月の無料枠を積極的に使っていきましょう(脈絡がおかしい)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?