SQS-meddelandefiltrering och SNS + SQS-integration
Tillämpa filterpolicyer för SNS-prenumerationer så att varje SQS-konsument endast tar emot de meddelanden den behöver, vilket minskar onödig bearbetning.
SQS-meddelandefiltrering och SNS + SQS-integration är en gratis lektion i Cloud & IT Cert Prep på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Cloud & IT Cert Prep, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.
Problemet utan filtrering
I en fan-out-arkitektur utan filtrering tar varje SQS-prenumerant emot varje SNS-meddelande. Om ert topic publicerar orderhändelser för tio olika produktkategorier men en prenumerant endast bearbetar elektronikorder, tar den ändå emot och måste kasta mat- och klädmeddelanden. Detta slösar beräkningsresurser, ökar kostnaderna och belastar konsumenterna i onödan. Filterregler för SNS-prenumerationer löser detta genom att låta SNS själv dirigera meddelanden endast till lämpliga prenumeranter.
Så fungerar SNS-filterregler
En filterregel är ett JSON-objekt som tillämpas på en SQS- eller Lambda-prenumeration. SNS utvärderar regeln mot varje meddelandes meddelandeattribut innan leverans. Om meddelandeattributen matchar filterregeln levereras meddelandet. Om de inte gör det hoppar SNS tyst över den prenumeranten. Filterregler stöder strängmatchning, numeriska intervall, prefixmatchning och operatorn exists för att kontrollera om ett attribut finns eller saknas.
# Filter policy: only deliver ELECTRONICS orders from US or EU
{
'category': ['ELECTRONICS'],
'region': ['US', 'EU'],
'amount': [{'numeric': ['>=', 100]}]
}Filterregelns omfattning: meddelandeattribut eller meddelandetext
Som standard matchar filterregler mot meddelandeattribut (metadata). Sedan 2023 stöder SNS även nyttolastbaserad filtrering (meddelandetext) genom att ange regelns omfattning till MessageBody. Det gör det möjligt att filtrera direkt i meddelandetexten med JSON-sökvägar, utan att producenter behöver lägga till attribut. Filtrering av meddelandetext är mer flexibel, men kräver att meddelandetexten är giltig JSON. Kontrollera alltid vilken omfattning som överensstämmer med producentens utdataformat.
# 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"]}'Numeriska filtervillkor och prefixvillkor
Filterregler stöder flera matchningsoperatorer utöver enkel stränglikhet:
- Numeriskt:
{"numeric": ["=", 100]},{"numeric": [">", 50, "<=", 200]} - Prefix:
{"prefix": "order-"}matchar alla strängar som börjar med det prefixet - Anything-but:
{"anything-but": ["CANCELLED"]}matchar alla värden utom de angivna - Exists:
{"exists": true}matchar om attributet finns, ochfalseom det saknas
Publicera meddelanden med attribut för filtrering
För att filtrering ska fungera måste producenten inkludera meddelandeattribut vid publicering till SNS. Attribut är nyckel-värde-par med en datatyp (String, Number, Binary). Producenten behöver inte känna till vilka prenumeranter som har vilka filterregler – den berikar bara meddelandet med attribut som beskriver händelsen. SNS hanterar dirigeringen automatiskt. På så sätt förblir producenterna helt frikopplade från prenumerantspecifik logik.
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 i flera nivåer: SNS + flera SQS
En avancerad fan-out-topologi kan ha SNS som dirigerar till SQS-köer med olika grad av specificitet: en kö tar emot alla ordrar (inget filter) för granskning, en annan tar endast emot ordrar med högt värde (amount >= 1000) för bedrägerigranskning, och en tredje tar endast emot ELECTRONICS-order för elektroniklagret. Varje SQS-kö har en egen Lambda-konsument. Mönstret gör att varje bearbetningsnivå kan skalas oberoende och att nya konsumenter kan läggas till utan att befintliga konsumenter eller producenten ändras.
Leverans från SNS till SQS mellan AWS-konton
SNS kan leverera till SQS-köer i ett annat AWS-konto. SQS-köns resursbaserade policy måste tillåta SNS-tjänsteprincipen att anropa sqs:SendMessage från ARN:en för SNS-topicet i det publicerande kontot. Detta möjliggör centraliserad publicering av händelser (ett konto publicerar och flera kontoteam prenumererar) utan att autentiseringsuppgifter delas. Fan-out mellan konton är ett vanligt mönster i AWS Organizations-miljöer med flera konton.
# 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 som buffert före Lambda
När händelsevolymen ökar kraftigt skalar direkta SNS-till-Lambda-anrop Lambda omedelbart, vilket kan överbelasta nedströmsdatabaser eller API:er. Genom att lägga till SQS mellan SNS och Lambda skapas en buffert: SNS levererar till SQS och Lambda läser av SQS med en kontrollerad batchstorlek. Det gör att Lambda kan bearbeta meddelanden i en hållbar takt medan SQS absorberar trafiktoppar. Köns djup fungerar som en mekanism för att skapa mottryck – ni kan övervaka det och utlösa en avisering när det växer över ett tröskelvärde som visar att konsumenten släpar efter.
Jämförelse mellan direkt Lambda och buffrad fan-out med SQS
SNS → Lambda (direkt): lägsta fördröjning, ingen buffring och Lambda skalas omedelbart. Bäst för aviseringar i realtid eller brådskande meddelanden där fördröjning under en sekund är viktig. SNS → SQS → Lambda: ger stöd för DLQ, kontrollerad genomströmning, nya försök med visibility timeout och övervakning av köns djup. Bäst för transaktionsbearbetning, lageruppdateringar och alla scenarier där nedströmsbegränsningar måste respekteras. I provfrågor väljer ni SQS-buffring när beständighet och hastighetskontroll nämns.
Testa filterprinciper
Använd SNS-konsolens redigerare för filterprinciper för att testa om ett exempelmeddelande skulle matcha filterprincipen innan den distribueras. Ni kan också använda SNS Sandbox för att simulera meddelandeleverans och verifiera routningen. I kod validerar ni filterprinciper genom att publicera testmeddelanden med kända attribut och kontrollera CloudWatch-mått för varje prenumeration: måttet NumberOfMessagesFiltered visar hur många meddelanden som blockerades av filtret, vilket hjälper er att finjustera principerna utan att behöva vänta på händelser i produktionen.
Sammanfattning av integrationen från början till slut
En fullständig SNS + SQS-integration ser ut så här: (1) Applikationen publicerar en händelse till ett SNS Standard topic med meddelandeattribut; (2) SNS utvärderar varje prenumerations filterprincip och levererar endast matchande meddelanden till respektive SQS-kö; (3) Lambda hämtar meddelanden från varje SQS-kö med en konfigurerad batchstorlek och bearbetar dem; (4) Misslyckade meddelanden når köns DLQ efter maxReceiveCount; (5) ett CloudWatch-alarm för DLQ-djupet meddelar teamet. Det här helt frikopplade och motståndskraftiga mönstret är en modellarkitektur för SAA-C03.
Snabbtest
Testa era kunskaper om AWS Solutions Architect-koncepten (SAA-C03) från den här lektionen.
Sammanfattning av lektionen
I den här lektionen har ni lärt er att SNS-filterprinciper routar meddelanden baserat på meddelandeattribut eller innehåll på meddelandenivå i SNS, vilket eliminerar onödig bearbetning hos nedströmskonsumenter, att mönstret SNS→SQS→Lambda lägger till beständig buffring och hastighetsreglering mellan utsändning till flera mottagare och bearbetning, samt att leverans av SQS-meddelanden mellan konton möjliggör centraliserad pub/sub i miljöer med flera konton genom att använda resursprinciper för köer. Härnäst utforskar vi REST-, HTTP- och WebSocket-API:er i Amazon API Gateway.
Lär dig Cloud & IT Cert Prep med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 150
- Lektioner
- 600
Vanliga frågor
Är lektionen ”SQS-meddelandefiltrering och SNS + SQS-integration” gratis?
Ja – hela texten till ”SQS-meddelandefiltrering och SNS + SQS-integration” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Cloud & IT Cert Prep, kan Ni uppgradera till CoddyKit PRO. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.
Vad lär jag mig i ”SQS-meddelandefiltrering och SNS + SQS-integration”?
Tillämpa filterpolicyer för SNS-prenumerationer så att varje SQS-konsument endast tar emot de meddelanden den behöver, vilket minskar onödig bearbetning. Ni övar på Cloud & IT Cert Prep med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Cloud & IT Cert Prep?
Du behöver inga förkunskaper. Utbildningen i Cloud & IT Cert Prep på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”SQS-meddelandefiltrering och SNS + SQS-integration”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Cloud & IT Cert Prep-lektionen?
Ja. Varje Cloud & IT Cert Prep-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- SQS Standard jämfört med FIFO-köer
- Synlighetstimeout, DLQ och långfrågning
- SNS-ämnen och fan-out-arkitektur
- SQS-meddelandefiltrering och SNS + SQS-integration