Pub/Sub を使用して Cloud Functions をスケジュールする

このチュートリアルでは、Cloud Scheduler と Pub/Sub を使用して Cloud ファンクションをトリガーする方法を説明します。Cloud ファンクションの実行のスケジュールは、Cloud Scheduler の一般的なユースケースです。 このチュートリアルでは、次のことを行います。

  • Pub/Sub トピックをサブスクライブする単純な Cloud ファンクションを作成する。
  • そのファンクションをトリガーする Pub/Sub トピックを作成する。
  • Pub/Sub トリガーを呼び出す Cloud Scheduler ジョブを作成する。
  • Cloud Scheduler ジョブを実行する。
  • 正常終了を確認する。

始める前に

このチュートリアルは、Cloud Scheduler のクイックスタートを完了していることを前提としています。次のツールとリソースを利用できる必要があります。

  • 課金を有効にした Google Cloud プロジェクト

  • プロジェクトで有効になっている Cloud Scheduler API および Pub/Sub API。Cloud Functions API は、チュートリアルの中で有効にします。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

  • Cloud Functions
  • Pub/Sub
  • Cloud Scheduler

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

トリガーを使用して Cloud Functions の関数を作成する

  1. Google Cloud コンソールで、[Cloud Functions] ページに移動します。

    Cloud Functions に移動

  2. プロンプトが表示されたら、[API を有効にする] をクリックします。

  3. [ファンクションを作成] をクリックします。API を有効にするよう求めるメッセージが表示されたら、[有効にする] をクリックして API を有効にします。

  4. [基本] セクションで、[第 2 世代] 環境を選択し、関数の名前を入力して、リージョンを選択します。

  5. [トリガー] セクションで、[認証を要求する] を選択します。[トリガーを追加] をクリックして [Pub/Sub トリガー] を選択します。[Eventarc トリガー] パネルが開きます。[必要な API を有効にする] よう求めるプロンプトが表示されたら、[有効にする] をクリックします。

  6. [Eventarc トリガー] パネルで、最初のいくつかのフィールドが次のように入力されていることを確認します。または、必要に応じてフィールドに値を入力します。

    • トリガーのタイプ: Google ソース
    • イベント プロバイダ: Cloud Pub/Sub
    • イベント: google.cloud.pubsub.topic.v1.messagePublished
  7. [Cloud Pub/Sub トピックを選択してください] フィールドで、既存のトピックを選択するか、[新しいトピックを作成] をクリックして新しいトピックを作成します。関数によってこのトピックがサブスクライブされます。トピックの名前は、後で必要になるためメモしておきます。

    • プロンプトが表示されたら [付与] をクリックし、Pub/Sub サービスがファンクションのトリガーに必要な ID トークンを作成できるようにします。先ほど、ファクションで [認証が必要] を選択したことを思い出してください。Pub/Sub では、必要な認証に ID トークンを使用します。
  8. [サービス アカウント] フィールドで [新しいサービス アカウントを作成] をクリックします。

    1. サービス アカウントの名前を入力して、[作成] をクリックします。Eventarc はこのサービス アカウントを使用して、Pub/Sub サービスから ID トークンを使用してファクションを呼び出します。

    2. [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、[Cloud Run 起動元] ロールを選択します。これにより、サービス アカウントに第 2 世代のファクションを呼び出す権限が付与されます。

    3. [完了] をクリックします。

  9. [失敗時に再試行する] はオフのままにします。[トリガーを保存] をクリックします。

  10. [ランタイム、ビルド、接続、セキュリティの設定] セクションを開いて、[ランタイム] タブを選択します。

  11. [ランタイム サービス アカウント] の [サービス アカウント] フィールドで、[作成] をクリックします。サービス アカウント作成フローが新しいタブで開きます。このサービス アカウントは、Cloud Functions の関数の実行時に使用される ID です。

    1. サービス アカウントの名前を入力します。
    2. [作成して続行] をクリックします。
    3. [完了] をクリックします。

    Google Cloud コンソールの [サービス アカウント] ページにリダイレクトされます。このタブを閉じてください。

  12. 関数の作成ページの [サービス アカウント] フィールドに戻り、[更新] をクリックして、先ほど作成したサービス アカウントを選択します。

  13. [Next] をクリックします。必要な API を有効にするよう求められたら、[有効にする] をクリックします。

  14. デフォルトの言語とサンプルコードを変更しないでください。このコードではクラウド サービスを使用せず、追加の権限を有効にする必要はありません。[デプロイ] をクリックします。

Cloud Scheduler ジョブを作成する

  1. Google Cloud コンソールで、[Cloud Scheduler] ページに移動します。

    Cloud Scheduler に移動

  2. [ジョブを作成] をクリックします。

  3. 必要に応じて、ジョブを実行するリージョンを選択します。

  4. ジョブに名前を指定し、必要に応じて説明を追加します。

  5. ジョブの頻度unix-cron 形式で指定します。

    30 16 * * 7
    

    詳細については、cron ジョブ スケジュールの構成をご覧ください。

  6. タイムゾーンを選択します。

  7. [続行] をクリックする

  8. [実行の構成] セクションで、ターゲット タイプとして [Pub/Sub] を選択します。

  9. トピック名を選択します。

  10. [メッセージ] に、ターゲットに送信する短いペイロード文字列を追加します。

  11. [作成] をクリックします。

日曜日の 16:30 に Pub/Sub トピックにメッセージを送信する cron ジョブができました。Cloud ファンクションは、このトピックにサブスクライブされています。

ジョブを実行する

作成したジョブを実行できるようになりました。

  1. Google Cloud コンソールで、[Cloud Scheduler] ページに移動します。

    Cloud Scheduler に移動

  2. 作成したジョブを選択します。

  3. [強制実行] をクリックします。

    プロジェクトに作成された最初のジョブを初めて呼び出すときは、必要な構成が行われるため、実行されるまで数分かかることがあります。

  4. [前回の実行のステータス] 列を確認します。ジョブの実行後、この列には「成功」と表示されます。

これで完了です。コンソールを使用して、Pub/Sub にメッセージを送信する cron ジョブの実行結果を確認しました。次に、Cloud ファンクションが実際に実行されたことを確認する方法を学びます。

Cloud Functions で結果を確認する

Cloud ファンクションが cron ジョブによって正常にトリガーされたことを確認するには:

  1. Google Cloud コンソールで、[Cloud Functions] ページに移動します。

    Cloud Functions に移動

  2. ファンクション名をクリックします。

  3. [ファンクションの詳細] ページが開きます。呼び出し回数/秒のグラフには、関数の最初の呼び出しが表示されます。呼び出しの詳細を表示するには、[ログ] をクリックします。

これで完了です。ファンクションが実行されたことが確認できました。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにする手順は次のとおりです。

Cloud Scheduler ジョブの削除

  1. Google Cloud コンソールで、[Cloud Scheduler] ページに移動します。

    [スケジューラ] に移動

  2. ジョブの横のチェックボックスを選択します。

  3. [ 削除] をクリックして、削除を確定します。

Pub/Sub トピックの削除

  1. Google Cloud コンソールで、[Cloud Pub/Sub] ページに移動します。

    [Pub/Sub] に移動

  2. トピックの横にあるチェックボックスをオンにします。

  3. [ 削除] をクリックして、削除を確定します。

Cloud Functions ファンクションの削除

  1. Google Cloud コンソールで、[Cloud Functions] ページに移動します。

    Cloud Functions に移動

  2. ファンクションの横にあるチェックボックスをオンにします。

  3. [ 削除] をクリックして、削除を確定します。

サービス アカウントを削除する

  1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. 作成したサービス アカウントの横にあるチェックボックスをオンにします。

  3. [ 削除] をクリックして、削除を確定します。

API を無効にする

このチュートリアルの手順に沿って API(Eventarc、Cloud Functions、Pub/Sub API など)を有効にした場合は、無効にします。API を無効にすると、プロジェクトの API へのアクセスに影響するため、プロジェクト内の他のリソースが API を使用している場合はその API を無効にしないでください。

  1. Google Cloud コンソールで、[API とサービス] ページに移動します。

    [API とサービス] に移動

  2. 無効にする API をクリックします。API を説明するページが表示されます。

  3. [API を無効にする] をクリックします。

プロジェクトの削除

このチュートリアルのためだけにプロジェクトを作成した場合は、以下を実行します。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。