SQS-berichtenfiltering en SNS- plus SQS-integratie
Pas SNS-subscription filter policies toe, zodat elke SQS-consumer alleen de berichten ontvangt die relevant zijn en onnodige verwerking wordt verminderd.
SQS-berichtenfiltering en SNS- plus SQS-integratie is een gratis Cloud & IT Cert Prep-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Cloud & IT Cert Prep. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Cloud & IT Cert Prep bevat in totaal 4 lessen.
Het probleem zonder filtering
In een fan-outarchitectuur zonder filtering ontvangt elke SQS-abonnee elk SNS-bericht. Als je topic bestelgebeurtenissen voor tien verschillende productcategorieën publiceert, maar een abonnee alleen bestellingen van elektronica verwerkt, ontvangt en moet deze nog steeds berichten over voedsel en kleding weggooien. Dit verspilt rekenkracht, verhoogt de kosten en zorgt voor onnodige belasting van consumenten. Filterbeleid voor SNS-abonnementen lost dit op doordat SNS de berichten zelf alleen naar de juiste abonnees routeert.
Hoe SNS-filterbeleid werkt
Een filterbeleid is een JSON-object dat op een SQS- of Lambda-abonnement wordt toegepast. SNS evalueert het beleid voor elk bericht aan de hand van de berichtkenmerken, voordat het bericht wordt afgeleverd. Als de berichtkenmerken overeenkomen met het filterbeleid, wordt het bericht afgeleverd. Zo niet, dan slaat SNS die abonnee stilletjes over. Filterbeleid ondersteunt het vergelijken van tekenreeksen, numerieke bereiken, voorvoegselvergelijking en de operator exists om te controleren of een kenmerk aanwezig of afwezig is.
# Filter policy: only deliver ELECTRONICS orders from US or EU
{
'category': ['ELECTRONICS'],
'region': ['US', 'EU'],
'amount': [{'numeric': ['>=', 100]}]
}Bereik van filterbeleid: berichtkenmerken versus hoofdtekst
Standaard worden filterbeleid toegepast op berichtkenmerken (metagegevens). Sinds 2023 ondersteunt SNS ook filtering op basis van de nettolading (hoofdtekst) door het bereik van het filterbeleid in te stellen op MessageBody. Hierdoor kun je rechtstreeks op basis van JSON-paden in de hoofdtekst filteren, zonder dat publishers kenmerken hoeven toe te voegen. Filtering op de hoofdtekst is flexibeler, maar vereist wel dat de hoofdtekst geldige JSON bevat. Controleer altijd welk bereik overeenkomt met de indeling van de uitvoer van je publisher.
# Set filter scope to MessageBody
aws sns set-subscription-attributes \
--subscription-arn 'arn:aws:sns:...' \
--attribute-name FilterPolicyScope \
--attribute-value MessageBody
aws sns set-subscription-attributes \
--subscription-arn 'arn:aws:sns:...' \
--attribute-name FilterPolicy \
--attribute-value '{"category": ["ELECTRONICS"]}'Numerieke en voorvoegselfilters
Filterbeleid ondersteunt naast eenvoudige gelijkheid van tekenreeksen meerdere vergelijkingsoperatoren:
- Numeriek:
{"numeric": ["=", 100]},{"numeric": [">", 50, "<=", 200]} - Voorvoegsel:
{"prefix": "order-"}komt overeen met elke tekenreeks die met dat voorvoegsel begint - Alles behalve:
{"anything-but": ["CANCELLED"]}komt overeen met elke waarde behalve de vermelde waarden - Bestaat:
{"exists": true}komt overeen als het kenmerk aanwezig is;falseals het ontbreekt
Berichten met kenmerken publiceren voor filtering
Om filtering te laten werken, moet de publisher berichtkenmerken opnemen bij het publiceren naar SNS. Kenmerken zijn sleutel-waardeparen met een gegevenstype (String, Number, Binary). De publisher hoeft niet te weten welke abonnees welk filterbeleid hebben. Hij verrijkt het bericht alleen met kenmerken die de gebeurtenis beschrijven. SNS handelt de routering automatisch af. Zo blijven publishers volledig ontkoppeld van logica die specifiek is voor abonnees.
aws sns publish \
--topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderTopic' \
--message '{"orderId": "789", "total": 250.00}' \
--message-attributes '{
"category": {"DataType": "String", "StringValue": "ELECTRONICS"},
"region": {"DataType": "String", "StringValue": "US"},
"amount": {"DataType": "Number", "StringValue": "250"}
}'Fan-out over meerdere lagen: SNS + meerdere SQS-wachtrijen
Een geavanceerde fan-outtopologie kan bestaan uit SNS dat naar SQS-wachtrijen met verschillende specificiteitsniveaus routeert: één wachtrij ontvangt alle bestellingen (zonder filter) voor controle, een andere ontvangt alleen bestellingen met hoge waarde (bedrag >= 1000) voor fraudebeoordeling en een derde ontvangt alleen bestellingen van elektronica voor het elektronicamagazijn. Elke SQS-wachtrij heeft zijn eigen Lambda-consument. Dit patroon maakt het mogelijk elke verwerkingslaag onafhankelijk te schalen en nieuwe consumenten toe te voegen zonder bestaande consumenten of de publisher aan te passen.
SNS- naar SQS-aflevering tussen AWS-accounts
SNS kan berichten afleveren aan SQS-wachtrijen in een ander AWS-account. Het resourcebeleid van de SQS-wachtrij moet de service-principal van SNS toestaan om sqs:SendMessage aan te roepen met de ARN van het SNS-topic in het publisheraccount. Hierdoor kun je centraal gebeurtenissen publiceren (één account publiceert en teams uit meerdere accounts abonneren zich) zonder referenties te delen. Fan-out tussen accounts is een veelgebruikt patroon in omgevingen met meerdere AWS Organizations-accounts.
# SQS queue policy to allow cross-account SNS delivery
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {'Service': 'sns.amazonaws.com'},
'Action': 'sqs:SendMessage',
'Resource': 'arn:aws:sqs:us-east-1:CONSUMER_ACCOUNT:MyQueue',
'Condition': {
'ArnEquals': {'aws:SourceArn': 'arn:aws:sns:us-east-1:PUBLISHER_ACCOUNT:MyTopic'}
}
}]
}SQS als buffer vóór Lambda
Wanneer het gebeurtenisvolume piekt, schalen directe SNS-naar-Lambda-aanroepen Lambda onmiddellijk op. Daardoor kunnen achterliggende databases of API's overbelast raken. Door SQS tussen SNS en Lambda te plaatsen, maak je een buffer: SNS levert berichten af aan SQS en Lambda haalt ze op in een gecontroleerde batchgrootte. Zo kan Lambda in een duurzaam tempo verwerken, terwijl SQS verkeerspieken opvangt. De diepte van de wachtrij werkt als mechanisme voor terugdruk: je kunt deze controleren en een waarschuwing instellen wanneer de diepte boven een drempel groeit, wat op een achterlopende consument wijst.
Directe Lambda-fan-out vergelijken met fan-out met SQS-buffer
SNS → Lambda (direct): de laagste latentie, geen buffering en Lambda schaalt onmiddellijk. Dit is het meest geschikt voor realtimewaarschuwingen of dringende meldingen waarbij een latentie van minder dan een seconde belangrijk is. SNS → SQS → Lambda: biedt ondersteuning voor een DLQ, gecontroleerde verwerkingscapaciteit, nieuwe pogingen met een zichtbaarheidstime-out en controle van de wachtrijdiepte. Dit is het meest geschikt voor transactieverwerking, voorraadupdates en elk scenario waarin achterliggende limieten moeten worden gerespecteerd. Kies bij examenvragen voor buffering met SQS zodra duurzaamheid en snelheidsregeling worden genoemd.
Filterbeleid testen
Gebruik de editor voor filterbeleid in de SNS-console om te testen of een voorbeeldbericht overeenkomt met je filterbeleid voordat je het implementeert. Je kunt ook de SNS Sandbox gebruiken om berichtbezorging te simuleren en de routering te controleren. Valideer filterbeleid in code door testberichten met bekende kenmerken te publiceren en de CloudWatch-statistieken voor elke abonnement te controleren: de statistiek NumberOfMessagesFiltered toont hoeveel berichten door het filter zijn geblokkeerd. Zo kun je beleid bijstellen zonder op productiegebeurtenissen te wachten.
Samenvatting van de end-to-endintegratie
Een volledige SNS + SQS-integratie ziet er als volgt uit: (1) de applicatie publiceert een gebeurtenis naar een SNS Standard-topic met berichtkenmerken; (2) SNS evalueert het filterbeleid van elk abonnement en bezorgt alleen overeenkomende berichten aan elke SQS-wachtrij; (3) Lambda peilt elke SQS-wachtrij met een geconfigureerde batchgrootte en verwerkt berichten; (4) mislukte berichten komen na maxReceiveCount in de DLQ terecht; (5) een CloudWatch-alarm voor de DLQ-lengte waarschuwt het team. Dit volledig ontkoppelde, veerkrachtige patroon is een modelarchitectuur voor SAA-C03.
Korte controle
Test je begrip van de AWS Solutions Architect-concepten (SAA-C03) uit deze les.
Samenvatting van de les
In deze les heb je geleerd dat SNS-filterbeleid berichten op SNS-niveau routeert op basis van berichtkenmerken of de inhoud van de berichttekst, waardoor onnodige verwerking door downstream-consumenten wordt geëlimineerd; dat het patroon SNS→SQS→Lambda duurzame buffering en snelheidsregeling toevoegt tussen het uitzenden naar meerdere ontvangers en de verwerking; en dat SQS-bezorging tussen accounts gecentraliseerde pub/sub mogelijk maakt in omgevingen met meerdere accounts door wachtrijbronbeleid te gebruiken. Hierna verkennen we de REST-, HTTP- en WebSocket-API's van Amazon API Gateway.
Leer Cloud & IT Cert Prep met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 150
- Lessen
- 600
Veelgestelde vragen
Is de les “SQS-berichtenfiltering en SNS- plus SQS-integratie” gratis?
Ja — de volledige tekst van “SQS-berichtenfiltering en SNS- plus SQS-integratie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Cloud & IT Cert Prep wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Cloud & IT Cert Prep bevat in totaal 4 lessen.
Wat leer ik in “SQS-berichtenfiltering en SNS- plus SQS-integratie”?
Pas SNS-subscription filter policies toe, zodat elke SQS-consumer alleen de berichten ontvangt die relevant zijn en onnodige verwerking wordt verminderd. Je oefent met Cloud & IT Cert Prep door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Cloud & IT Cert Prep te beginnen?
Ervaring vooraf is niet nodig. Cloud & IT Cert Prep op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “SQS-berichtenfiltering en SNS- plus SQS-integratie”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Cloud & IT Cert Prep?
Ja. Elke les over Cloud & IT Cert Prep bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- SQS Standard- versus FIFO-queues
- Visibility timeout, DLQ en long polling
- SNS-topics en fan-outarchitectuur
- SQS-berichtenfiltering en SNS- plus SQS-integratie