API GatewayからLambdaを介さずにSNSトピックへ送信
2020/05/09
目次
やりたいこと
APIリクエストをまずLambdaで受けて、SNSトピックへ送信するという処理をしています。
特に加工は必要ありません。
コードはPythonだとこんな感じです。
この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への書き込みポリシーがアタッチされてたいので、そのままにしました。
今回のワークロード向けとわかるタグにしておきました。
できました。
インラインポリシーを追加しておきました。
事前に作成した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入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Amazon SESでメール受信
Amazon SES(Simple Email Service)にメールドメイン …
-
-
AWS Lambda(Python)からAmazon Connectで電話を発信する
自動で電話を発信する必要がありまして、電話発信APIを開発することになりましたの …
-
-
Lucidchart AWSアカウントからインポート機能で自動作図
SNSでLucidchartというサービスが話題になってました。 AWSの環境を …
-
-
AWS Organizations SCPで許可ポリシーの設定をし継承の関係を確認する
ユーザーガイドのサービスコントロールポリシーの例にはDeny(拒否)ばっかりでA …
-
-
AWS CodeCommit 認証情報ヘルパーをmacOSに設定しました
AWS CLI 認証情報ヘルパーを使用して Linux, macOS, or U …
-
-
RDSの証明書をrds-ca-2019に更新しました
クライアント接続で署名書使ってないので、必要ないのですが、古いままなのも気持ち悪 …
-
-
スポットインスタンスの削減額情報を見ました
なんだこれ?と思って、検索してみたら、2018年11月からあったのですね。 Am …
-
-
AWSセルフマネージドAD環境にEC2 Windowsサーバーをドメイン参加する
AWSクイックスタートのActive Directory Domain Serv …
-
-
EC2 VyOSで/etc/resolv.confを設定しました
EC2でVyOSを起動してSSHで接続して確認していたところ、どうもVyOSから …
-
-
ALBのヘルスチェックでPHPとMySQL接続をチェック
当ブログで504エラーが発生して、オートスケーリングにより自動でインスタンスが置 …