LoginSignup
2
1

[Pub/Sub - Cloud Functions] Google Cloud APIからの通知を受け取る

Last updated at Posted at 2024-03-24

Googleのサービス、Pub/SubとCloud Functionsを使用して
Google Cloud APIからの通知を受け取る方法をご紹介します。

No 目次
1 Pub/Sub でトピックを作成
1 Pub/Subの検索
2 トピックを作成
3 権限の設定
2 Cloud Functions でファンクションを作成
1 Cloud Functions 検索
2 ファンクションを作成
3 ファンクションURLの取得
3 Pub/Sub でサブスクリプションを作成
1 サブスクリプションを作成
2 トピックの名前を取得
4 APIからの通知を受け取る

1. Pub/Sub でトピックを作成

Pub/Subでトピックを作成します。

1.1. Pub/Subの検索

Pubと入力して、Pub/Subを選択します。

1.2. トピックを作成

Pub/Sub画面の「トピックを作成」ボタンを押下します。

トピックIDにトピック名を入力し、
「デフォルトのサブスクリプションを追加する」からチェックを外して
「作成」ボタンを押下します。

1.3. 権限の設定

作成したトピックの右側のメニューから「権限の表示」を選択します。

「プリンシバルを追加」を押します。

新しいプリンシバルに利用したいAPIのプリンシバルを追加し、
ロールに「Pub/Sub パブリッシャー」を選択し、「保存」ボタンを押します。

2. Cloud Functions でファンクションを作成

2.1. Cloud Functions 検索

cloud functionsと入力して、Cloud Functionsを選択します。

2.2. ファンクションを作成

Cloud Functions画面の「ファンクションを作成」ボタンを押します。

下記を選択・入力して、「次へ」を押します。

設定 設定値
環境 第2世代
関数名 任意の関数名
リージョン asia-northeast1(東京)
トリガーのタイプ Cloud Pub/Sub
Cloud Pub/Sub トピック 1.Pub/Sub でトピックを作成で作成したトピックを選択

ランタイムにJava 21を選択します。

関数が自動で作成されますが、利用するCloud APIの通知によっては
MessageのgetData()でNULLが返ってくるので、下記のようにコードを修正します。

修正後、「デプロイ」ボタンを押下します。

package gcfv2pubsub;

import com.google.cloud.functions.CloudEventsFunction;
import com.google.events.cloud.pubsub.v1.MessagePublishedData;
import com.google.events.cloud.pubsub.v1.Message;
import com.google.gson.Gson;
import io.cloudevents.CloudEvent;
import java.util.Base64;
import java.util.logging.Logger;

public class PubSubFunction implements CloudEventsFunction {
  private static final Logger logger = Logger.getLogger(PubSubFunction.class.getName());

  @Override
  public void accept(CloudEvent event) {
    logger.info("Event: " + event.getId());
    logger.info("Event Type: " + event.getType());

    String cloudEventData = new String(event.getData().toBytes());
    logger.info("Event Data: " + cloudEventData);

    Gson gson = new Gson();
    MessagePublishedData data = gson.fromJson(cloudEventData, MessagePublishedData.class);
    Message message = data.getMessage();
    if(message!=null){
      String encodedData = message.getData();
      if(encodedData!=null){
        String decodedData = new String(Base64.getDecoder().decode(encodedData));
        logger.info("Message EncodedData: " + encodedData);
      }
    }
  }
}

2.3. ファンクションURLの取得

ファンクションが作成されるので、URLを控えます。

3. Pub/Sub でサブスクリプションを作成

3.1. サブスクリプションを作成

Pub/Subを開いて、メニューの「サブスクリプション」を選択し、
「サブスクリプションを作成」を押下します。

下記を選択・入力して、「作成」ボタンを押します。

設定 設定値
サブスクリプションID 任意の名前
Cloud Pab/Sub トピック 1.Pub/Sub でトピックを作成で作成したトピックを選択
配信タイプ push
エンドポイントURL 2.3. ファンクションURLの取得で取得したURL

3.2. トピックの名前を取得

トピックの名前を控えます。この名前をAPIで使用します。

4. APIからの通知を受け取る

3.2. トピックの名前を取得で取得した
トピックの名前を指定してGmailの監視を行います。

Gmail APIについては
⧉[Gmail API] JavaでGmail APIを使う
をご参照ください。

public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users.Watch watch = gmail.users().watch(
        "me",
        new WatchRequest().setTopicName("トピックの名前")
    );
    System.out.println(watch.execute());
}

先程の「me」宛にメールが届くなど変更があった場合に、下記の通知が届きます。





おしまい。。

2
1
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
2
1