AWS SQS + SNS +ラムダ


11

SQSキューにメッセージを送信し、SNSトピックをサブスクライブして、電子メールを送信するためのラムダをトリガーできるかどうか疑問に思っていました。

SQS-> SNS->(ラムダ)-> SES

SNSメッセージをSQSに送信できることは知っていますが、他の方法が可能かどうか興味があります

回答:


11

私がしたことの1つは、SQSキューのCloudWatchアラームをApproximateNumberOfMessagesVisible>= 1 for 5 minutes)に作成することでした。アラームは、ラムダ関数をトリガーするSNSトピックに公開します。ラムダ関数は、キューをクリアするまでループします。

アラームからトリガーするのに最大5分かかることがありますが、キューをポーリングする必要なしにバッチスケジュールされたタスクに対して素晴らしく機能します。(アクティブなキューのアラーム粒度は5分です。)


これとまったく同じことを考えています。cloudwatchがキューをチェックするたびに課金されるかどうか知っていますか?私たちがこの種のことをもっと好奇心をもって話しているわけではありません。
ブライアンF

また、私はあなたの言うことから、アラームが何度もアラームのSNSを送信し続けると仮定していますか?ラムダ関数のタイムアウトは何に設定されていますか?
ブライアンF

もう一つ。すべてのコメントでごめんなさい。「おおよそ」の部分に少し心配していましたが、そこには1つのアイテムではなく0のアイテムしかないと考えられていたので、そこで処理されないメッセージが待っていたことがありますか?
ブライアンF

@BrianFLeightyチェックは無料です。しかし、それは継続的に警告しません。キューにあるメッセージに2番目のアラームが必要になる場合があります(ラムダ実行完了と次のアラームの間に追加されます)。ポーリングがより良い解決策かもしれません。鉱山は通常非常に静かなキューで動作します(したがって、ポーリングする価値はありません。)
squidpickles

「概算」コメントを逃しました。それはうまくいくようですが、ymmv
squidpickles

7

行くことができないSQS -> SNSだけSNS -> SQSです。

Lambda はスケジューリングをサポートするようになったため、1つのオプションはLambda関数にSQSポーラーを実装して頻繁に実行することです。

考慮すべきもう1つのオプションは、実際にキューが必要かどうかです。Lambdaは非同期処理(イベント呼び出しモード経由)をサポートしており、透過的に水平方向にスケーリングして並列呼び出しを処理する必要があります。ラムダ関数が、並列実行を制限する可能性のある中央状態ストアへのアクセスを必要としない場合、おそらくすべての呼び出しを並列で実行できます。ただし、アカウントごとに100の同時実行制限があると思われるので、その下に留まるにはメッセージをバッチ処理する必要があります。


3
また、ラムダで従来のキューポーラートリックを使用しても問題はありません。たとえば、ラムダが実行中にメッセージをデキューした場合、最後に関数を再トリガーします。それ以外の場合は、スケジュールどおりに次に実行します
nik.shornikov

1

SQSキューはSNSトピックにサブスクライブできるため、受信したSNSメッセージを処理できます。現在、追加のコーディングなしでは他の方向に実行できません(LambdaFAQを参照)。

方法はいくつかありますが、より一般的なイベント駆動型システムを使用するほどエレガントではありませんAWS event->SQS->Lambda。そうでない場合は、SQSキューの処理方法をカスタマイズ/実装する必要があります。

  1. 独自のイベントソースを実装できます
  2. キューをリッスンしてからSQSイベントでトリガーする中間EC2インスタンスを持つことができますSQSLambda

0

これは少し前に尋ねられて答えられましたが、これについて自分で考えたので、アプローチを追加すると思いました。

前述のとおり、ここではイベントソースが最善の策である可能性があります。あるいは、これをテストしたことも考えていませんでした(したがって、これは一種のアカデミックです)。

 1. Create a SNS topic.............................: SNS-topic-01
 2. Subscribe a SQS queue to that topic............: SQS-queue-01
 3. Subscribe a Lambda Function to that topic......: LAMBDA-func-01

この構成を使用して、SNSトピックにメッセージを送信すると、SQSキューにメッセージがキューイングされ、同時にコンパニオンLambda関数がトリガーされます。そのLambda関数は、非常に同じSQSキューを読み取るように書き込まれますが、ロングポーリングが有効になっている(最大20秒)ため、エンキューが完了する前にキューを読み取らない(つまり、競合状態)。

本質的に、このスキームはジャストインタイムで、エンキューされたSQSメッセージごとに1つのLambda関数を呼び出します。同時のロングポールリーダーがSQSでどのように機能するかわかりません(...削除されますか?)が、これはこれを解決することを検討する別の方法です。= :)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.