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の作成
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オーソライザーを使うため)
先程作成したLambdaを指定
Pub/SubのPushはPOSTでリクエストされる
また、https://xxxxxx/でリクエストされるようにリソースパスを設定する
特に修正なし
設定内容確認して、作成
URLをコピーする
以下のようにレスポンスが返ってきたらOK
$ curl -X POST https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/
"Hello from Lambda!"
Pub/Sub設定
サービスアカウントの作成
名前を適当に入力
「サービスアカウントトークン作成者」権限を付与
あとはそのまま完了
サブスクリプションの作成
JWTオーソライザーの設定
対象のAPIを選択して、オーソライザーを作成してアタッチ
名前:適当に
IDソース:$request.header.Authorization
発行者ID:https://accounts.google.com(iss)
対象者:作成したAPI GatewayのURL(aud)
参考)Pub/Sub JSON Web Token(JWT)の使用
まとめ
これでPub/SubとAPI GatewayをJWT認証を使って連携できたと思います
(どう考えてもCloud Functions使った方が楽という話は置いといて・・・)
この記事が気に入ったらサポートをしてみませんか?