ヤマムギ

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入門ガイド」という本を書きました。

【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。

【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」という本を書きました。

 - AWS , , ,

ad

ad

  関連記事

ヤマムギ vol.24 API GatewayでREST API作成と直接DynamoDB登録のデモをしました

2週間ぶりのヤマムギ勉強会デモなのでなんだか久しぶりな気がしました。 今日はポケ …

Amazon EC2のスクリーンショットとは

ドキュメント見てたらAmazon EC2でスクリーンショットって機能があったので …

再会の日 ~re:Union 2018 Osaka by JAWS-UG~

8/5は大阪でre:Unionでした。 「再会」と名うったこのイベントは、6月に …

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

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

AWS Organizationsからアカウントを新規作成してみて

AWS Organizationsでアカウントを新規作成することがありましたので …

AWS Summit 2016 Tokyoに参加してきました (Day2)

馬込は非常に良い天気です。 泊まっている部屋が2Fでしたので窓を明けると歩いてい …

AWS Code Commitをプライベートリポジトリとして使う

GitHubでもいいんですが、アクセスキーとかパスワードとかコンフィグ系で書いて …

AWS EC2 インスタンスステータスのチェックで失敗 原因はPHP-FPMのOOM-KILLER

先週に引き続きEC2のインスタンスステータスチェックで失敗 再起動するも失敗する …

EC2 セッションマネージャにEC2インスタンスの一覧から接続できるようになりました

EC2に接続する時に、どうしてもSSHクライアントから接続しないといけない場合を …

ハンズオン目的アカウントに設定しているSCPポリシー

AWS Organizationsでハンズオン目的のアカウントに設定しているSC …