Moderna applikationer är byggda med modulära oberoende komponenter eller mikrotjänster som förlitar sig på ett API-ramverk för att kommunicera med tjänster. Många organisationer bygger datasjöar att lagra och analysera stora volymer av strukturerad, semi-strukturerad och ostrukturerad data. Dessutom går många lag mot en datanät arkitektur, vilket kräver att de exponerar sina datamängder som lätt förbrukningsbara dataprodukter. För att åstadkomma detta på AWS använder organisationer Amazon enkel lagringstjänst (Amazon S3) för att tillhandahålla billig och pålitlig objektlagring för att hysa deras datamängder. För att möjliggöra interaktiva frågor och analysera sina data på plats med hjälp av bekant SQL-syntax, vänder sig många team till Amazonas Athena. Athena är en interaktiv frågetjänst som används av moderna applikationer för att fråga stora mängder data på en S3-datasjö med standard SQL.
När du arbetar med SQL-databaser är applikationsutvecklare och affärsanalytiker mest bekanta med enkel behörighetshantering och synkrona frågesvarsprotokoll – om en användare har behörighet att skicka en fråga gör de det och får resultaten från servern när frågan är klar . Direkt åtkomst till Athena API:er, till exempel vid integration med en anpassad webbapplikation, kräver en AWS identitets- och åtkomsthantering (IAM) roll för applikationerna, och kräver att du bygger en anpassad process för att polla för att slutföra frågor asynkront. IAM-rollen behöver åtkomst för att köra Athena API-anrop, samt S3-behörigheter för att hämta Athena-utdata lagrad på Amazon S3. Polling för att slutföra Athena-frågan när den utförs med flera intervall kan resultera i ökad latens ur klientperspektiv.
I det här inlägget presenterar vi en lösning som kan integreras med din front-end-applikation för att fråga data från Amazon S3 med hjälp av en Athena synkron API-anrop. Med den här lösningen kan du lägga till ett lager av abstraktion till din applikation på direkt Athena API anrop och främja åtkomsten med hjälp av WebSocket API utvecklat med Amazon API Gateway. Frågeresultaten returneras tillbaka till applikationen som Amazon S3 föreskrivna webbadresser.
Översikt över lösningen
I illustrationssyfte, detta inlägg bygger en COVID-19-datasjö med ett WebSocket API för att hantera Athena-frågor. Din ansökan kan åberopa WebSocket API för att hämta data från Amazon S3 med hjälp av en Athena SQL-fråga, och WebSocket API returnerar JSON-svaret med den förinställda Amazon S3 URL:en. Applikationen måste tolka JSON-meddelandet för att läsa den fördefinierade URL:en, ladda ner data till lokal och rapportera tillbaka data till användargränssnittet.
Vi använder AWS stegfunktioner för att fråga Athena-frågan. När frågan är klar anropar Step Functions en AWS Lambda funktion för att generera den förinställda URL:en och skicka förfrågan tillbaka till applikationen.
Applikationen kräver inte direkt åtkomst till Athena, bara åtkomst för att anropa API:et. När du använder den här lösningen bör du säkra följande API AWS riktlinjer. För mer information, se Styra och hantera åtkomst till ett WebSocket API i API Gateway.
Följande diagram sammanfattar arkitekturen, nyckelkomponenterna och interaktionerna i lösningen.
Applikationen är sammansatt av WebSocket API i API Gateway, som hanterar anslutningen mellan klienten och Athena. En klientapplikation som använder ramverket kan skicka Athena SQL-frågan och få tillbaka den fördefinierade URL-adressen som innehåller frågeresultatdata. Arbetsflödet inkluderar följande steg:
- Applikationen anropar WebSocket API-anslutningen.
- En lambdafunktion anropas för att initiera anslutningen. Anslutnings-ID lagras i en Amazon DynamoDB
- När klientapplikationen är ansluten kan den anropa
runquery
action, som anropar funktionen RunQuery Lambda. - Funktionen kör först Athena-frågan.
- När frågan startas kontrollerar funktionen statusen och använder stegfunktioner för att spåra frågans framsteg.
- Step Functions anropar den tredje Lambda-funktionen för att läsa de bearbetade Athena-resultaten och få den förinställda S3-URL:n. Misslyckade meddelanden dirigeras till en Amazon enkel meddelandetjänst (Amazon SNS) ämne, som du kan prenumerera på.
- Den förinställda URL:en returneras till klientapplikationen.
- Anslutningen stängs med OnDisconnect-funktionen.
RunQuery Lambda-funktionen kör Athena-frågan med hjälp av start_query_execution begäran:
Amazon S3 förinställda URL genereras genom att anropa generate_presigned_url
begäran med hinken och nyckelinformationen som är värd för Athena-resultaten. Koden hårdkodar presignerns utgång till 120 sekunder, vilket är konfigurerbart i funktionsingångsparametern PreSignerExpireSeconds
. Se följande kod:
Förutsättningar
Det här inlägget förutsätter att du har följande:
- Åtkomst till ett AWS-konto
- Behörigheter att skapa en AWS molnformation stapel
- Behörigheter att skapa följande resurser:
- AWS-lim katalogdatabaser och tabeller
- API-gateway
- Lambdafunktion
- IAM-roller
- Stegfunktioner tillståndsmaskin
- SNS-ämne
- DynamoDB-tabell
Aktivera WebSocket API
För att aktivera WebSocket API för API Gateway, utför följande steg:
- Konfigurera Athena-datauppsättningen.
För att göra data från AWS COVID-19-datasjön tillgänglig i datakatalogen på ditt AWS-konto, skapa en CloudFormation-stack med följande mall. Om du är inloggad på ditt AWS-konto, följande sida fyller i det mesta av formuläret för att skapa stacken åt dig. Allt du behöver göra är att välja Skapa stack. För instruktioner om hur du skapar en CloudFormation-stack, se Komma igång med AWS CloudFormation.
Du kan också använda en befintlig Athena-databas för att fråga, i så fall måste du uppdatera stackparametrarna.
- Logga in på Athena -konsol.
Om det här är första gången du använder Athena måste du ange en sökresultatplats på Amazon S3. För mer information om att fråga och komma åt data från Athena, se En offentlig datasjö för analys av covid-19-data.
- Konfigurera WebSocket-ramverket med följande sida, som distribuerar API-infrastrukturen med hjälp av AWS serverlös applikationsmodell (AWS SAM).
- Uppdatera parametrarna
pBucketName
med S3-skopan (ius-east-2
region) som lagrar Athena-resultaten och även uppdatera databasen om du vill fråga en befintlig databas. - Markera kryssrutan för att bekräfta skapandet av IAM-roller och välj Distribuera.
På en hög nivå är dessa de primära resurserna som används av applikationsmallen:
- En API-gateway med vägar till funktionerna för att ansluta, koppla från och fråga Lambda. Observera att API-gatewayen som distribueras med detta exempel inte implementerar autentisering och auktorisering. Vi rekommenderar att du implementerar autentisering och auktorisering innan du distribuerar i en produktionsmiljö. Hänvisa till Styra och hantera åtkomst till ett WebSocket API i API Gateway för att förstå hur man implementerar dessa säkerhetskontroller.
- En DynamoDB-tabell för att spåra klientanslutningar.
- Lambda-funktioner för att hantera anslutningstillstånd med hjälp av DynamoDB.
- En lambdafunktion för att köra frågan och starta stegfunktionen. Funktionen inkluderar en tillhörande IAM-roll och policyer med behörigheter till Step Functions, AWS Glue Data Catalog, Athena, AWS nyckelhanteringstjänst (AWS KMS) och Amazon S3. Observera att exekveringsrollen Lambda ger läsåtkomst till Data Catalog och S3-bucket som du anger i distributionsparametrarna. Vi rekommenderar att du inte inkluderar en katalog som innehåller känsliga uppgifter utan att först förstå konsekvenserna och implementera ytterligare säkerhetskontroller.
- En Lambda-funktion med tillhörande behörighet att polla för frågeresultaten och returnera den förinställda URL:en till klienten.
- En Step Functions-tillståndsmaskin med tillhörande behörigheter för att köra polling Lambda-funktionen och skicka API-aviseringar med Amazon SNS.
Testa inställningen
För att testa WebSocket API kan du använda wscat, ett kommandoradsverktyg med öppen källkod.
- Installera NPM.
- Installera wscat:
- På konsolen ansluter du till din publicerade API-slutpunkt genom att köra följande kommando. Den fullständiga URI som ska användas finns på AWS CloudFormation-konsolen genom att hitta
WebSocketURI
utgång iserverlessrepo-aws-app-athena-websocket-integration
stack som distribuerades av AWS SAM-applikationen som du distribuerade tidigare.
- Att testa
runquery
funktionen, skicka ett JSON-meddelande som i följande exempel. Detta utlöser tillståndsmaskinen att köra din SQL-fråga med Athena och, med Lambda, returnera en S3 fördefinierad URL till din klient, som du kan komma åt för att ladda ner frågeresultaten. Observera att API:et accepterar alla giltiga Athena-frågor. Ytterligare frågevalidering kan läggas till den interna Lambdafunktionen om så önskas.
- Kopiera värdet för
pre-signed-url
och skriv in det i ditt webbläsarfönster för att komma åt resultaten.
Den fördefinierade URL:en ger dig tillfälliga referenser för att ladda ner frågeresultaten. För mer information, se Använda fördefinierade webbadresser. Denna process kan integreras i en front-end webbapplikation för att automatiskt ladda ner och visa resultaten av frågan.
Städa upp
För att undvika att ådra sig pågående avgifter, radera resurserna du tillhandahållit genom att ta bort CloudFormation-stackarna CovidLakeStacks
och serverlessrepo-AthenaWebSocketIntegration
via AWS CloudFormation-konsolen. För detaljerade instruktioner, se rengöringsavsnitten i startpaketets README-filer i GitHub repo.
Slutsats
I det här inlägget visade vi hur du integrerar din applikation med Athena med hjälp av WebSocket API. Vi har inkluderat en GitHub repo för att du ska förstå koden och modifiera den enligt dina applikationskrav, för att få full nytta av lösningen. Vi uppmuntrar dig att ytterligare utforska funktionerna i API Gateway WebSocket API för att lägga till säkerhet med hjälp av auktoriserare, visa liveanrop med hjälp av instrumentpaneler och utöka ramverket för fler rutter på begäran om åtgärd.
Låt oss hålla kontakten via GitHub repo.
Om författarna
Abhi Sodhani är Sr. AI/ML Solutions Architect på AWS. Han hjälper kunder med ett brett utbud av lösningar, inklusive maskinlutning, artificiell intelligens, datasjöar, datalagring och datavisualisering. Utanför jobbet brinner han för böcker, yoga och resor.
Robin Zimmerman är en data- och ML-ingenjör med AWS Professional Services. Han arbetar med AWS-företagskunder för att utveckla system för att extrahera värde från stora mängder data med hjälp av AWS-data, analys och maskininlärningstjänster. När han inte jobbar hittar du honom förmodligen i bergen – bergsklättring, skidåkning, mountainbike eller ut på vilket äventyr han kan drömma om.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- Platoblockchain. Web3 Metaverse Intelligence. Kunskap förstärkt. Tillgång här.
- Källa: https://aws.amazon.com/blogs/big-data/access-amazon-athena-in-your-applications-using-the-websocket-api/
- 10
- 100
- 7
- a
- Om oss
- accepterar
- tillgång
- åtkomst
- åstadkomma
- Konto
- bekräfta
- Handling
- lagt till
- Dessutom
- Annat
- Äventyr
- AI / ML
- Alla
- amason
- Amazonas Athena
- analys
- analytiker
- analytics
- analysera
- analys
- och
- api
- API: er
- Ansökan
- tillämpningar
- arkitektur
- konstgjord
- artificiell intelligens
- associerad
- Autentisering
- tillstånd
- automatiskt
- tillgänglig
- undvika
- AWS
- AWS molnformation
- AWS-lim
- AWS professionella tjänster
- tillbaka
- innan
- Fördelarna
- mellan
- kropp
- Böcker
- Box
- webbläsare
- SLUTRESULTAT
- byggt
- företag
- Samtal
- Vid
- katalog
- avgifter
- billig
- ta
- Kontroller
- Välja
- klient
- Klättring
- stängt
- koda
- Koder
- kommunicera
- fullborda
- fullbordan
- komponenter
- sammansatt
- Kontakta
- anslutna
- anslutning
- Anslutningar
- Anslutningar
- ansluter
- Konsol
- innehåller
- kontroller
- kunde
- Covid-19
- skapa
- Skapa
- skapande
- referenser
- beställnings
- Kunder
- datum
- datasjö
- datauppsättningar
- datavisualisering
- Databas
- databaser
- datauppsättningar
- utplacerade
- utplacera
- utplacering
- vecklas ut
- detaljerad
- utveckla
- utvecklade
- utvecklare
- rikta
- Direkt tillgång
- direkt
- Visa
- inte
- inte
- ladda ner
- drömmen
- lätt
- möjliggöra
- uppmuntra
- Slutpunkt
- ingenjör
- ange
- Företag
- företagskunder
- Miljö
- Eter (ETH)
- händelse
- exempel
- Utom
- undantag
- Utför
- utförande
- befintliga
- Bygga ut
- utforska
- extrahera
- Misslyckades
- bekant
- Funktioner
- Filer
- hitta
- finna
- Förnamn
- första gången
- efter
- formen
- hittade
- Ramverk
- från
- främre
- främre ände
- full
- fungera
- funktioner
- ytterligare
- nätbryggan
- generera
- genereras
- skaffa sig
- ger
- hantera
- Handtag
- Hård
- headers
- hjälper
- Hög
- värdar
- Huset
- Hur ser din drömresa ut
- How To
- html
- HTTPS
- IAM
- Identitet
- Konsekvenser
- genomföra
- genomföra
- in
- innefattar
- ingår
- innefattar
- Inklusive
- ökat
- oberoende
- info
- informationen
- Infrastruktur
- initiera
- ingång
- installera
- instruktioner
- integrera
- integrerade
- Integrera
- Intelligens
- interaktioner
- interaktiva
- inre
- anropar
- IT
- json
- Nyckel
- utrustning
- sjö
- Large
- Latens
- lager
- inlärning
- Nivå
- BEGRÄNSA
- linje
- lever
- lokal
- läge
- Maskinen
- maskininlärning
- göra
- hantera
- ledning
- hantera
- många
- meddelande
- meddelanden
- microservices
- ML
- Modern Konst
- modifiera
- modulära
- mer
- mest
- Berg
- rörliga
- Behöver
- behov
- anmälan
- anmälningar
- objektet
- Objektförvaring
- pågående
- öppen källkod
- organisationer
- Ursprung
- Övriga
- utanför
- parameter
- parametrar
- brinner
- behörigheter
- perspektiv
- Plats
- plato
- Platon Data Intelligence
- PlatonData
- Strategier
- enkät
- Inlägg
- presentera
- tryck
- tidigare
- primär
- förmodligen
- process
- Produktion
- Produkter
- professionell
- Framsteg
- främja
- ge
- förutsatt
- ger
- allmän
- publicerade
- syfte
- område
- Läsa
- motta
- rekommenderar
- region
- pålitlig
- förlita
- rapport
- begära
- kräver
- Krav
- Kräver
- Resurser
- respons
- resultera
- Resultat
- avkastning
- återgår
- robin
- Roll
- roller
- rutter
- Körning
- rinnande
- Sam
- sekunder
- sektioner
- säkra
- säkerhet
- känslig
- Server
- service
- Tjänster
- session
- uppsättningar
- flera
- skall
- signerad
- Enkelt
- So
- lösning
- Lösningar
- SQL
- stapel
- Stacks
- standard
- starta
- igång
- Ange
- Stater
- status
- bo
- Steg
- Steg
- förvaring
- lagra
- lagras
- lagrar
- strukturerade
- skicka
- prenumerera
- syntax
- System
- bord
- lag
- mall
- temporär
- testa
- Smakämnen
- Staten
- deras
- Tredje
- Genom
- tid
- till
- verktyg
- ämne
- Rör
- mot
- spår
- Spårning
- färdas
- Vrida
- förstå
- förståelse
- Uppdatering
- URI
- URL
- användning
- Användare
- godkännande
- värde
- via
- utsikt
- visualisering
- volymer
- Lagring
- webb
- webbapplikation
- WebSocket
- som
- bred
- Brett utbud
- utan
- Arbete
- arbetsflöde
- arbetsgrupp
- arbetssätt
- fungerar
- Yoga
- Din
- zephyrnet