ヤマムギ

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認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

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

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

 - AWS , , ,

ad

ad

  関連記事

AWS Organizationsでタグポリシーを設定しようとしました

Organizationsで[タグポリシーを有効にする]ボタンを押下しました。 …

iPad ProのWorking CopyでAWS CodeCommitのリポジトリを使う

iPad Proを導入しましたので、原稿執筆や校正でフル活用しようと思いまして。 …

RocketChatの匿名登録時のtoo many requestsエラー対応

匿名ユーザー登録時のtoo many requestsエラー RocketCha …

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

やりたいこと 特定アカウント内特定リージョン内のSNSトピックを全部削除したいで …

Amazon Pinpoint Workshopの1(Eメール)

Amazon Pinpoint Workshop ここ数年、AWS re:Inv …

プライベートサブネットのEC2でセッションマネージャを使うようVPCエンドポイントを構成する

インターネットゲートウェイへのルートがないルートテーブルに関連付けられたプライベ …

別アカウントのVPCからAWS PrivateLinkを使う

VPC エンドポイントサービス (AWS PrivateLink)を参考にしまし …

AWS DeepLensセットアップの儀

AWS DeepLensのセットアップを開始します。 AWS DeepLensを …

AWS コスト最適化ハブを有効にしました

新しいコスト最適化ハブは、推奨アクションを一元化してコストを節約します 2023 …

RDSの証明書をrds-ca-2019に更新しました

クライアント接続で署名書使ってないので、必要ないのですが、古いままなのも気持ち悪 …