GCP Pub/SubとAWS APIGWの連携

GCPのPub/SubからどうしてもAWSのAPI Gatewayにパブリッシュしたかった話です。
普通はCloudFunctionsを使うと思いますが、どうしてもAPI Gatewayを使いたかったのです。。。

前提

・GCPのPub/Subを作成済み
・AWSのアカウント作成済み
・資料はMacベースです

API Gateway+Lambdaの作成

今回は認証にJWTオーソライザーを利用するため、HTTP APIを作成します。

Lambdaの作成

スクリーンショット 2020-04-14 1.08.36

スクリーンショット 2020-04-14 1.09.18

Pub/Subはステータスコード200, 201, 202, 204, 102 であればOKなので、入ってきたリクエスト内容を表示するため、print文だけ書いて後はデフォルトコードのままにします。

import json

def lambda_handler(event, context):
   print(event)
   return {
       'statusCode': 200,
       'body': json.dumps('Hello from Lambda!')
   }

API Gatewayの作成

HTTP APIを選択(JWTオーソライザーを使うため)

スクリーンショット_2020-04-14_1_14_07

先程作成したLambdaを指定

スクリーンショット 2020-04-14 1.15.24

Pub/SubのPushはPOSTでリクエストされる
また、https://xxxxxx/でリクエストされるようにリソースパスを設定する

スクリーンショット 2020-04-14 1.15.39

特に修正なし

スクリーンショット 2020-04-14 1.15.47

設定内容確認して、作成

スクリーンショット 2020-04-14 1.16.00

URLをコピーする





スクリーンショット_2020-04-14_1_19_26

以下のようにレスポンスが返ってきたらOK

$ curl -X POST https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/
"Hello from Lambda!"

Pub/Sub設定

サービスアカウントの作成

名前を適当に入力

画像9

「サービスアカウントトークン作成者」権限を付与

画像10

あとはそのまま完了

スクリーンショット 2020-04-14 1.27.40

サブスクリプションの作成

スクリーンショット_2020-04-14_1_32_21

スクリーンショット 2020-04-14 1.32.30

JWTオーソライザーの設定

対象のAPIを選択して、オーソライザーを作成してアタッチ

画像14

名前:適当に
IDソース:$request.header.Authorization

画像15

発行者ID:https://accounts.google.com(iss)
対象者:作成したAPI GatewayのURL(aud)
  参考)Pub/Sub JSON Web Token(JWT)の使用

画像16

まとめ

これでPub/SubとAPI GatewayをJWT認証を使って連携できたと思います
(どう考えてもCloud Functions使った方が楽という話は置いといて・・・)


この記事が気に入ったらサポートをしてみませんか?