AWS SQS + SNS + Lambda


11

SQS kuyruğuna bir mesaj gönderip gönderemediğimi ve e-posta göndermek için bir lambda'yı tetiklemek için bir SNS konusuna abone olup olamayacağımı merak ediyordum.

SQS -> SNS -> (Lambda) -> SES

SNS mesajlarının SQS'ye gönderilebileceğini biliyorum ama başka türlü mümkün olup olmadığını merak ediyorum

Yanıtlar:


11

Yaptığım bir şey SQS kuyruğu için ApproximateNumberOfMessagesVisible( >= 1 for 5 minutes) üzerinde bir CloudWatch alarmı oluşturmaktı . Alarm, lambda işlevini tetikleyen bir SNS konusuna yayınlar. Lambda işlevi kuyruğu temizleyene kadar döngü yapar.

Alarmın tetiklenmesi 5 dakika kadar sürebilir, ancak kuyruğu yoklandırmaya gerek kalmadan toplu olarak programlanan görevler için fevkalade çalışır. (Aktif kuyruklar için alarm ayrıntı düzeyi 5 dakikadır.)


Aynı şeyi yapmayı düşünüyorum. Cloudwatch sıranızı her kontrol ettiğinde ücretlendirilip ödenmediğinizi biliyor musunuz? Bu tür şeylerle sadece daha meraklı olan büyük paralardan bahsettiğimizden değil.
Brian F Leighty

Ayrıca, alarmın SNS'nin alarmı tekrar tekrar göndermeye devam ettiğini söylediğinizden mi varsayıyorum? Lambda fonksiyonunuzdaki zaman aşımı süreniz nedir?
Brian F Leighty

Bir başka şey. Tüm yorumlar için özür dilerim. "Yaklaşık" kısmı ile biraz endişeliydim hiç orada 1 madde yerine sadece 0 ürün olduğunu düşündüm beri ele alamadım bir mesaj vardı bir zaman vardı?
Brian F Leighty

@BrianFLeighty kontroller ücretsizdir. Ancak sürekli alarm vermez; kuyrukta oturan mesajlar için ikinci bir alarm gerekebilir (lambda yürütme tamamlanması ile sonraki alarm arasına eklenir). Yoklama daha iyi bir çözüm olabilir; benimki genellikle çok sessiz bir kuyruk için çalışır (bu nedenle yoklama değmez.)
squidpickles

"Yaklaşık" yorumu kaçırıldı. Bu iyi çalışıyor gibi görünüyor, ama ymmv
squidpickles

7

Gidemezsin SQS -> SNSsadece SNS -> SQS.

Lambda artık programlamayı destekliyor, bu yüzden bir seçenek bir Lambda fonksiyonunda bir SQS poller uygulamak ve sık sık çalıştırmaktır.

Dikkate almanız gereken başka bir seçenek de aslında bir kuyruğa ihtiyacınız olup olmadığıdır. Lambda, eşzamansız işlemeyi (Olay çağırma modu aracılığıyla) destekler ve paralel çağrıları ele almak için şeffaf olarak yatay olarak ölçeklendirilmelidir. Lambda işleviniz paralel yürütmeyi kısıtlayabilecek bir merkezi devlet deposuna erişim gerektirmiyorsa, muhtemelen tüm çağrılarınızı paralel olarak çalıştırabilirsiniz. Yine de hesap başına 100 eşzamanlı yürütme sınırı olduğuna inanıyorum, bu nedenle altında kalmak için mesajlarınızı toplu olarak değiştirmeniz gerekebilir.


3
lambda ile geleneksel sıra poller hileleri kullanmanın yanlış bir yanı da yoktur: örn. lambda yürütme sırasında bir mesajı ayıklarsa, sonunda işlevi geri alın; aksi halde planlandığı gibi çalıştırmasına izin ver
nik.shornikov

1

SQSkuyruk SNSkonuya abone olabilir ve böylece alınan SNSmesajları işlemek için . Şu anda, ek kodlama olmadan başka bir yönde yapılamaz (bkz. Örneğin LambdaSSS ).

Bunu yapmak için birkaç seçenek olduğunu söyleyebilirim, ancak daha yaygın olay odaklı sistem kullanmak kadar zarif değil AWS event->SQS->Lambda. Aksi takdirde, SQSkuyrukların işlenme biçimini özelleştirmeniz / uygulamanız gerekebilir :

  1. kendi etkinlik kaynaklarınızı uygulayabilirsiniz
  2. kuyrukları dinlemek ve ardından SQS olaylarını tetiklemek için bazı ara EC2 örneğiniz olabilirSQSLambda

0

Bu bir süre önce soruldu ve cevaplandı, ama bunu kendim düşündüm, bir yaklaşım ekleyeceğimi düşündüm.

Belirtildiği gibi, Etkinlik Kaynakları burada en iyi bahis olabilir. Alternatif olarak, bunu test etmedim ya da bunu düşünmedim (bu yüzden bu bir akademiktir), ancak bunu SNS ile bir Fan-Out modeli aracılığıyla aşağıdaki gibi yapmak mümkün olabilir:

 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

Bu yapılandırmayı kullanarak, SNS konusuna bir mesaj göndermek, eşzamanlı olarak bir Lambda işlevini tetiklerken SQS kuyruğuna sıralar. Bu Lambda işlevi, aynı SQS kuyruğunu okumak için yazılır, ancak Uzun Sorgulama etkinken (20 saniyeye kadar), böylece kuyruk tamamlanmadan kuyruğu okumaz (yani yarış durumu).

Özünde, bu şema tam zamanında her bir SQS mesajı için bir Lambda işlevi çağırır. Uzun Anket okuyucularının SQS üzerinde nasıl çalıştığını bilmiyorum (... biri düşüyor mu?), Ama bu sadece bunu çözmeyi düşünmenin başka bir yoludur. = :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.