ヤマムギ

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はまた別のブログで書きます。


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

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

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。

「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

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

 - AWS , , ,

  関連記事

EC2 Global Viewで不要なインスタンスを見つけて4つほど終了しました

EC2 Global Viewという機能がリリースされました。 EC2コンソール …

API Gatewayで顧客レベルの使用量プランを設定する

API GatewayのAPIキーを使って使用量プランでのスロットリングも設定し …

AWS Snowファミリーのジョブ作成画面を確認

使わないのですが、画面を見ておきたかったので確認しました。 Snowファミリージ …

SIEM on Amazon OpenSearch Serviceを構築

このブログまわりのモニタリングをSIEM on Amazon OpenSearc …

「最小限のコードで機械学習のためのトレーニングデータを準備する」チュートリアル記録

Amazon SageMaker Data Wranglerのチュートリアルをや …

スポットインスタンスの削減額情報を見ました

なんだこれ?と思って、検索してみたら、2018年11月からあったのですね。 Am …

AWS Lambdaで Unable to import module エラーが発生したときは

そもそも、Pycharmのナビゲーションペインでディレクトリごとドラッグ&amp …

CloudWatch Internet Monitor(プレビュー)を試しました

Amazon CloudWatch Internet Monitor プレビュー …

IAMユーザーにパスワード変更とMFA設定を許可する

組織管理のIAMで、ユーザーにMFAを使ってサインインしない限り操作は許可しない …

AtomエディタでEC2のファイルを直接編集する

Webページを編集していてEC2のファイルをvimエディタでさわったりしています …