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の検索
1.2. トピックを作成
トピック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 でトピックを作成で作成したトピックを選択 |
関数が自動で作成されますが、利用する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の取得
3. Pub/Sub でサブスクリプションを作成
3.1. サブスクリプションを作成
Pub/Subを開いて、メニューの「サブスクリプション」を選択し、
「サブスクリプションを作成」を押下します。
下記を選択・入力して、「作成」ボタンを押します。
設定 | 設定値 |
---|---|
サブスクリプションID | 任意の名前 |
Cloud Pab/Sub トピック | 1.Pub/Sub でトピックを作成で作成したトピックを選択 |
配信タイプ | push |
エンドポイントURL | 2.3. ファンクションURLの取得で取得したURL |
3.2. トピックの名前を取得
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());
}