SQS-meldingsfiltrering og SNS + SQS-integrasjon
Bruk filterpolicyer for SNS-abonnementer slik at hver SQS-forbruker bare mottar meldingene den trenger, og reduser unødvendig behandling.
SQS-meldingsfiltrering og SNS + SQS-integrasjon er en gratis leksjon i Cloud & IT Cert Prep på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Cloud & IT Cert Prep, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Cloud & IT Cert Prep inneholder totalt 4 leksjoner.
Problemet uten filtrering
I en fan-out-arkitektur uten filtrering mottar hver SQS-abonnent alle SNS-meldinger. Hvis emnet publiserer ordrehendelser for ti ulike produktkategorier, men en abonnent bare behandler elektronikkordrer, mottar den likevel meldinger om mat og klær som den må forkaste. Dette sløser med databehandlingsressurser, øker kostnadene og legger unødvendig belastning på konsumentene. Filterpolicyer for SNS-abonnementer løser dette ved at SNS selv ruter meldinger bare til de riktige abonnentene.
Slik fungerer SNS-filterpolicyer
En filterpolicy er et JSON-objekt som brukes på et SQS- eller Lambda-abonnement. SNS evaluerer policyen mot hver meldings meldingsegenskaper før levering. Hvis meldingsegenskapene samsvarer med filterpolicyen, leveres meldingen; hvis ikke, hopper SNS over abonnenten uten å varsle. Filterpolicyer støtter strengsamsvar, numeriske intervaller, prefikssamsvar og operatoren exists for å kontrollere om en egenskap finnes eller mangler.
# Filter policy: only deliver ELECTRONICS orders from US or EU
{
'category': ['ELECTRONICS'],
'region': ['US', 'EU'],
'amount': [{'numeric': ['>=', 100]}]
}Omfang for filterpolicyer: meldingsegenskaper kontra meldingstekst
Som standard samsvarer filterpolicyer med meldingsegenskaper (metadata). Siden 2023 støtter SNS også nyttelastbasert filtrering (meldingstekst) ved at De setter omfanget for filterpolicyen til MessageBody. Dette gjør det mulig å filtrere direkte på meldingsteksten basert på JSON-stier, uten at utgivere må legge til egenskaper. Filtrering av meldingstekst er mer fleksibel, men krever at meldingsteksten er gyldig JSON. Bekreft alltid hvilket omfang som samsvarer med utgiverens 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"]}'Numeriske filterbetingelser og prefiksbetingelser
Filterpolicyer støtter flere samsvarsoperatorer utover enkelt strenglikhet:
- Numerisk:
{"numeric": ["=", 100]},{"numeric": [">", 50, "<=", 200]} - Prefiks:
{"prefix": "order-"}samsvarer med alle strenger som begynner med dette prefikset - Anything-but:
{"anything-but": ["CANCELLED"]}samsvarer med alle verdier unntatt de oppførte - Exists:
{"exists": true}samsvarer hvis egenskapen finnes;falsehvis den mangler
Publisering av meldinger med egenskaper for filtrering
For at filtrering skal fungere, må utgiveren inkludere meldingsegenskaper ved publisering til SNS. Egenskaper er nøkkel-verdi-par med en datatype (String, Number, Binary). Utgiveren trenger ikke å vite hvilke filterpolicyer abonnentene har – den beriker bare meldingen med egenskaper som beskriver hendelsen. SNS håndterer rutingen automatisk. Dermed forblir utgiverne fullstendig frikoblet fra abonnentspesifikk logikk.
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 med flere nivåer: SNS + flere SQS-køer
En avansert fan-out-topologi kan ha SNS som ruter til SQS-køer på flere spesifisitetsnivåer: én kø mottar alle ordrer (uten filter) for revisjon, en annen mottar bare ordrer med høy verdi (beløp >= 1000) for svindelkontroll, og en tredje mottar bare ELEKTRONICS-ordrer for elektronikkvarehuset. Hver SQS-kø har sin egen Lambda-konsument. Dette mønsteret skalerer hvert behandlingstrinn uavhengig og gjør det mulig å legge til nye konsumenter uten å endre eksisterende konsumenter eller utgiveren.
Levering på tvers av AWS-kontoer fra SNS til SQS
SNS kan levere til SQS-køer i en annen AWS-konto. SQS-køens ressursbaserte policy må tillate at SNS-tjenestens principal kaller sqs:SendMessage fra ARN-en til SNS-emnet i publiseringskontoen. Dette muliggjør sentralisert publisering av hendelser (én konto publiserer, flere kontoteam abonnerer) uten deling av legitimasjon. Fan-out på tvers av kontoer er et vanlig mønster i AWS Organizations-oppsett med flere kontoer.
# 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 buffer før Lambda
Når hendelsesvolumet øker kraftig, skalerer direkte SNS-til-Lambda-påkallinger Lambda umiddelbart, noe som potensielt kan overbelaste nedstrøms databaser eller API-er. Ved å legge SQS mellom SNS og Lambda opprettes en buffer: SNS leverer til SQS, og Lambda henter meldinger fra SQS med en kontrollert batchstørrelse. Dermed kan Lambda behandle meldinger i et bærekraftig tempo, mens SQS absorberer trafikktopper. Kødybden fungerer som en mekanisme for å regulere belastningen – De kan overvåke den og varsle når den vokser forbi en terskel som viser at konsumenten ligger etter.
Sammenligning av direkte Lambda og fan-out med SQS-buffer
SNS → Lambda (direkte): lavest forsinkelse, ingen buffering, Lambda skalerer umiddelbart. Best egnet for sanntidsvarsler eller viktige varslinger der forsinkelse under ett sekund er avgjørende. SNS → SQS → Lambda: gir støtte for DLQ, kontrollert gjennomstrømming, nye forsøk med synlighetstidsavbrudd og overvåking av kødybde. Best egnet for transaksjonsbehandling, lageroppdateringer og alle scenarier der nedstrøms begrensninger må respekteres. I eksamensoppgaver bør De velge SQS-buffering når varighet og hastighetskontroll nevnes.
Testing av filterpolicyer
Bruk SNS-konsollens redigeringsverktøy for filterpolicyer til å teste om en eksempelmelding samsvarer med filterpolicyen før du distribuerer den. Du kan også bruke SNS Sandbox til å simulere meldingslevering og bekrefte rutingen. I kode kan du validere filterpolicyer ved å publisere testmeldinger med kjente attributter og kontrollere CloudWatch-metrikker for hvert abonnement: Metrikken NumberOfMessagesFiltered viser hvor mange meldinger som ble blokkert av filteret, slik at du kan finjustere policyene uten å vente på hendelser i produksjon.
Sammendrag av ende-til-ende-integrasjon
En komplett SNS + SQS-integrasjon ser slik ut: (1) Applikasjonen publiserer en hendelse til et SNS Standard topic med meldingsattributter; (2) SNS evaluerer hver abonnements filterpolicy og leverer bare samsvarende meldinger til hver SQS-kø; (3) Lambda henter meldinger fra hver SQS-kø med en konfigurert batchstørrelse og behandler dem; (4) Mislykkede meldinger når køens DLQ etter maxReceiveCount; (5) et CloudWatch-alarm for antall meldinger i DLQ varsler teamet. Dette fullstendig frakoblede og robuste mønsteret er en modellarkitektur for SAA-C03.
Hurtigsjekk
Test forståelsen Deres av AWS Solutions Architect-konsepter (SAA-C03) fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen har De lært at SNS-filterpolicyer ruter meldinger basert på meldingsattributter eller innholdet i meldingen på SNS-nivå, slik at unødvendig behandling hos nedstrømsforbrukere unngås; mønsteret SNS→SQS→Lambda tilfører robust buffering og hastighetskontroll mellom kringkasting til flere mottakere og behandling; og SQS-levering på tvers av kontoer muliggjør sentralisert pub/sub i miljøer med flere kontoer ved hjelp av ressursbaserte køpolicyer. Deretter skal vi se nærmere på REST-, HTTP- og WebSocket-API-er i Amazon API Gateway.
Lær deg Cloud & IT Cert Prep med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 150
- Leksjoner
- 600
Ofte stilte spørsmål
Er leksjonen «SQS-meldingsfiltrering og SNS + SQS-integrasjon» gratis?
Ja – hele teksten i «SQS-meldingsfiltrering og SNS + SQS-integrasjon» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Cloud & IT Cert Prep-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Cloud & IT Cert Prep inneholder totalt 4 leksjoner.
Hva lærer jeg i «SQS-meldingsfiltrering og SNS + SQS-integrasjon»?
Bruk filterpolicyer for SNS-abonnementer slik at hver SQS-forbruker bare mottar meldingene den trenger, og reduser unødvendig behandling. Du øver på Cloud & IT Cert Prep med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Cloud & IT Cert Prep?
Ingen tidligere erfaring er nødvendig. Cloud & IT Cert Prep på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «SQS-meldingsfiltrering og SNS + SQS-integrasjon»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Cloud & IT Cert Prep-leksjonen?
Ja. Alle Cloud & IT Cert Prep-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- SQS Standard- vs FIFO-køer
- Synlighetstidsavbrudd, DLQ og long polling
- SNS-emner og fan-out-arkitektur
- SQS-meldingsfiltrering og SNS + SQS-integrasjon