ヤマムギ

growing hard days.

*

API GatewayからLambdaを介さずにSNSトピックへ送信

      2020/05/09


やりたいこと

APIリクエストをまずLambdaで受けて、SNSトピックへ送信するという処理をしています。
特に加工は必要ありません。
コードはPythonだとこんな感じです。

このLambdaなくてもいいんじゃ、と教えてもらったので試してみました。

こちらを目指します。

ライブ配信カレンダーのバックエンド処理向けに作成

何かで実装したほうが理解早まりそうなので、こちら「ライブ配信のカレンダーをGoogle Apps Scriptとかで作りました」のライブ配信カレンダーの機能拡張の一環として作成してみます。

こちらの記事を参考に作成しました。

SNSトピックの作成

マネジメントコンソールSNSでトピックを新規作成しました。

SQSキューの作成

マネジメントコンソールSQSでキューを新規作成しました。
まずデッドレターキュー(DLQ)用のキューを作成しました。

メッセージ保持期間のみ、14日に変更しました。
他はデフォルトのままです。

処理用のキューを新規作成しました。

とりあえずTwitter向けのキューを作成して、メッセージが受信できるまでを確認します。
先入れ先出しに厳密ではないし、1回以上Tweetされても全然いいので、標準キューで作成しました。

メッセージ保持期間を14日間、メッセージ受信待機時間(ロングポーリング)を20秒、事前に作成したDLQを設定しました。
再試行回数は5回にしました。

作成したキューを選択して、[キュー操作]-[SNSトピックへのキューのサブスクライブ]からサブスクリプションを作成しました。

事前に作成した、SNSトピックを選択しました。

IAMロールの作成

API Gatewayのメソッドに割り当てるIAMロールを作成しておきます。

AWSサービスロールで、API Gatewayを選択しました。

CloudWatch Logsへの書き込みポリシーがアタッチされてたいので、そのままにしました。

今回のワークロード向けとわかるタグにしておきました。

できました。

インラインポリシーを追加しておきました。

事前に作成したSNSトピックにパブリッシュできるポリシーにしました。

API Gatewayの作成

マネジメントコンソール API GatewayでREST APIの新規作成をしました。

LiveDeliveryという名前にしました。

リソースを作成しました。

live というリソースにしました。
CORSも有効にしておきました。

作成したliveリソースを選択してメソッドを作成しました。

AWSサービスを選択して、リージョン選択と、サービスはSNSを選択しました。
HTTPメソッドはPOSTで、アクションに”Publish”を入力しました。
事前に作成したIAMロールのARNを実行ロールに入力しました。

統合リクエストのURLクエリ文字列パラメータに、Messageと、TopicArnを設定しました。
TopicArnはシングルクォーテーションで囲むそうです。なるほど。

API Gatewayでテストをしてみます。

実際に送信されそうな値を入れてみました。

予定どおりなら、SNS→SQSにメッセージが入る予定です。

受信されていました!

OKのようですので、デプロイしておきます。

GASからのAPI呼び出しと、LambdaからのTweet、DynamoDBはまた別のブログで書きます。


最後までお読みいただきましてありがとうございました!

【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , , ,

ad

ad

  関連記事

ブログの画像を別アカウントのS3に移動するためにIAMロールでクロスアカウントアクセス

ずっと先延ばしにしていたのですが、このブログの画像はEC2から直接配信しています …

特定AWSアカウント特定リージョンのCloudFormationスタックを削除するLambda(Python)

やりたいこと 特定アカウント内特定リージョン内のCloudFormationスタ …

GoogleフォームからAPI Gatewayで作成したREST APIにPOSTリクエストする

「API GatewayからLambdaを介さずにSNSトピックへ送信」の続きで …

RedmineをELB(ALB)でAutoScalingグループへ負荷分散

高可用なRedmineを作るためのELBの設定です。 高可用なRedmine R …

JAWS FESTA 2017 Reverse X re:Birth

JAWS FESTA 2017 中四国 今年はブログタイトル「JAWS FEST …

Amazon Elasticsearch ServiceにMySQLのデータを投入してkibanaで可視化してみる

MySQLのデータの可視化にAmazon Elasticsearch Servi …

AWS CodeCommitのリポジトリをiPhoneのWorkingCopyアプリから使う

iPhoneからも執筆できるようにしておこうと思いまして、iOSアプリのGitク …

Amazon Linux にnodejsとmongoDBをインストールする

EPEL リポジトリを利用してnodejsとnpmをインストールする [bash …

Amazon CloudSearchからAmazon Elasticsearch Serviceへ変えました

全文検索をする必要がありまして、本当はCloudSearchを使い続けたいのです …

EC2 Auto Recovery機能を設定しておいた

以前EC2インスタンスのリタイア対象になったこともあり、というより、やっておいて …