API GatewayからLambdaを介さずにSNSトピックへ送信
2020/05/09
目次
やりたいこと
APIリクエストをまずLambdaで受けて、SNSトピックへ送信するという処理をしています。
特に加工は必要ありません。
コードはPythonだとこんな感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
def lambda_handler(event, context): logger.info(event) try: sns = boto3.client('sns') snsTopicArn = [t['TopicArn'] for t in sns.list_topics()['Topics'] if t['TopicArn'].endswith(':topic_name')][0] sns.publish( TopicArn=snsTopicArn, Message=json.dumps(event), Subject='question' ) except: logger.error(traceback.format_exc()) |
このLambdaなくてもいいんじゃ、と教えてもらったので試してみました。
こちらを目指します。
ライブ配信カレンダーのバックエンド処理向けに作成
何かで実装したほうが理解早まりそうなので、こちら「ライブ配信のカレンダーをGoogle Apps Scriptとかで作りました」のライブ配信カレンダーの機能拡張の一環として作成してみます。
こちらの記事を参考に作成しました。
- Amazon API GatewayにSNSをプロキシさせ複数処理を並列に行ってAWS IoTっぽくする
- Connect AWS API Gateway directly to SNS using a service integration
- チュートリアル: AWS 統合を使用して API Gateway API をビルドする
SNSトピックの作成
マネジメントコンソールSNSでトピックを新規作成しました。
SQSキューの作成
マネジメントコンソールSQSでキューを新規作成しました。
まずデッドレターキュー(DLQ)用のキューを作成しました。
メッセージ保持期間のみ、14日に変更しました。
他はデフォルトのままです。
処理用のキューを新規作成しました。
とりあえずTwitter向けのキューを作成して、メッセージが受信できるまでを確認します。
先入れ先出しに厳密ではないし、1回以上Tweetされても全然いいので、標準キューで作成しました。
メッセージ保持期間を14日間、メッセージ受信待機時間(ロングポーリング)を20秒、事前に作成したDLQを設定しました。
再試行回数は5回にしました。
作成したキューを選択して、[キュー操作]-[SNSトピックへのキューのサブスクライブ]からサブスクリプションを作成しました。
事前に作成した、SNSトピックを選択しました。
IAMロールの作成
API Gatewayのメソッドに割り当てるIAMロールを作成しておきます。
AWSサービスロールで、API Gatewayを選択しました。
CloudWatch Logsへの書き込みポリシーがアタッチされてたいので、そのままにしました。
今回のワークロード向けとわかるタグにしておきました。
できました。
インラインポリシーを追加しておきました。
1 2 3 4 5 6 7 8 9 10 11 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-1:12345678012:LiveDelivery" } ] } |
事前に作成したSNSトピックにパブリッシュできるポリシーにしました。
API Gatewayの作成
マネジメントコンソール API GatewayでREST APIの新規作成をしました。
LiveDeliveryという名前にしました。
リソースを作成しました。
live というリソースにしました。
CORSも有効にしておきました。
作成したliveリソースを選択してメソッドを作成しました。
AWSサービスを選択して、リージョン選択と、サービスはSNSを選択しました。
HTTPメソッドはPOSTで、アクションに”Publish”を入力しました。
事前に作成したIAMロールのARNを実行ロールに入力しました。
統合リクエストのURLクエリ文字列パラメータに、Messageと、TopicArnを設定しました。
TopicArnはシングルクォーテーションで囲むそうです。なるほど。
API Gatewayでテストをしてみます。
1 2 3 4 5 6 7 |
{ "title": "ライブタイトル", "startTime": "2020/5/5 18:30", "endTime": "2020/5/5 21:30", "description": "配信ライブです。\nhttps://example.com/" } |
実際に送信されそうな値を入れてみました。
予定どおりなら、SNS→SQSにメッセージが入る予定です。
受信されていました!
OKのようですので、デプロイしておきます。
GASからのAPI呼び出しと、LambdaからのTweet、DynamoDBはまた別のブログで書きます。
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。
i【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター3年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Rocket.ChatからOut Going Webhookを設定してみる
API GatewayとLambda とりあえず、どんなデータが飛んでくるのか見 …
-
-
Amazon Rekognitionでイベント参加者の顔写真を解析して似ている人ランキングをその場で作る
2017/9/21に開催されたAWS Cloud Roadshow 2017 大 …
-
-
ヤマムギ vol.7 AWSアカウント作成 & 最初の設定ハンズオン 手順
ヤマムギとは from Mitsuhiro Yamashita 「AWSではじめ …
-
-
Systems Manager セッションマネージャアクセスのCloud9(SSHなし)
作成画面 いつからできるようになっていたのか気づいてなかったのですが、Cloud …
-
-
「re:CAP ~サーバーワークス re:Invent 2018 報告会~」でre:Invent2018について思われたことを聞かせていただいた
サーバーワークスさんのre:Invent re:CAPにおじゃましました。 re …
-
-
AWSアカウント内のCloudWatchアラームを削除する
やりたいこと 特定アカウント特定リージョン内のCloudWatdchアラームを全 …
-
-
「AWSではじめるLinux入門ガイド 」を執筆しました
2020年4月30日に、「AWSではじめるLinux入門ガイド」という本を発行い …
-
-
RDSのスナップショットをS3へエクスポートが日本語マネジメントコンソールでもできるようになってました
RDSスナップショットをS3にエクスポートする新機能を試そうかと思ったのときは、 …
-
-
AWS Summit Tokyo 2017 Day3 開場~基調講演~Dev Day Night
AWS Summit Tokyo 2017 参加2日目のDay3です。 基調講演 …
-
-
AWS Systems Manager AutomationでEC2の自動停止
Systems Manager Automationがない時代に、Lambdaを …