SQS-viestien suodatus ja SNS–SQS-integraatio
Sovellatte SNS-tilausten suodatinkäytäntöjä, jotta kukin SQS-kuluttaja vastaanottaa vain tarvitsemansa viestit ja turha käsittely vähenee.
SQS-viestien suodatus ja SNS–SQS-integraatio on ilmainen Cloud & IT Cert Prep-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Cloud & IT Cert Prep-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.
Suodattamattoman ratkaisun ongelma
Fan-out-arkkitehtuurissa ilman suodatusta jokainen SQS-tilaaja vastaanottaa jokaisen SNS-viestin. Jos aihe julkaisee tilaustapahtumia kymmenestä eri tuoteryhmästä mutta tilaaja käsittelee vain elektroniikkatilauksia, se vastaanottaa silti ruoka- ja vaatetilausten viestit ja joutuu hylkäämään ne. Tämä tuhlaa laskentaresursseja, kasvattaa kustannuksia ja lisää kuluttajien tarpeetonta kuormaa. SNS subscription filter policies -suodatuskäytännöt ratkaisevat ongelman antamalla SNS:n reitittää viestit vain sopiville tilaajille.
Näin SNS-suodatuskäytännöt toimivat
Suodatuskäytäntö on SQS- tai Lambda-tilaukseen sovellettava JSON-objekti. SNS vertaa käytäntöä kunkin viestin message attributes -määritteisiin ennen toimitusta. Jos viestimääritteet vastaavat suodatuskäytäntöä, viesti toimitetaan; muussa tapauksessa SNS ohittaa kyseisen tilaajan hiljaisesti. Suodatuskäytännöt tukevat merkkijonojen vertailua, numeerisia alueita, etuliitteiden vertailua sekä exists-operaattoria, jolla tarkistetaan määritteen olemassaolo tai puuttuminen.
# Filter policy: only deliver ELECTRONICS orders from US or EU
{
'category': ['ELECTRONICS'],
'region': ['US', 'EU'],
'amount': [{'numeric': ['>=', 100]}]
}Suodatuskäytännön kohde: viestimääritteet vai runko
Oletusarvoisesti suodatuskäytännöt kohdistuvat message attributes -määritteisiin eli metatietoihin. Vuodesta 2023 lähtien SNS on tukenut myös hyötykuormaan perustuvaa (rungon) suodatusta asettamalla suodatuskäytännön laajuudeksi MessageBody. Näin JSON-polkuun perustuva suodatus voidaan tehdä suoraan viestin rungosta ilman, että julkaisijoiden tarvitsee lisätä määritteitä. Rungon suodatus on joustavampaa, mutta se edellyttää, että viestin runko on kelvollista JSON-muotoa. Varmistakaa aina, kumpi laajuus vastaa julkaisijan tuottamaa muotoa.
# 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"]}'Numeeriset ja etuliitteeseen perustuvat suodatusehdot
Suodatuskäytännöt tukevat yksinkertaisen merkkijonojen yhtäsuuruuden lisäksi useita vertailuoperaattoreita:
- Numeric:
{"numeric": ["=", 100]},{"numeric": [">", 50, "<=", 200]} - Prefix:
{"prefix": "order-"}vastaa kaikkia merkkijonoja, jotka alkavat kyseisellä etuliitteellä - Anything-but:
{"anything-but": ["CANCELLED"]}vastaa kaikkia arvoja lueteltuja arvoja lukuun ottamatta - Exists:
{"exists": true}vastaa, jos määrite on olemassa;false, jos se puuttuu
Viestien julkaiseminen suodatusta varten määritteiden kanssa
Jotta suodatus toimisi, julkaisijan on sisällytettävä viestimääritteet julkaistessaan viestin SNS:ään. Määritteet ovat avain–arvo-pareja, joilla on tietotyyppi (String, Number, Binary). Julkaisijan ei tarvitse tietää, millaisia suodatuskäytäntöjä tilaajilla on – sen tarvitsee vain rikastaa viestiä tapahtumaa kuvaavilla määritteillä. SNS huolehtii reitityksestä automaattisesti. Näin julkaisijat pysyvät täysin irrotettuina tilaajakohtaisesta logiikasta.
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"}
}'Monitasoinen fan-out: SNS + useita SQS-jonoja
Edistyneessä fan-out-topologiassa SNS voi reitittää viestejä SQS-jonoihin useilla tarkkuustasoilla: yksi jono vastaanottaa kaikki tilaukset (ei suodatinta) auditointia varten, toinen vastaanottaa vain HIGH_VALUE-tilaukset (amount >= 1000) petosten tarkastelua varten ja kolmas vain ELECTRONICS-tilaukset elektroniikkavarastoa varten. Jokaisella SQS-jonolla on oma Lambda-kuluttajansa. Tämä malli mahdollistaa kunkin käsittelytason itsenäisen skaalauksen ja uusien kuluttajien lisäämisen koskematta olemassa oleviin kuluttajiin tai julkaisijaan.
SNS:n toimitus tilien välillä SQS:ään
SNS voi toimittaa viestejä eri AWS-tilillä sijaitseviin SQS-jonoihin. SQS-jonon resurssipohjaisen käytännön on sallittava SNS-palvelun principalin kutsua sqs:SendMessage-toimintoa julkaisevan tilin SNS-aiheen ARN:stä. Näin keskitetty tapahtumien julkaiseminen on mahdollista (yksi tili julkaisee ja useiden tilien tiimit tilaavat) ilman tunnistetietojen jakamista. Tilien välinen fan-out on yleinen malli usean tilin AWS Organizations -ympäristöissä.
# 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 puskurina ennen Lambdaa
Kun tapahtumamäärä kasvaa äkillisesti, suorat SNS–Lambda-kutsut skaalaavat Lambdan välittömästi ja voivat mahdollisesti kuormittaa liikaa taustalla olevia tietokantoja tai rajapintoja. Kun SNS:n ja Lambdan väliin lisätään SQS, syntyy puskuri: SNS toimittaa viestit SQS:ään, ja Lambda noutaa niitä hallitun eräkoon mukaisesti. Näin Lambda voi käsitellä viestejä kestävällä nopeudella SQS:n tasatessa liikenteen piikkejä. Jonon syvyys toimii vastapaineen mekanismina – sitä voidaan valvoa ja siitä voidaan ilmoittaa, kun se kasvaa raja-arvon yli ja ilmaisee kuluttajan jäävän jälkeen.
Suoran Lambdan ja SQS-puskuroidun fan-outin vertailu
SNS → Lambda (suora): pienin viive, ei puskurointia, Lambda skaalautuu välittömästi. Sopii parhaiten reaaliaikaiseen hälytykseen tai kiireellisiin ilmoituksiin, joissa alle sekunnin viive on tärkeä. SNS → SQS → Lambda: lisää DLQ-tuen, hallitun läpimenon, Visibility Timeoutiin perustuvat uudelleenyritykset ja jonon syvyyden valvonnan. Sopii parhaiten tapahtumien käsittelyyn, varastosaldojen päivityksiin ja tilanteisiin, joissa taustajärjestelmien rajoja on noudatettava. Koetehtävissä valitkaa SQS-puskurointi aina, kun mainitaan kestävyys ja nopeuden hallinta.
Suodatuskäytäntöjen testaaminen
Testatkaa SNS-konsolin suodatuskäytäntöeditorilla, vastaisiko esimerkkiviesti suodatuskäytäntöänne, ennen kuin otatte sen käyttöön. Voitte myös käyttää SNS Sandboxia viestien toimituksen simulointiin ja reitityksen varmistamiseen. Koodissa voitte validoida suodatuskäytännöt julkaisemalla testiviestejä, joiden attribuutit ovat tiedossa, ja tarkistamalla kunkin tilauksen CloudWatch-mittarit: NumberOfMessagesFiltered-mittari näyttää, kuinka monta viestiä suodatin esti, joten voitte hienosäätää käytäntöjä odottamatta tuotantotapahtumia.
Päästä päähän ulottuvan integraation yhteenveto
Täydellinen SNS + SQS -integraatio toimii näin: (1) sovellus julkaisee tapahtuman SNS Standard -aiheeseen viestiattribuutteineen; (2) SNS arvioi kunkin tilauksen suodatuskäytännön ja toimittaa kuhunkin SQS-jonoon vain täsmäävät viestit; (3) Lambda lukee jokaisesta SQS-jonosta määritetyn eräkoon mukaisesti ja käsittelee viestit; (4) epäonnistuneet viestit siirtyvät jonon DLQ:hun maxReceiveCount-arvon täytyttyä; (5) DLQ:n syvyyttä valvova CloudWatch-hälytys ilmoittaa tiimille. Tämä täysin hajautettu ja vikasietoinen malli on esimerkki SAA-C03-arkkitehtuurista.
Pikatarkistus
Testatkaa tämän oppitunnin AWS Solutions Architect (SAA-C03) -käsitteiden ymmärtämistänne.
Oppitunnin kertaus
Tässä oppitunnissa opitte, että SNS-suodatuskäytännöt reitittävät viestejä viestiattribuuttien tai viestin sisällön perusteella SNS-tasolla, mikä poistaa tarpeettoman käsittelyn kuluttajilta, SNS→SQS→Lambda -malli lisää kestävän puskurin ja nopeudensäätelyn fan-out-lähetyksen ja käsittelyn välille ja tilien välinen SQS-toimitus mahdollistaa keskitetyn pub/sub-arkkitehtuurin usean tilin ympäristöissä jonoresurssien käytäntöjen avulla. Seuraavaksi tutustumme Amazon API Gatewayn REST-, HTTP- ja WebSocket-rajapintoihin.
Opi Cloud & IT Cert Prep tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 150
- Oppitunnit
- 600
Usein kysytyt kysymykset
Onko oppitunti ”SQS-viestien suodatus ja SNS–SQS-integraatio” ilmainen?
Kyllä – oppitunnin ”SQS-viestien suodatus ja SNS–SQS-integraatio” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Cloud & IT Cert Prep-kurssin, päivitä CoddyKit PROhon. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”SQS-viestien suodatus ja SNS–SQS-integraatio”?
Sovellatte SNS-tilausten suodatinkäytäntöjä, jotta kukin SQS-kuluttaja vastaanottaa vain tarvitsemansa viestit ja turha käsittely vähenee. Harjoittelet Cloud & IT Cert Prep-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Cloud & IT Cert Prep-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Cloud & IT Cert Prep-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”SQS-viestien suodatus ja SNS–SQS-integraatio”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Cloud & IT Cert Prep-oppitunnilla?
Kyllä. Jokainen Cloud & IT Cert Prep-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- SQS:n Standard- ja FIFO-jonot
- Visibility Timeout, DLQ ja Long Polling
- SNS Topics ja fan-out-arkkitehtuuri
- SQS-viestien suodatus ja SNS–SQS-integraatio