AWS Lambda - Guida rapida
AWS Lambdaè un servizio che esegue l'elaborazione senza server, che implica l'elaborazione senza alcun server. Il codice viene eseguito in base alla risposta di eventi nei servizi AWS come l'aggiunta / rimozione di file nel bucket S3, l'aggiornamento delle tabelle Amazon Dynamo dB, la richiesta HTTP dal gateway API Amazon ecc.
Per lavorare con AWS Lambda, dobbiamo solo eseguire il push del codice nel servizio AWS Lambda. Tutte le altre attività e risorse come infrastruttura, sistema operativo, manutenzione del server, monitoraggio del codice, log e sicurezza sono a carico di AWS.
AWS Lambdasupporta linguaggi come Java, NodeJS, Python, C # e Go. Tieni presente che AWS Lambda funzionerà solo con i servizi AWS.
Cos'è AWS Lambda?
La definizione di AWS Lambda fornita dalla sua documentazione ufficiale è la seguente:
AWS Lambda è un servizio di elaborazione che ti consente di eseguire codice senza eseguire il provisioning o gestire i server. AWS Lambda esegue il codice solo quando necessario e scala automaticamente, da poche richieste al giorno a migliaia al secondo. Paghi solo per il tempo di elaborazione che consumi: non ci sono costi quando il codice non è in esecuzione.
Come funziona AWS Lambda?
Di seguito è mostrato il diagramma a blocchi che spiega il funzionamento di AWS Lambda in cinque semplici passaggi:
Step 1 − Carica il codice lambda AWS in uno dei linguaggi supportati da AWS lambda, ovvero NodeJS, Java, Python, C # e Go.
Step 2 − Questi sono alcuni servizi AWS su cui è possibile attivare AWS lambda.
Step 3 −AWS Lambda che contiene il codice di caricamento e i dettagli dell'evento su cui si è verificato il trigger. Ad esempio, evento da Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, app mobile ecc.
Step 4 − Esegue AWS Lambda Code solo quando attivato dai servizi AWS in scenari quali:
- L'utente carica i file nel bucket S3
- È stato raggiunto l'URL dell'endpoint http get / post
- i dati vengono aggiunti / aggiornati / eliminati nelle tabelle dinamo dB
- notifica push
- raccolta di flussi di dati
- hosting del sito web
- invio di email
- app mobile, ecc.
Step 5 − Ricorda che AWS addebita solo quando viene eseguito il codice lambda AWS e non altrimenti.
Vantaggi dell'utilizzo di AWS Lambda
AWS Lambda offre molteplici vantaggi quando ci lavori. Questa sezione li discute in dettaglio:
Facilità di lavorare con il codice
AWS Lambda ti offre l'infrastruttura per caricare il tuo codice. Si occupa di mantenere il codice e attiva il codice ogni volta che si verifica l'evento richiesto. Permette di scegliere la memoria e il timeout richiesto per il codice.
AWS Lambda può anche eseguire richieste parallele in base ai trigger di evento.
Fornitura log
AWS Lambda fornisce i dettagli del numero di volte in cui un codice è stato eseguito e del tempo impiegato per l'esecuzione, della memoria consumata, ecc. AWS CloudWatch raccoglie tutti i log, il che aiuta a comprendere il flusso di esecuzione e il debug del codice.
Fatturazione basata sull'utilizzo
La fatturazione di AWS Lambda viene eseguita in base all'utilizzo della memoria, alla richiesta effettuata e all'esecuzione, fatturata in incrementi di almeno 100 ms. Quindi, per un'esecuzione di 500 ms, la fatturazione avverrà ogni 100 ms. Se specifichi il tuo codice lambda AWS da eseguire in 500 ms e il tempo necessario per l'esecuzione è di soli 200 ms, AWS ti addebiterà solo il tempo impiegato, ovvero 200 ms di esecuzione invece di 500 ms. AWS addebita sempre il tempo di esecuzione utilizzato. Non è necessario pagare se la funzione non viene eseguita.
Supporto multilingue
AWS Lambda supporta linguaggi popolari come Node. js, Python, Java, C # e Go. Questi sono linguaggi ampiamente utilizzati e qualsiasi sviluppatore troverà facile scrivere codice per AWS Lambda.
Facilità di creazione e distribuzione del codice
Sono disponibili molte opzioni per Lambda per la creazione e la distribuzione del codice. Per scrivere il codice, puoi utilizzare l'editor online di AWS, l'IDE di Visual Studio o l'IDE di Eclipse. Supporta anche il framework serverless che semplifica la scrittura e la distribuzione del codice AWS Lambda. Oltre alla console AWS, abbiamo AWS-cli per creare e distribuire codice.
Altre caratteristiche
Puoi utilizzare AWS Lambda gratuitamente ottenendo un accesso al livello gratuito di AWS. Ti offre un servizio gratuito per 1 anno. Dai un'occhiata ai servizi gratuiti offerti dal livello gratuito di AWS.
Svantaggi dell'utilizzo di AWS Lambda
Nonostante molti vantaggi, AWS Lambda presenta i seguenti svantaggi:
Non è adatto per piccoli progetti.
È necessario analizzare attentamente il codice e decidere la memoria e il timeout. Nel caso in cui la tua funzione abbia bisogno di più tempo di quello assegnato, verrà terminata secondo il timeout specificato su di essa e il codice non verrà eseguito completamente.
Poiché AWS Lambda si basa completamente su AWS per l'infrastruttura, non è possibile installare alcun software aggiuntivo se il codice lo richiede.
Eventi che attivano AWS Lambda
Gli eventi che possono attivare AWS Lambda sono i seguenti:
- Entrata in un oggetto S3
- Inserimento, aggiornamento e cancellazione dei dati nella tabella Dynamo DB
- Notifiche push da SNS
- GET / POST chiamate a API Gateway
- Modifica delle intestazioni al visualizzatore o richiesta / risposta dell'origine in CloudFront
- Voci di registro nel flusso di dati AWS Kinesis
- Registra la cronologia in CloudTrail
Casi d'uso di AWS Lambda
AWS Lambda è un servizio di elaborazione utilizzato principalmente per eseguire processi in background. Può attivarsi se utilizzato con altri servizi AWS. Di seguito è riportato l'elenco dei servizi AWS in cui possiamo utilizzare AWS Lambda:
Oggetto S3 e AWS Lambda
Amazon S3 trasmette i dettagli dell'evento ad AWS Lambda quando è presente un caricamento di file in S3. I dettagli del caricamento del file o dell'eliminazione del file o dello spostamento del file vengono trasmessi ad AWS Lambda. Il codice in AWS Lambda può eseguire il passaggio necessario per quando riceve i dettagli dell'evento. Ad esempio la creazione di una miniatura dell'immagine inserita in S3.
DynamoDB e AWS Lambda
DynamoDB può attivare AWS Lambda quando sono presenti dati aggiunti, aggiornati ed eliminati nella tabella. L'evento AWS Lambda contiene tutti i dettagli della tabella AWS DynamoDB relativa all'inserimento / aggiornamento o all'eliminazione.
API Gateway e AWS Lambda
API Gateway può attivare AWS Lambda sui metodi GET / POST. Possiamo creare un modulo e condividere i dettagli con l'endpoint API Gateway e utilizzarlo con AWS Lambda per ulteriori elaborazioni, ad esempio, inserendo i dati nella tabella DynamoDB.
SNS e AWS Lambda
SNS viene utilizzato per la notifica push, l'invio di SMS, ecc. Possiamo attivare AWS lambda quando si verificano notifiche push in SNS. Possiamo anche inviare SMS al numero di telefono da AWS Lambda quando riceve il trigger.
Eventi pianificati e AWS Lambda
Gli eventi pianificati possono essere utilizzati per i cron job. Può attivare AWS Lambda per eseguire l'attività in base a uno schema temporale regolare.
CloudTrail e AWS Lambda
CloudTrail può essere utile per monitorare i log sull'account. Possiamo utilizzare AWS Lambda per elaborare ulteriormente i log di CloudTrail.
Kinesis e AWS Lambda
Kinesis viene utilizzato per acquisire / archiviare i dati di tracciamento in tempo reale provenienti da clic del sito Web, log, feed di social media e un trigger per AWS Lambda può eseguire un'elaborazione aggiuntiva su questi log.
CloudFront e Lambda @ Edge
CloudFront è una rete di distribuzione dei contenuti in cui puoi ospitare il tuo sito Web e Lambda @ Edge può essere utilizzato per elaborare le intestazioni provenienti dalla richiesta del visualizzatore, dalla richiesta di origine, dalla risposta dell'origine e dalla risposta del visualizzatore. La modifica delle intestazioni include attività come la modifica dei dati dei cookie, la riscrittura dell'URL, utilizzato per i test AB per modificare la risposta inviata all'utente, l'aggiunta di informazioni aggiuntive sulle intestazioni per motivi di sicurezza, ecc.
Prima di iniziare a lavorare con AWS Lambda, devi disporre di un accesso con la console Amazon. AWS Lambda supporta due IDE:Visual studio e Eclipse. In questo capitolo, discuteremo in dettaglio dell'installazione di AWS Lambda passo dopo passo.
Crea il login nella Console AWS
Puoi creare il tuo login nella Console AWS gratuitamente utilizzando il livello gratuito di Amazon. Puoi seguire questi passaggi indicati di seguito per creare un accesso con Amazon per utilizzare i servizi Amazon:
Passo 1
Vai a https://aws.amazon.com/free/e fai clic su crea un account gratuito. Puoi vedere lo screenshot come mostrato di seguito -
Passo 2
Clicca su Create a Free Account e verrai reindirizzato alla schermata come mostrato di seguito -
Ora, inserisci i dettagli di indirizzo e-mail, password e nome dell'account AWS secondo la tua scelta in questo modulo mostrato sopra e fai clic Continue.
Passaggio 3
Ora puoi trovare la schermata come mostrato di seguito:
Inserisci tutti i dettagli richiesti in questo modulo.
Nota che ci sono costi minimi da pagare in base al paese selezionato. Lo stesso viene rimborsato una volta convalidati i dati inseriti. Hai bisogno dei dettagli della carta di credito o di debito per creare l'account gratuito. Per gli utenti indianiRs 2/- viene detratto e per gli Stati Uniti $1 La stessa viene rimborsata al rispettivo utente della carta una volta che l'utente è stato convalidato.
Si prega di notare che l'account è gratuito e c'è un limite all'utilizzo dei servizi. Se l'utilizzo supera il limite, all'utente verrà addebitato.
Una volta inseriti i dettagli nel modulo mostrato sopra, fare clic su Create Account and Continue.
Verrai reindirizzato alla schermata successiva come mostrato di seguito.
Passaggio 4
È necessario inserire i dettagli del pagamento, ovvero carta di credito o carta di debito, insieme alla data di scadenza e al nome del titolare della carta come mostrato di seguito -
Passaggio 5
Una volta inseriti tutti i dettagli, fare clic su Secure Submit e convaliderà la carta con la banca e ti darà il OTPsul tuo cellulare che è collegato alla carta. È possibile trovare una finestra come mostrato di seguito:
Ora, inserisci il file OTP dettagli e fare clic Make Payment. L'importo viene addebitato in base al Paese selezionato.
Passaggio 6
Una volta effettuato il pagamento, il passaggio successivo è la verifica telefonica. Devi inserire il tuo numero di cellulare come mostrato di seguito -
Una volta inseriti i dettagli, fare clic su Call Me Now. AWS chiamerà immediatamente utilizzando un sistema automatizzato. Quando richiesto durante la chiamata, inserisci il numero di 4 cifre che apparirà sul tuo sito AWS sul tuo telefono utilizzando la tastiera del telefono. Questo verificherà il tuo numero e otterrai l'attivazione della posta nell'ID di posta specificato all'inizio durante la creazione del login.
Passaggio 7
Fare clic sul collegamento e-mail e immettere il nome dell'account o l'ID e-mail e la password e accedere ai servizi AWS come mostrato di seguito:
Il nome dell'account viene visualizzato nell'angolo in alto a destra come mostrato sopra. Ora puoi iniziare a utilizzare il servizio AWS Lambda. Per il servizio AWS Lambda le lingue supportate sono NodeJS, Python, Java, C # e Go.
Installazione di Visual Studio 2017
Esistono 2 IDE compatibili con AWS: Visual Studio e Eclipse. In questa sezione, discuteremo l'installazione di Visual Studio 2017 su Windows, Linux Mac. Vai al sito ufficiale di Visual Studio:https://www.visualstudio.com/downloads/. Puoi trovare la schermata di benvenuto come mostrato -
Scarica la versione della community, ad es Visual Studio Community 2017perché ora è gratuito per la pratica. Una volta installato, ti guiderà attraverso i passaggi di installazione in cui è necessario selezionare i pacchetti da utilizzare in seguito. Puoi selezionare nodejs, python, c# pacchetto per farci lavorare più tardi.
Supporto di AWS Toolkit per Visual Studio 2017
Dopo aver installato Visual Studio 2017, dovrai seguire i passaggi indicati per l'installazione del supporto AWS Toolkit per Visual Studio 2017 -
Passo 1
Vai a https://aws.amazon.com/visualstudio/ e scarica il toolkit AWS per Visual Studio. Il display è come mostrato di seguito:
Tieni presente che il pacchetto scaricato per Visual Studio 2017 è vsixpacchetto. Se la tua versione di Visual Studio è compresa tra il 2013 e il 2015, installerà un filemsiinstallatore. Clicca ilDownload pulsante come mostrato di seguito.
Passo 2
Ora, fai doppio clic sul pacchetto vsix scaricato e ti guiderà attraverso i passaggi di installazione come mostrato di seguito -
Una volta installato con successo Visual Studio, puoi vedere una finestra, come mostrato di seguito:
Passaggio 3
Ora apri Visual Studio 2017 e dovresti vedere una pagina di benvenuto di AWS come mostrato di seguito:
Tieni presente che devi aggiungere la chiave di accesso, la chiave segreta, il numero di account per iniziare e utilizzare i servizi AWS da visual studio.s
AWS Lambda BoilerPlate per NodeJS
Puoi usarlo con visual studio code come mostrato di seguito.
Passo 1
Puoi scaricare Visual studio code gratuitamente dal sito ufficiale:https://www.visualstudio.com/downloads/. La home page dei download di Visual Studio è simile a questa:
Passo 2
Ora apri il codice di Visual Studio come mostrato di seguito -
Passaggio 3
Per installare il supporto per AWS, support for nodejsl'opzione è disponibile all'interno delle estensioni. Puoi cercare AWS e verrà visualizzata l'opzione come segue:
Passaggio 4
Ora installa il boilerplate per AWS Lambda in nodejs come mostrato -
Passaggio 5
Fare clic sul repository e clonarlo in Visual Studio per iniziare a scrivere la funzione Lambda in Visual Studio. Ti reindirizza a questo repository che possiamo clonare in Visual Studio:https://github.com/loganarnett/vscode-lambda-snippets. Ora, apri la tavolozza dei comandi daView opzione in Visual Studio.
Passaggio 6
Fare clic su di esso e scegliere git clone come mostrato di seguito -
Passaggio 7
Immettere l'URL del repository e salvarlo in base alla propria scelta in locale. Creareindex.js file come mostrato di seguito per lavorare con la funzione lambda -
Installazione di Eclipse IDE
Ora dovrai installare l'ultimo IDE Java EE di eclipse. Puoi scaricarlo dal sito ufficiale di Eclipse:https://www.eclipse.org/downloads/
Supporto di AWS Toolkit per Eclipse IDE
Una volta installato Eclipse, eseguire i seguenti passaggi:
Passo 1
Vai alla guida dal menu e fai clic su Install New Software.
Passo 2
accedere https://aws.amazon.com/eclipse nella casella di testo etichettata Work with nella parte superiore della finestra di dialogo.
Passaggio 3
Ora seleziona il file richiesto AWS Core Management Tools e altri elementi opzionali dall'elenco mostrato di seguito.
Passaggio 4
Ora fai clic su Next. Eclipse ti guiderà attraverso i restanti passaggi di installazione come indicato negli ulteriori passaggi indicati di seguito.
Passaggio 5
I moduli principali di AWS vengono visualizzati nella griglia di seguito, come mostrato nello screenshot riportato di seguito:
Passaggio 6
Una volta installato, lo strumento AWS sarà disponibile in Eclipse come mostrato di seguito:
Passaggio 7
Puoi vedere la seguente schermata quando fai clic sul servizio Amazon.
Ora, fai clic su AWS Explorer per vedere i servizi disponibili. Discuteremo come lavorare con l'IDE installato nei prossimi capitoli.
AWS Lambda è un servizio che si occupa di elaborare il tuo codice senza alcun server. Si dice che sia calcolo senza server. Il codice viene eseguito in base alla risposta di eventi nei servizi AWS come l'aggiunta / rimozione di file nel bucket S3, l'aggiornamento di Amazon DynamoDBtables, la richiesta HTTP dal gateway Amazon Api ecc.
Il codice AWS Lambda può essere scritto in NodeJS, Java, C #, Python e Go. Questo capitolo parlerà in dettaglio della creazione della funzione AWS Lambda nella console AWS.
Console AWS
Accedi alla Console AWS al link https://aws.amazon.com/console. Una volta effettuato l'accesso, verrai reindirizzato alla schermata in cui vengono visualizzati i servizi AWS.
Esempio: creazione di una funzione
Cerchiamo di capire la funzionalità della Console AWS con l'aiuto di un esempio. Fare clic su Lambda (contrassegnato sopra), verrà reindirizzato per creare la funzione come mostrato di seguito -
Clic Create function e lo schermo visualizza i seguenti dettagli:
Nota che, per impostazione predefinita, l'opzione è Author from scratch. Questa opzione ti consente di scrivere il codice Lambda da zero. Avrà solo una semplice funzione conhello world Messaggio.
La seconda opzione Blue prints ha i seguenti dettagli.
Fornisce dettagli sul codice già scritto per alcuni servizi aws nelle lingue disponibili con AWS Lambda. Nel caso in cui sia necessario scrivere codice AWS Lambda per qualsiasi servizio di cui è possibile effettuare il check-inblue prints e inizia.
La terza opzione Serverless Application Repository ha la configurazione dell'applicazione serverless che aiuterà a distribuire il codice AWS Lambda.
Nella discussione successiva, lavoreremo sulla prima opzione in cui creiamo la funzione lambda AWS utilizzando Author from scratch.
Prima di creare la funzione Lambda, sarà necessario un ruolo, ovvero l'autorizzazione per lavorare con i servizi AWS e aws lambda. Successivamente il ruolo deve essere assegnato alla funzione lambda aws.
Creazione di ruoli nella Console AWS
Per creare un ruolo nella Console AWS, vai ai servizi della console AWS e fai clic su IAM come mostrato di seguito:
Ora, se fai clic su IAM, apparirà la schermata come mostrato di seguito -
Se selezioni Roles, puoi vedere i seguenti pulsanti sullo schermo:
Ora fai clic su Create role. Ti chiederà di scegliere il servizio in cui devi utilizzare il ruolo creato.
Poiché dobbiamo utilizzare questo ruolo con AWS Lambda, seleziona Lambda e fare clic Next:Permissionscome mostrato sopra. La schermata successiva mostra il nome della policy disponibile per i servizi AWS. Puoi selezionare la polizza da qui -
Ad esempio, se desideri l'autorizzazione affinché AWS Lambda funzioni con S3 e DynamoDB, devi selezionare la policy. Nella casella di ricerca, inserisci il servizio AWS e fai clic sulla casella di controllo. È possibile selezionare più criteri e in seguito fare clic suNext:Review.
È anche possibile creare criteri personalizzati. Ad esempio, esiste una tabella dynamodb e devi dare l'autorizzazione solo a quella tabella, in questi casi puoi creare criteri.
Clicca su Create policycome mostrato nella schermata sopra. Di seguito sono riportati i dettagli visualizzati sullo schermo.
Scegli un Serviceper cui stai creando la policy. Successivamente verranno visualizzati i dati per le azioni,resources e Request conditions.
Ora dovremmo scegliere il servizio. Cerchiamo di selezionareAWS Dynamodb dalla ricerca. Actions ha i seguenti dettagli:
Ora, inserisci il file Access levelvuoi dare a DynamoDB. Poi,resources mostrerà i seguenti dettagli:
Ora seleziona il tipo di risorsa della tabella. Puoi vedere il seguente output:
Per il permesso sul tavolo, è necessario Add ARN. ARN sono i dettagli che sono univoci per la tabella creata in AWS DynamoDB. Otterrai i dettagli quando la tabella viene creata in dynamodb.
Se fai clic su Add ARN e mostrerà i seguenti dettagli:
Ora, se inserisci il file ARN e il Region, Account e Tablenome verrà popolato. Dovresti fare clicAddpulsante per aggiungere la politica. Allo stesso modo, puoi creare criteri per altri servizi.
Qui abbiamo selezionato due criteri AmazonS3FullAccess e AmazonDynamoDBFullACcess. Abbiamo dato pieno accesso a S3 e DynamoDB in quel ruolo. Tuttavia, si suggerisce di concedere l'autorizzazione solo ai bucket e alle tabelle necessari.
È possibile seguire i passaggi discussi in precedenza per creare i criteri utilizzando ARN.
Passo 1
Clic Create rolepulsante per creare il ruolo. Tutti i ruoli creati vengono visualizzati come mostrato -
Passo 2
Tieni presente che puoi selezionare il ruolo che desideri nel caso in cui sia necessaria una modifica per il ruolo creato. Se selezioniamoAuthor from scratch option, devi entrare Name, Runtime and Role.
Passaggio 3
È possibile osservare i seguenti dettagli in Runtime menu a discesa -
Passaggio 4
È possibile selezionare il runtime di propria scelta e procedere come mostrato.
Role il menu a discesa ha le seguenti opzioni:
Choose an existing role − Verranno visualizzati tutti i ruoli creati nei ruoli IAM.
Create new role from template(s) −Ciò ti consentirà di creare un ruolo e mostrerà l'autorizzazione per essere selezionato per quel ruolo. Osserva lo screenshot per una migliore comprensione.
Create a custom role − Ciò consente all'utente di creare criteri come discusso in precedenza.
Passaggio 5
Seleziona il runtime, rolee aggiungi la funzione. Clicca suCreate functionpulsante per creare la funzione lambda. La schermata successiva visualizzata è la seguente:
Parti della funzione AWS Lambda
Esistono due parti per la funzione AWS Lambda:Configuration e Monitoring. Cerchiamo di discutere ciascuno in dettaglio.
Configurazione
Le seguenti funzionalità sono incluse nella configurazione.
Add Triggers
I trigger necessari per l'aggiunta alla funzione AWS Lambda vengono visualizzati come segue:
Tieni presente che quando selezioniamo un trigger, dobbiamo aggiungere i dettagli di configurazione per quel trigger. Ad esempio per il trigger S3, dobbiamo selezionare il nome del bucket; per il trigger Dynamodb dobbiamo selezionare il nome della tabella.
Esempio
Vediamo un esempio di dettagli di configurazione per un trigger S3 -
Ora aggiungi i dettagli di configurazione per il trigger S3 aggiunto -
Qui è necessario selezionare il file bucket name, event type su cui si desidera attivare Lambda, prefisso e pattern di filtro se presenti e Add il grilletto.
Aggiunta di codice in Lambda
Ora dovremmo concentrarci sul codice Lambda da scrivere. Per aggiungere codice in aws lambda ci sono tre opzioni:
- Utilizzando l'editor in linea
- Utilizzando il file .zip
- Carica il file da Amazon S3
È mostrato nella schermata riportata di seguito:
Cerchiamo di discutere ciascuno di essi in dettaglio.
Using the inline editor
L'editor di codice in linea in cui puoi scrivere il codice è il seguente:
Puoi scrivere il tuo codice scegliendo la lingua che preferisci. Puoi scegliere nuovamente il runtime qui.
Osserva lo screenshot seguente per una migliore comprensione:
Il codice deve essere scritto index.js.Handler. I dettagli differiranno in base al runtime. Pernodejs, è filename.export function che è adesso index.lambda handler.
Upload a .ZIP file
Puoi prima scrivere il codice, comprimerlo e caricare il file zip selezionando Upload a .ZIP file.
Upload a file from Amazon S3
Puoi caricare il file nel bucket S3 e scegliere l'opzione Upload a file from Amazon S3.
Nota che per .ZIP e S3 non sarà possibile modificare il runtime.
Variabili ambientali
Prendono coppie di valori chiave e le condividono con il codice AWS Lambda. Possiamo utilizzare le variabili di ambiente in AWS Lambda per archiviare i dettagli della connessione al database, i dettagli del file per memorizzare l'output, i dettagli del file di registro ecc.
Tag
Sono coppie chiave-valore aggiunte ad AWS Lambda per organizzare meglio la funzione quando vengono utilizzate in diverse regioni. Per un semplice caso d'uso, non è richiesto. Quando sono state create molte funzioni Lambda, il tagging aiuta a filtrare e gestire le funzioni Lambda.
Ruolo di esecuzione
È possibile modificare nuovamente il ruolo qui se non eseguito correttamente all'inizio della creazione della funzione Lambda. Puoi aggiornare o creare un nuovo ruolo qui. Fornisce le stesse opzioni che sono state visualizzate all'inizio della creazione della funzione Lambda.
Impostazioni di base
Qui devi inserire la breve descrizione di ciò che sta facendo la tua funzione Lambda. Selezionare la memoria e il timeout richiesti per la funzione Lambda.
Rete
Ciò ti consente di selezionare il VPC che ti consentirà di accedere alla funzione Lambda dal VPC. Per impostazione predefinita, non è selezionato alcun VPC.
Debug e gestione degli errori
Per il debug e la gestione degli errori, puoi selezionare il servizio AWS per inviare i dettagli. Le opzioni disponibili sonoNone, SNS e SQS.
Concorrenza
Ciò consente di allocare un limite specifico di esecuzioni simultanee consentite per questa funzione.
Auditing e conformità
Questo contiene i log gestiti con l'aiuto di AWS CloudTrail.
Una volta fatto, è necessario salvare le modifiche utilizzando il pulsante Salva come mostrato qui -
Ora, se fai clic su Testpulsante, richiederà un evento di prova. È possibile superare un evento di test di esempio come segue:
L'evento di test creato è come mostrato qui -
Ora salva l'evento di test e fai clic sul pulsante di test per vedere l'esecuzione della funzione AWS Lambda -
Il codice per index.js è il seguente -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log(event.key1);
console.log(event.key2);
console.log(event.key3);
callback(null, 'Lambda test');
};
Notare che la funzione di callback viene chiamata in caso di errore o successo. In caso di successo, puoi vedereLambda test verrà visualizzato.
Monitoraggio
Seleziona la scheda monitoraggio per visualizzare i dettagli di esecuzione della funzione Lambda. I grafici mostrano i dettagli del tempo di esecuzione, degli errori verificatisi ecc.
Puoi anche visualizzare i log in Cloudwatch. Per questo, vai ai servizi AWS e seleziona cloudwatch come mostrato -
Ora, seleziona i log dal lato sinistro e inserisci il nome della tua funzione nel filtro -
La funzione AWS Lambda esegue un codice quando viene richiamata. Questo capitolo descrive in dettaglio tutti questi passaggi coinvolti nel ciclo di vita della funzione AWS Lambda.
Passaggi per la creazione di una funzione Lambda
Il ciclo di vita della funzione Lambda include quattro passaggi necessari:
- Authoring
- Deploying
- Monitoring
- Troubleshooting
Creazione di codice Lambda
Il codice della funzione AWS Lambda può essere scritto nelle seguenti lingue:
- NodeJS
- Java,
- Python
- C#
- Go.
Possiamo scrivere codice per AWS Lambda utilizzando la console AWS, AWS CLI, da Eclipse IDE, da Visual Studio IDE, framework serverless ecc.
La tabella seguente mostra un elenco di lingue e i diversi strumenti e IDE che possono essere utilizzati per scrivere la funzione Lambda:
linguaggio | IDE per la creazione di codice Lambda |
---|---|
NodeJS | Console AWS Lambda IDE di Visual Studio |
Giava | Eclipse IDE |
Pitone | Console AWS Lambda |
C # | IDE di Visual Studio .NET core |
Partire | Console AWS Lambda |
Distribuzione del codice Lambda
Dopo aver deciso la lingua in cui scrivere la funzione Lambda, ci sono due modi per distribuire il codice:
- Scrivi direttamente il codice nella console AWS
- Comprimi o comprimi i file con tutti i file e le dipendenze
Tuttavia, ricorda che è necessario dare il permesso appropriato per essere dato al file zip.
Test del codice Lambda
Il codice Lambda può essere testato per gli eventi all'interno della console AWS Lambda. È anche possibile testare la funzione Lambda dal cli AWS e dal cli serverless. La console AWS dispone anche di dati sugli eventi che possono essere utilizzati come eventi di esempio durante il test della funzione AWS Lambda.
Funzione di monitoraggio Lambda
Il monitoraggio della funzione Lambda può essere eseguito utilizzando AWS CloudWatch. Possiamo aggiungere i messaggi di log necessari nelle lingue che scegliamo e vedere lo stesso in AWS CloudWatch.
Per iniziare a scrivere la funzione Lambda, è necessario seguire uno schema. Di seguito sono riportati i principali concetti fondamentali da seguire per scrivere una funzione Lambda:
Gestore
Handler è un nome della funzione lambda AWS da cui inizia l'esecuzione. Viene visualizzato nella console AWS come mostrato di seguito:
Si noti che qui abbiamo cambiato il gestore predefinito con un altro nome e aggiornato lo stesso nel gestore -
Si noti che il modo in cui viene chiamato un gestore differisce dalle lingue selezionate come runtime.
I parametri sono passati al gestore
Se osservi la funzione handler, i parametri passati sono event, context e call back function come mostrato di seguito -
Event il parametro contiene tutti i dettagli per il trigger utilizzato.
Contextil parametro fondamentalmente si prende cura dei dettagli di runtime per l'esecuzione della funzione Lambda. Possiamo interagire con la funzione Lambda utilizzando ilcontextparam. Ha i dettagli come il tempo rimanente prima che AWS Lambda termini una funzione, ovvero il timeout specificato durante la creazione della funzione Lambda, il nome della funzione Lambda, il nome del gruppo di cloudwatch, i dettagli arn ecc.
Esempio
Cerchiamo di capire i dettagli ottenuti dall'oggetto contesto AWS Lambda con l'aiuto di un esempio:
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log("context object details");
console.log(JSON.stringify(context));
callback(null, 'Lambda test');
};
Quando esegui la funzione Lambda mostrata sopra, puoi vedere il seguente output:
Produzione
Il context i dettagli sono forniti come segue:
{
"callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction",
"logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName":
"myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":
"c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9",
"invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction"
}
Osserva che ha dettagli come functionName, memorylimit, requestId ecc.
Registrazione
I log aggiunti all'interno della funzione Lambda vengono visualizzati in AWS CloudWatch quando viene eseguita la funzione AWS. La sintassi dei registri varierà dalla lingua selezionata. Ad esempio innodejs, è console.log.
Questo è l'output che puoi vedere in AWSCloudWatch -
Gestione degli errori
La funzione AWS Lambda fornisce una funzione di callback che viene utilizzata per notificare alla funzione Lambda che si è verificato un errore o una riuscita. Nota che qui abbiamo usato nodejs come runtime. La gestione degli errori sarà diversa a seconda della lingua selezionata.
Osservare l'esempio fornito qui per una migliore comprensione:
exports.lambdahandler = (event, context, callback) => {
// TODO implement
var error = new Error("There is error in code");
callback(error);
};
Produzione
Quando provi il codice Lambda, puoi trovare l'output come mostrato di seguito:
I dettagli del registro come segue:
Nodejs è uno dei linguaggi supportati dalla funzione AWS Lambda. Le versioni supportate con nodejs sono v6.10 e v8.10. In questo capitolo, impareremo in dettaglio le varie funzionalità della funzione AWS Lambda in NODEJS.
Gestore in NodeJS
Per scrivere la funzione AWS Lambda in nodejs, dobbiamo prima dichiarare un gestore. Il gestore in nodejs è il nome del file e il nome della funzione di esportazione. Ad esempio, il nome del file èindex.js e il nome della funzione di esportazione è lambda handler, quindi il suo gestore corrispondente è index.lambdahandler
Osserva un gestore di esempio mostrato qui -
exports.lambdahandler = function(event, context, callback) { //code goes here}
Parametri al gestore
Il gestore è il nucleo principale per la creazione della funzione Lambda. Il gestore prende tre parametri:event, context e callback.
Parametro evento
Ha tutti i dettagli dell'evento attivato. Ad esempio, se stiamo utilizzando la funzione Lambda da attivare su S3, l'evento avrà i dettagli dell'oggetto S3.
Parametro contesto
Contiene i dettagli del contesto come le proprietà e i dettagli di configurazione della funzione Lambda.
Funzione di richiamata
Aiuta a restituire i dettagli al chiamante. La struttura del callback è la seguente:
callback(error, result);
I parametri della funzione di callback sono spiegati di seguito:
Error −Questo avrà i dettagli se si è verificato un errore durante l'esecuzione della funzione Lambda. Se la funzione Lambda riesce,null può essere passato come primo parametro per la funzione di callback.
Result −Questo fornirà i dettagli della corretta esecuzione della funzione lambda. Se si verifica un errore, il parametro del risultato viene ignorato.
Note −Non è obbligatorio utilizzare la funzione di callback in AWS Lambda. Nel caso in cui non sia presente alcuna funzione di callback, il gestore la restituirà come null.
Le firme di callback valide sono fornite di seguito:
callback(); // It will return success, but no indication to the caller
callback(null); // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error); // It will return the error indication to the caller
Ogni volta che AWS Lambda viene eseguito, i dettagli del callback come errore o riuscita, vengono registrati in AWS CloudWatch insieme ai messaggi della console, se presenti.
Lavorare con AWS Lambda in Nodejs8.10
Cerchiamo di capire come lavorare con AWS Lambda in nodejs8.10 e richiamare la funzione in modo sincronizzato e asincrono.
Richiamo della funzione Lambda in modo sincronizzato
Il seguente esempio ti dà un'idea di come invocare la funzione Lambda in modo sincronizzato:
exports.handler = function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
},2000);
});
}
let evennumber = countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
È possibile osservare il seguente output dopo aver testato questo codice nella console AWS:
Notare che l'output del codice precedente è un oggetto di promessa. Non fornisce il conteggio, poiché il conteggio viene incrementato all'interno di un setTimeout e la chiamata alla funzione non attende l'esecuzione all'interno di setTimeout e restituisce l'oggetto promise.
Se lo avessimo async/await sulla funzione handler otterrà l'output esatto di dalla funzione lambda.
Invocare il gestore in modo asincrono
Il seguente esempio ti dà un'idea di come invocare la funzione Lambda in modo asincrono:
exports.handler = async function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
}, 2000);
});
}
let evennumber = await countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Abbiamo aggiunto async e awaitnel codice sopra. Quando usiamoawaitaccanto alla chiamata alla funzione, l'esecuzione si ferma finché la promessa all'interno della funzione non viene risolta. Nota cheawait è valido solo per async funzioni.
È possibile osservare il seguente output dopo aver testato questo codice nella console AWS:
ContextDetails in NodeJS
L'oggetto contesto fornisce dettagli come il nome della funzione Lambda, il tempo rimanente in millisecondi, l'ID della richiesta, il nome del gruppo cloudwatch, i dettagli del timeout ecc.
Le tabelle seguenti mostrano l'elenco dei metodi e degli attributi disponibili con l'oggetto contesto:
Metodo disponibile per l'oggetto contesto
Suor n | Nome e descrizione del metodo |
---|---|
1 | getRemainingTimeInMillis() Questo metodo fornisce il tempo rimanente in millisecondi fino a quando la funzione Lambda non termina la funzione |
Attributi disponibili per oggetto contesto
Suor n | Nome e descrizione dell'attributo |
---|---|
1 | functionName Questo fornisce il nome della funzione AWS Lambda |
2 | functionVersion Ciò fornisce la versione della funzione AWS Lambda in esecuzione |
3 | nvokedFunctionArn Questo fornirà i dettagli ARN. |
4 | memoryLimitInMB Questo mostra il limite di memoria aggiunto durante la creazione della funzione Lambda |
5 | awsRequestId Questo fornisce l'ID richiesta AWS. |
6 | logGroupName Questo darà il nome del nome del gruppo di cloudwatch |
7 | logStreamName Questo darà il nome del nome del flusso di log di cloudwatch in cui sono scritti i log. |
8 | identity Questo fornirà dettagli sul provider di identità cognito di amazon quando utilizzato con aws mobile sdk. I dettagli forniti sono i seguenti:
|
9 | clientContext Questo fornirà i dettagli dell'applicazione client quando viene utilizzato con aws mobile sdk. I dettagli forniti sono i seguenti:
|
Guarda il seguente esempio per avere un'idea migliore dell'oggetto contesto:
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Remaining time =>', context.getRemainingTimeInMillis());
console.log('functionName =>', context.functionName);
console.log('AWSrequestID =>', context.awsRequestId);
console.log('logGroupName =>', context.log_group_name);
console.log('logStreamName =>', context.log_stream_name);
console.log('clientContext =>', context.clientContext);
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
È possibile osservare il seguente output dopo aver testato questo codice nella console AWS:
È possibile osservare il seguente output di log dopo aver testato questo codice nella console AWS:
Accesso a NodeJS
Possiamo usare console.log per accedere a NodeJS. I dettagli del log possono essere recuperati dal servizio CloudWatch sulla funzione Lambda.
Osservare il seguente esempio per una migliore comprensione:
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
È possibile osservare il seguente output dopo aver testato questo codice nella console AWS:
Puoi osservare il seguente screenshot da CloudWatch:
Gestione degli errori in NodeJS
Cerchiamo di capire come viene eseguita la notifica di errore in NodeJS. Rispettare il codice seguente:
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
È possibile osservare quanto segue nell'output del registro:
I dettagli dell'errore sono forniti nella richiamata come segue:
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}
In questo capitolo, vediamo in dettaglio come creare una semplice funzione AWS Lambda in Java in dettaglio.
Creazione di file JAR in Eclipse
Prima di procedere alla creazione di una funzione lambda in AWS, abbiamo bisogno del supporto del toolkit AWS per Eclipse. Per qualsiasi consiglio sull'installazione dello stesso, è possibile fare riferimento alEnvironment Setup capitolo in questo tutorial.
Una volta terminata l'installazione, segui i passaggi indicati qui:
Passo 1
Apri Eclipse IDE e crea un nuovo progetto con AWS Lambda Java Project. Osservare lo screenshot fornito di seguito per una migliore comprensione -
Passo 2
Una volta selezionato Next, ti reindirizzerà alla schermata mostrata di seguito -
Passaggio 3
Ora viene creato un codice predefinito per Tipo di input Custom. Dopo aver fatto clic suFinish pulsante il progetto viene creato come mostrato di seguito -
Passaggio 4
Ora, fai clic con il pulsante destro del mouse sul progetto ed esportalo. SelezionareJava / JAR file dal Export procedura guidata e fare clic su Next.
Passaggio 5
Ora, se fai clic su Next, ti verrà chiesto di salvare il file nella cartella di destinazione che ti verrà chiesto quando fai clic su Avanti.
Una volta salvato il file, torna alla Console AWS e crea la funzione AWS Lambda per Java.
Passaggio 6
Ora carica il file .jar file che abbiamo creato utilizzando il Upload pulsante come mostrato nello screenshot riportato di seguito -
Dettagli gestore per Java
Handler è package name e class name. Guarda il seguente esempio per comprendere il gestore in dettaglio:
Esempio
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
Si noti che dal codice sopra, il gestore sarà com.amazonaws.lambda.demo.LambdaFunctionHandler
Ora, testiamo le modifiche e vediamo l'output -
Oggetto contesto in Java
L'interazione con l'esecuzione di AWS Lambda viene eseguita utilizzando il contesto. Fornisce i seguenti metodi da utilizzare all'interno di Java:
Suor n | Metodi e descrizione del contesto |
---|---|
1 | getMemoryLimitInMB() questo fornirà il limite di memoria specificato durante la creazione della funzione lambda. |
2 | getFunctionName() questo darà il nome della funzione lambda. |
3 | getFunctionVersion() questo darà la versione della funzione lambda in esecuzione. |
4 | getInvokedFunctionArn() questo darà l'ARN utilizzato per invocare la funzione. |
5 | getAwsRequestId() questo darà l'id della richiesta aws. Questo ID viene creato per la funzione lambda ed è unico. L'ID può essere utilizzato con il supporto aws in caso di problemi. |
6 | getLogGroupName() questo fornirà il nome del gruppo aws cloudwatch collegato alla funzione lambda aws creata. Sarà nullo se l'utente iam non dispone dell'autorizzazione per la registrazione di cloudwatch. |
7 | getClientContext() questo fornirà dettagli sull'app e sul dispositivo quando utilizzato con aws mobile sdk. Fornirà dettagli come nome e codice della versione, ID client, titolo, nome del pacchetto dell'app. Può essere nullo. |
8 | getIdentity() questo fornirà dettagli sull'identità cognito di Amazon quando utilizzata con aws mobile sdk. Può essere nullo. |
9 | getRemainingTimeInMillis() questo darà il tempo rimanente di esecuzione in millisecondi quando la funzione viene terminata dopo il timeout specificato. |
10 | getLogger() questo darà il logger lambda collegato con l'oggetto contesto. |
Ora, aggiorniamo il codice dato sopra e osserviamo l'output per alcuni dei metodi sopra elencati. Osservare il codice di esempio fornito di seguito per una migliore comprensione:
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
System.out.println("AWS Lambda function name: " + context.getFunctionName());
System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
System.out.println("Cloudwatch group name " + context.getLogGroupName());
System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Una volta eseguito il codice sopra, puoi trovare l'output come indicato di seguito -
Registri per contesto
È possibile osservare il seguente output quando si visualizza l'output del registro:
La memoria allocata per la funzione Lambda è di 512 MB. Il tempo assegnato è di 25 secondi. Il tempo rimanente come mostrato sopra è 24961, che è in millisecondi. Quindi 25000 - 24961 che equivale a 39 millisecondi viene utilizzato per l'esecuzione della funzione Lambda. Tieni presente che anche il nome del gruppo Cloudwatch e l'ID richiesta vengono visualizzati come mostrato sopra.
Nota che abbiamo utilizzato il seguente comando per stampare i log in Java:
System.out.println (“log message”)
Lo stesso è disponibile in CloudWatch. Per questo, vai ai servizi AWS, selezionaCloudWatchservices e fare clic Logs.
Ora, se selezioni la funzione Lambda, visualizzerà la data dei log come mostrato di seguito -
Accesso a Java
Puoi anche utilizzare Lambdalogger in Java per registrare i dati. Osserva il seguente esempio che mostra lo stesso:
Esempio
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Il codice mostrato sopra ti darà il seguente output:
L'output in CloudWatch sarà come mostrato di seguito:
Gestione degli errori in Java per la funzione Lambda
Questa sezione spiegherà come gestire gli errori nella funzione Java per Lambda. Osserva il codice seguente che mostra lo stesso:
package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
throw new RuntimeException("Error from aws lambda");
}
}
Notare che i dettagli dell'errore vengono visualizzati in json formato con errorMessage Error from AWS Lambda. Anche ilErrorType e stackTrace fornisce maggiori dettagli sull'errore.
L'output e l'output di log corrispondente del codice sopra indicato saranno come mostrato nelle schermate seguenti riportate di seguito:
In questo capitolo, creeremo una semplice funzione AWS Lambda in Python e ne comprenderemo i concetti di lavoro seguendo i dettagli.
Prima di procedere alla creazione di una funzione Lambda in AWS, abbiamo bisogno del supporto del toolkit AWS per Python. A tal fine, seguire i passaggi indicati di seguito e osservare gli screenshot corrispondenti allegati:
Passo 1
Accedi alla console AWS e crea la funzione Lambda e seleziona la lingua come Python.
Passo 2
Ora fai clic su Create functione inserisci i dettagli per creare un semplice AWS Lambda in Python. Questo codice restituisce il messaggioHello from Lambda using Python e sembra come mostrato qui -
Passaggio 3
Ora salva le modifiche e prova il codice per vedere l'output. Dovresti vedere l'output ei log seguenti quando lo provi nella console AWS utilizzando il pulsante di test dall'interfaccia utente.
Passaggio 4
Ora puoi scrivere codice all'interno di qualsiasi editor o IDE per Python. Qui, stiamo usando il codice di Visual Studio per scrivere il codice. Successivamente dovresti comprimere il file e caricarlo nella console AWS.
Qui abbiamo zippato il codice e lo abbiamo utilizzato nella console AWS.
Passaggio 5
Ora seleziona Upload a .ZIP file opzione come mostrato di seguito -
Dettagli del gestore per Python
Notare che il gestore deve essere il nome del file seguito dal nome della funzione. Nel caso precedente, il nome del nostro file èhellopython.py e il nome della funzione è my_handler; così sarà il gestore hellopython.my_handler.
Una volta completato il caricamento e salvate le modifiche, vengono effettivamente visualizzati i dettagli del file zip nell'editor online nella console AWS Lambda. Ora, testiamo il codice per vedere l'output e i log.
Ora, comprendiamo i dettagli della funzione Lambda utilizzando il seguente codice di esempio:
def my_handler(event, context):
return "aws lambda in python using zip file"
Nel codice sopra, il nome della funzione my_handler ha 2 parametri, evento e contesto.
Oggetto contesto in Python
L'oggetto contesto fornisce dettagli come il nome della funzione Lambda, il tempo rimanente in millisecondi, l'ID della richiesta, il nome del gruppo di cloud watch, i dettagli del timeout ecc.
I metodi e gli attributi disponibili sull'oggetto contesto sono mostrati nelle tabelle fornite di seguito:
Suor n | Nome e descrizione del metodo |
---|---|
1 | get_remaining_time_in_millis() Questo metodo fornisce il tempo rimanente in millisecondi fino a quando la funzione lambda non termina la funzione |
Suor n | Attributo e descrizione |
---|---|
1 | function_name Questo fornisce il nome della funzione lambda aws |
2 | function_version Questo fornisce la versione della funzione aws lambda in esecuzione |
3 | invoked_function_arn Questo fornirà i dettagli ARN. |
4 | memory_limit_in_mb Questo mostra il limite di memoria aggiunto durante la creazione della funzione lambda |
5 | aws_request_id Questo fornisce l'ID richiesta aws. |
6 | og_group_name Questo darà il nome del nome del gruppo di cloudwatch |
7 | log_stream_name Questo darà il nome del nome del flusso di log di cloudwatch in cui sono scritti i log. |
8 | identity Questo fornirà dettagli sul provider di identità cognito di amazon quando utilizzato con aws mobile sdk. I dettagli forniti sono i seguenti:
|
9 | client_context Questo fornirà i dettagli dell'applicazione client quando viene utilizzato con aws mobile sdk. I dettagli forniti sono i seguenti:
|
Vediamo un esempio funzionante in Python che restituisce i dettagli del contesto. Rispettare il codice riportato di seguito -
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
Di seguito è riportato l'output corrispondente del codice mostrato sopra:
Registrazione tramite Python
Per registrare le informazioni usando Python, possiamo usare la funzione print o logger disponibile. Usiamo l'esempio di contesto sopra e controlliamo inCloudWatch per vedere se i log vengono stampati. Rispettare il codice seguente:
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
L'output di questo codice in CloudWatch è come mostrato di seguito:
Osservare il seguente esempio per comprendere come utilizzare il logger per stampare i log su CloudWatch:
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
logger.info('Using logger to print messages to cloudwatch logs')
return "aws lambda in python using zip file"
L'output per questo sarà come mostrato nello screenshot riportato di seguito -
Gestione degli errori in Python per la funzione Lambda
In questa sezione, vediamo un esempio funzionante che mostra come gestire gli errori in Python. Osserva il pezzo di codice qui fornito -
def error_handler(event, context):
raise Exception('Error Occured!')
La visualizzazione del registro è come mostrato nell'immagine qui -
Il supporto Go Language è una recente aggiunta ad AWS. Per lavorare con Go, devi selezionare la lingua dalla console AWS durante la creazione della funzione AWS Lambda. In questo capitolo, impariamo in dettaglio la funzione AWS Lambda nel linguaggio Go.
Installazione di Go
Per iniziare abbiamo bisogno del supporto di Go Language. In questa sezione, esamineremo i seguenti dettagli per iniziare a lavorare con AWS Lambda in Go. Questo è il sito ufficiale per il download di Go:https://golang.org/dl/
Ora scarica il pacchetto come da sistema operativo. Seguire la procedura qui fornita per installare Go sul rispettivo sistema operativo.
Installazione su Windows
Si noti che per Windows è disponibile il download a 32 e 64 bit. Scarica il file zip ed estrai il contenuto e memorizzalo in una directory a tua scelta.
Aggiungi le variabili d'ambiente disponibili su ControlPanel ---> System ---> Advanced system settings.
Ora fai clic su Environment Variables pulsante e aggiungi il percorso della directory come mostrato qui -
Puoi anche modificare la variabile di sistema come mostrato qui -
Una volta completati questi passaggi, dovresti essere in grado di iniziare a lavorare con Go. Apri il prompt dei comandi e controlla il comando Vai per la versione. Osserva lo screenshot seguente per lo stesso.
Installazione per Linux e Mac OS
Per installare i pacchetti su Linux e Mac OS, seguire le istruzioni come mostrato di seguito -
Disimballare i pacchetti e conservarli nella posizione /usr/local/go. Ora aggiungi/usr/local/go/binalla variabile d'ambiente PATH. Può essere fatto usando/etc/profile o $HOME/.profile.
A tale scopo, puoi utilizzare il seguente comando
export PATH=$PATH:/usr/local/go/bin
Per aggiungere AWS support a per Windows, Linux e mac, utilizza quanto segue nella riga di comando git:
go.exe get -u github.com/aws/aws-lambda-go/lambda
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
Per compilare il codice Windows / Linux / Mac, utilizzare i seguenti comandi:
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Funzione AWS Lambda utilizzando GO
Un programma restituito in Go quando la build fornisce un file eseguibile. Di seguito è riportato un semplice programma in Go con supporto AWS Lambda. Dobbiamo importare il filegithub.com/aws/aws-lambda-go/lambda, poiché ha la funzionalità di programmazione Lambda. Un'altra esigenza importante per AWS Lambda è il gestore.
Main.go
// main.go
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Si noti che l'esecuzione del file Goil programma parte da main dove lambda. start viene chiamato con la funzione handler. Rispettare il codice mostrato di seguito -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Ora, eseguiamo il file sopra usando il comando Go e quindi comprimiamo il file eseguibile.
La struttura del file che abbiamo utilizzato è come mostrato qui -
Con go build, crea un file eseguibile chiamato main.exe. Per comprimere il file e caricarlo in AWS Lambda, puoi utilizzare la seguente procedura:
Per compilare il codice Windows / Linux / Mac, utilizzare i seguenti comandi:
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Quindi, accedi alla console AWS e crea la funzione Lambda utilizzando Go come runtime -
Una volta creata la funzione, carica il file zip eseguibile creato sopra.
Gestore della funzione Lambda con Go
Handler è dove inizia l'esecuzione del programma Go. Dalla chiamata principale alambda.start, l'esecuzione viene chiamata con la funzione handler. Notare che il gestore da aggiungere saràmain.
Osserva il codice qui per una comprensione -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Segui gli screenshot riportati di seguito:
Ora salva la funzione e provala. Puoi vedere il risultato dell'esecuzione come mostrato qui.
L'output del registro corrispondente sarà come mostrato qui -
Oggetto contesto con Go
AWS Lambda in Go fornisce le seguenti variabili globali e proprietà per il contesto.
MemoryLimitInMB - Limite di memoria, in MB configurato in aws lambda.
FunctionName - nome della funzione lambda aws.
FunctionVersion - la versione della funzione aws lambda in esecuzione.
LogStreamName - nome del flusso di registro di cloudwatch.
LogGroupName - nome del gruppo cloudwatch.
Le proprietà disponibili in contesto sono riportate come sotto -
AwsRequestID
Questo è l'ID richiesta AWS che ottieni quando viene richiamata la funzione AWS Lambda.
ClientContext
Contiene dettagli sull'applicazione client e sul dispositivo quando viene richiamato tramite AWS Mobile SDK. Può essere nullo. Il contesto client fornisce dettagli come ID client, titolo dell'applicazione, nome della versione, codice della versione e nome del pacchetto dell'applicazione.
InvokedFunctionArn
L'ARN della funzione invocata. Un ARN non qualificato esegue la versione $ LATEST e gli alias eseguono la versione della funzione a cui punta.
Identità
Fornisce dettagli sul provider di identità Amazon Cognito se utilizzato con AWS Mobile SDK.
Le modifiche aggiunte a main.go per stampare i dettagli del contesto -
// main.go
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/lambdacontext"
)
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Dobbiamo importare il file log e lambda contextper usarlo con Go. I dettagli del contesto sono i seguenti:
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
È possibile osservare il seguente output durante il test del codice sopra:
Registrazione dei dati
Con Go è possibile registrare i dati utilizzando il modulo log o fmt come mostrato di seguito -
// main.go
package main
import (
"log"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
log.Print("Hello from Lambda Go using log");
fmt.Print("Hello from Lambda Go using fmt");
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
L'output per lo stesso è come mostrato di seguito:
Verifica dei log in CloudWatch
Puoi anche vedere i log in CloudWatch. Per questo, vai al servizio AWS e seleziona cloudwatch e fai clic suLogssul lato sinistro. Ora cerca la funzione Lambda nell'elenco per vedere i log -
Errori di funzione
Puoi creare una gestione degli errori personalizzata in AWS Lambda utilizzando il modulo degli errori come mostrato nel codice seguente:
// main.go
package main
import (
"errors"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() error {
return errors.New("There is an error in the code!")
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
L'output per il codice mostrato sopra è il seguente:
Questo capitolo spiegherà in dettaglio come lavorare con la funzione AWS Lambda in C #. Qui utilizzeremo Visual Studio per scrivere e distribuire il codice in AWS Lambda. Per qualsiasi informazione e aiuto sull'installazione di Visual Studio e sull'aggiunta del toolkit AWS a Visual Studio, fare riferimento alIntroductioncapitolo in questo tutorial. Una volta terminata l'installazione di Visual Studio, seguire i passaggi indicati di seguito. Fare riferimento ai rispettivi screenshot per una migliore comprensione -
Passo 1
Apri il tuo Visual Studio e segui i passaggi per creare un nuovo progetto. Clicca suFile -> New -> Project.
Passo 2
Ora, viene visualizzata la seguente schermata in cui si seleziona AWS Lambda for Visual C#. SelezionareAWS Lambda Project (.NET Core).
È possibile modificare il nome se necessario, manterrà qui il nome predefinito. ClicOK continuare.
Il passaggio successivo ti chiederà di selezionare un file Blueprint.
Selezionare Empty function per questo esempio e fare clic su Finish. Creerà una nuova struttura del progetto come mostrato di seguito:
Ora seleziona Function.cs che è il file principale in cui viene creato il gestore con evento e contesto per AWS Lambda.
La visualizzazione del file Functions.cs è la seguente:
È possibile utilizzare il comando fornito di seguito per serializzare i parametri di input e output nella funzione AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Dettagli del gestore per C #
Il gestore viene visualizzato come segue:
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
I vari componenti del codice precedente sono spiegati di seguito:
FunctionHandler −Questo è il punto di partenza della funzione C # AWS Lambda.
String input − I parametri al gestore string input ha tutti i dati dell'evento come l'oggetto S3, i dettagli del gateway API ecc.
ILambdaContext context −ILamdaContext è un'interfaccia con dettagli di contesto. Ha dettagli come il nome della funzione lambda, i dettagli della memoria, i dettagli del timeout ecc.
Il gestore Lambda può essere richiamato in modo sincronizzato e asincrono. Se invocato in modo sincronizzato come mostrato sopra, puoi avere il tipo restituito. Se async, il tipo restituito deve essere void.
Ora, distribuiamo AWS Lambda C # e testiamo lo stesso. Fare clic con il pulsante destro del mouse sul progetto e fare clicPublish to AWS Lambda come mostrato di seguito -
Riempi il file Function Name e fare clic su Next. La schermata successiva visualizzata èAdvanced Function Details come mostrato -
Inserisci il Role Name, Memory e Timeout. Si noti che qui abbiamo selezionato il ruolo esistente creato e utilizzato la memoria come 128 MB e il timeout come 10 secondi. Una volta fatto clicUpload per pubblicare sulla console AWS Lambda.
È possibile visualizzare la seguente schermata una volta caricata la funzione AWS Lambda. ClicInvokeper eseguire la funzione AWS Lambda creata. Al momento, mostra un errore in quanto necessita di input come da codice scritto.
Ora, inseriamo alcuni input di esempio e Invokenuovamente. Si noti che qui abbiamo inserito del testo nella casella di input e lo stesso facendo clicinvokeviene visualizzato in maiuscolo nella sezione della risposta. L'output del registro viene visualizzato di seguito:
Ora, controlliamo anche la console AWS per vedere se la funzione è stata creata poiché abbiamo distribuito la funzione da Visual Studio.
La funzione Lambda creata sopra è aws lambda using csharp e lo stesso viene visualizzato nella console AWS come mostrato negli screenshot riportati di seguito -
Firma del gestore
Il gestore è il punto di partenza per l'esecuzione di AWS. Il nome del gestore dovrebbe essere definito come -
ASSEMBLY::TYPE::METHOD
I dettagli della firma sono spiegati come di seguito:
ASSEMBLY- Questo è il nome dell'assembly .NET per l'applicazione creata. Fondamentalmente è il nome della cartella da cui viene creato il progetto.
TYPE- Questo è il nome del gestore. È fondamentalmente il namespace.classname.
METHOD - Questo è il nome del gestore della funzione.
Il codice per la firma del gestore è come mostrato di seguito:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda3 {
public class Function {
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
}
}
Nota che qui l'assemblaggio è AWSLamda3, Type è namespace.classname che è AWSLambda3.Function e il metodo è FunctionHandler. Pertanto, la firma del gestore èAWSLamda3::AWSLambda3.Function::FunctionHandler
Oggetto contesto in C #
L'oggetto Context fornisce informazioni utili sul runtime nell'ambiente AWS. Le proprietà disponibili nell'oggetto contesto sono come mostrato nella seguente tabella:
Suor n | Proprietà e descrizione |
---|---|
1 | MemoryLimitInMB Ciò fornirà i dettagli della memoria configurata per la funzione AWS Lambda |
2 | FunctionName Nome della funzione AWS Lambda |
3 | FunctionVersion Versione della funzione AWS Lambda |
4 | InvokedFunctionArn ARN utilizzato per richiamare questa funzione. |
5 | AwsRequestId ID richiesta AWS per la funzione AWS creata |
6 | LogStreamName Nome del flusso di log di Cloudwatch |
7 | LogGroupName Nome del gruppo Cloudwatch |
8 | ClientContext Informazioni sull'applicazione client e sul dispositivo quando utilizzato con AWS Mobile SDK |
9 | Identity Informazioni sull'identità di amazon cogbnito se utilizzata con AWS Mobile SDK |
10 | RemainingTime Tempo di esecuzione rimanente fino al termine della funzione |
11 | Logger Il logger associato al contesto |
Esempio
In questa sezione, testiamo alcune delle proprietà precedenti in AWS Lambda in C #. Osservare il codice di esempio fornito di seguito -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda6 {
public class Function {
/// <summary>
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
}
}
L'output correlato che è possibile osservare quando si richiama il codice precedente in C# è come mostrato di seguito -
L'output correlato che è possibile osservare quando si richiama il codice precedente in AWS Console è come mostrato di seguito -
Registrazione tramite C #
Per la registrazione, puoi utilizzare due funzioni:
context.Logger.Log
LambdaLogger.Log
Osservare il seguente esempio mostrato qui:
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
L'output corrispondente per il codice dato sopra è mostrato qui -
Puoi ottenere i log da CloudWatch come mostrato di seguito:
Gestione degli errori in C # per la funzione Lambda
Questa sezione illustra la gestione degli errori in C #. Per la gestione degli errori,Exception la classe deve essere estesa come mostrato nell'esempio mostrato sotto:
esempio
namespace example {
public class AccountAlreadyExistsException : Exception {
public AccountAlreadyExistsException(String message) :
base(message) {
}
}
}
namespace example {
public class Handler {
public static void CreateAccount() {
throw new AccountAlreadyExistsException("Error in AWS Lambda!");
}
}
}
L'output corrispondente per il codice sopra riportato è il seguente:
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}
Nei capitoli precedenti, abbiamo imparato come creare la funzione AWS Lambda nella console AWS. Tuttavia, esistono altri parametri per la creazione di una funzione Lambda. Questi includono allocazione della memoria, timeout ecc.
In questo capitolo, comprendiamo in dettaglio le seguenti proprietà di configurazione per AWS Lambda.
Allocazione della memoria
Accedi alla console AWS e crea o seleziona la funzione lambda esistente. Clicca ilConfigurationscheda per ottenere i dettagli della memoria allocata. Guarda lo screenshot mostrato di seguito -
Notare che per impostazione predefinita la memoria allocata è 128MB. Se vuoi aumentare la memoria puoi fare clic sul cursore.
La memoria verrà incrementata a 64MBmentre sposti il cursore. Osserva che la memoria massima disponibile è3008MB. Guarda lo screenshot mostrato di seguito -
Puoi anche usare aws clidal prompt dei comandi per aumentare il limite di memoria. Dovrai dare la memoria in incrementi di 64 MB.
Ora, aumentiamo il limite di memoria di AWS Lambda con il nome:myfirstlambdafunction.
I dettagli della memoria della funzione sono mostrati nella schermata riportata di seguito -
Il comando utilizzato per modificare la memoria utilizzando aws cli è il seguente -
aws lambda update-function-configuration --function-name your function name --
region region where your function resides --memory-size memory amount --
profile admin user
L'output corrispondente della funzione AWS Lambda myfirstlambdafunctionnella console AWS è mostrato qui. Osserva che la memoria è cambiata da 128 MB a 256 MB.
Tempo di esecuzione massimo
Il timeout è il tempo assegnato alla funzione AWS Lambda per terminare se si verifica il timeout. La funzione AWS Lambda verrà eseguita entro il tempo assegnato o terminerà se supera il timeout specificato. È necessario valutare il tempo necessario per l'esecuzione della funzione e di conseguenza selezionare il tempo inConfiguration scheda nella console AWS come mostrato di seguito:
Ruolo IAM
Quando si crea la funzione AWS Lambda, è necessario assegnare il ruolo o l'autorizzazione. Nel caso in cui sia necessario AWS Lambda per S3 o dynamoDB, è necessario assegnare l'autorizzazione per i servizi di lambda. In base al ruolo assegnato, AWS Lambda deciderà i passaggi da eseguire. Ad esempio, se si concede l'accesso completo a dynamodb, è possibile aggiungere, aggiornare ed eliminare le righe dalla tabella dynamodb.
Nome gestore
Questo è l'inizio dell'esecuzione della funzione AWS Lambda. La funzione Handler ha i dettagli dell'evento attivato, dell'oggetto di contesto e del callback che deve essere rispeditosuccess o error di AWS Lambda.
Il formato della funzione handler in nodejs è mostrato qui -
exports.handler = (event, context, callback) => {
callback(null, "hello from lambda");
};
Funzione Lambda che utilizza variabili d'ambiente
In questa sezione creeremo una semplice funzione Lambda utilizzando le variabili d'ambiente aggiunte nella sezione di configurazione. A tal fine, seguire i passaggi indicati di seguito e fare riferimento ai rispettivi screenshot -
Passo 1
Vai alla console AWS e crea una funzione in Lambda come mostrato.
Passo 2
Ora aggiungi le variabili d'ambiente come mostrato -
Passaggio 3
Ora, recuperiamo lo stesso nel codice Lambda come segue:
exports.handler = (event, context, callback) => {
var hostName = process.env.host;
var userName = process.env.username;
callback(null, "Environment Variables =>"+hostName+" and "+userName);
};
Passaggio 4
Per ottenere i dettagli dalle variabili di ambiente che dobbiamo utilizzare process.envcome mostrato. Nota che questa sintassi è perNodeJS runtime.
var hostName = process.env.host;
var userName = process.env.username;
Passaggio 5
L'output per la funzione Lambda in esecuzione sarà come mostrato -
Possiamo creare la funzione Lambda e testarla nella console AWS. Questo capitolo discute questo in dettaglio. A tale scopo, dovrai seguire i passaggi indicati qui e osservare i rispettivi screenshot forniti -
Passo 1
Accedi alla Console AWS https://aws.amazon.com/console/. Ora verrai reindirizzato alla schermata in cui vengono visualizzati i servizi AWS.
Passo 2
Ora fai clic su Lambdaservizio come evidenziato sopra. Questo reindirizzerà per creare la funzione come mostrato di seguito -
Passaggio 3
Ora fai clic su Create functione inserisci i dettagli della funzione. Quindi puoi vedere una schermata come mostrato di seguito -
Passaggio 4
Puoi scrivere il tuo codice scegliendo la lingua che preferisci. Il codice deve essere scritto nell'editor se l'opzione selezionata è edit code inline. Le altre opzioni disponibili sono le seguenti:
Passaggio 5
Una volta terminato è necessario salvare le modifiche per le quali viene fornito il pulsante nell'angolo in alto a destra come mostrato di seguito -
Passaggio 6
Ora fai clic su Testpulsante. Questo fornisce tutti i dettagli sull'esecuzione della funzione Lambda come mostrato di seguito:
Passaggio 7
Il codice per index.js è il seguente -
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Lambda test');
};
Questo chiamerà il file Callback functione il risultato può essere errore o successo. In caso di successo vedrai un fileLambda testMessaggio; in caso di errore passerà null.
Passaggio 8
Il Role i dettagli per la funzione Lambda fanno parte della configurazione e vengono visualizzati come mostrato di seguito:
Passaggio 9
Ora puoi aggiornare il ruolo se necessario e salvare la funzione Lambda. Quindi, i dettagli della memoria e del timeout per la funzione lambda vengono visualizzati come mostrato di seguito:
Passaggio 10
Ora, dobbiamo aggiungere un trigger alla funzione Lambda in modo che venga eseguito quando si verifica l'evento. I dettagli del trigger vengono visualizzati all'inizio della schermata della funzione AWS Lambda come mostrato di seguito:
Da questo, puoi selezionare il trigger che desideri venga attivato dalla funzione Lambda. Quando si seleziona il trigger, è necessario aggiungere i dettagli di configurazione per il trigger.
Ad esempio, per il trigger su S3 i dettagli di configurazione da aggiungere sono i seguenti:
Passaggio 11
Ora seleziona il bucket su cui desideri attivare il trigger. Il tipo di evento ha i seguenti dettagli:
Passaggio 12
Per il trigger, puoi anche menzionare il tipo di prefisso files o file pattern, Lambda deve essere trigger. I dettagli sono come mostrato -
Passaggio 13
Ora, inserisci i dettagli richiesti per il trigger e fai clic Add Salva la funzione Lambda affinché venga aggiunto il trigger Il salvataggio della funzione distribuisce i dettagli e da ora in poi ogni volta che i file vengono aggiunti al bucket S3, Lambda verrà attivato.
Osserva lo screenshot seguente che mostra il trigger S3 aggiunto ad AWS Lambda:
Passaggio 14
Ora, utilizziamo l'evento di esempio S3 per testare la funzione Lambda. Il codice per lo stesso è mostrato qui -
Evento di esempio Put di Amazon S3
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"ExampleIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Examplebucket",
"ownerIdentity": {
"principalId": "Example"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "Example123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "Example123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "Example"
},
"eventSource": "aws:s3"
}]
}
Dovrai utilizzare il seguente comando per ottenere i dettagli del file caricato dall'evento put di S3 -
event.Records[0].s3.object.key //will display the name of the file
Dovrai utilizzare il seguente comando per ottenere il nome del bucket:
event.Records[0].s3.bucket.name //will give the name of the bucket.
Dovrai utilizzare il seguente comando per ottenere EventName:
event.Records[0].eventName // will display the event name
Passaggio 15
Ora, aggiorniamo il codice AWS Lambda per stampare i dettagli S3 come mostrato di seguito:
exports.lambdahandler = (event, context, callback) => {
callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"
File name:"+event.Records[0].s3.object.key );
};
Passaggio 16
Salva le modifiche. ClicTest e accedi all'evento di esempio S3 -
Passaggio 17
Ora fai clic Test e puoi vedere l'output come mostrato -
Passaggio 18
Per testare il trigger su S3 utilizzando il servizio AWS S3, carica un file nel bucket S3: test bucket trigger. Aggiorna il ruolo utilizzato con Lambda per accettare i criteri S3 e SES (per inviare posta) per le autorizzazioni. Questo aggiornerà il codice AWS Lambda per inviare la posta e vedere il trigger in funzione -
Il codice AWS Lambda aggiornato è come mostrato:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.lambdahandler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "Bucket name: "+event.Records[0].s3.bucket.name+" File name:"+event.Records[0].s3.object.key
}
},
Subject: {
Data: "S3 and AWS Lambda"
}
},
Example: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Lo screenshot corrispondente è come mostrato qui -
Passaggio 19
Ora carica il file e controlla l'ID di posta fornito nel codice AWS Lambda -
AWS CLIè uno strumento a riga di comando che aiuta a lavorare con i servizi AWS. Possiamo usarlo per creare, aggiornare, eliminare, richiamare la funzione lambda aws. In questo capitolo, parlerai in dettaglio dell'installazione e dell'utilizzo di AWS CLI.
Installazione di AWS CLI
Questa sezione ti guiderà attraverso l'installazione di AWS CLI su vari sistemi operativi. Segui i passaggi indicati e osserva gli screenshot corrispondenti ovunque allegati.
Per Windows
Controlla la configurazione di Windows e scegli uno dei seguenti collegamenti per l'installazione di AWS CLI MSI:
Per Windows 64 bit: installazione MSI di AWS CLI per Windows (64 bit)
Per Windows a 32 bit: installazione MSI di AWS CLI per Windows (32)
Una volta scelto il collegamento corrispondente e fatto clic su di esso, è possibile trovare una finestra come mostrato qui -
Quindi, imposta il file Environment path in windows come mostrato negli screenshot qui sotto -
Una volta terminato, puoi utilizzare il seguente comando nel prompt dei comandi, per vedere se aws cli è installato -
aws --version
Visualizza i dettagli della versione di aws-cli come mostrato nella seguente schermata:
Per Linux / Mac
Per l'installazione su Linux e Mac, è necessario Python 2.6.3 o versione successiva. Quindi, utilizzare i seguenti comandi per ulteriori processi di installazione:
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Ora dobbiamo configurare le impostazioni di AWS. È possibile utilizzare il seguente comando per questo scopo:
aws configure
A tal fine, richiede dettagli come:
- ID chiave di accesso AWS
- Chiave di accesso segreta AWS
- Nome della regione predefinito
- Output predefinito dal formato
Puoi ottenere questi dettagli dalla tua console aws. Vai al tuo nome account nell'angolo in alto a destra come mostrato -
Ora fai clic su My Security Credentialse seleziona gli utenti dal lato sinistro. Aggiungi utente con i dettagli come richiesto.
Aggiungi l'utente e per ottenere la chiave di accesso e la chiave segreta. Per vedere la nuova chiave di accesso, scegliShow. Le tue credenziali appariranno come mostrato di seguito:
Access key ID − AOSAIOSFOCDD7Example
Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY
Comandi di riferimento per AWS CLIS
La tabella seguente fornirà i riferimenti ai comandi disponibili con cui lavorare aws cli.
Nome del comando aws cli | Riferimento ai comandi |
---|---|
create-function | create-function --function-name <value> --runtime <value> --role <value> --handler <value> [--code <value>] [--description <value>] [--timeout < valore>] [--memory-size <valore>] [--environment <value>] [--kms-key-arn <value>] [--tags <value>] [--zip-file <value> ] [--cli-input-json <valore>] |
list-functions | list-functions [--master-region <value>] [--function-version <value>] [--max-items <value>] [--cli-input-json <value>] [--starting- token <valore>] [--page-size <valore>] [--generate-cli-skeleton <valore>] |
get-function | get-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-function-configuration | get-function-configuration --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-account-settings | get-account-settings [--cli-input-json <valore>] [--generate-cli-skeleton <valore>] |
update-function-configuration | update-function-configuration --function-name <value> [--role <value>] [--handler <value>] [--description <value>] [--timeout <value>] [--memory- size <value>] [--vpc-config <value>] [--environment <value>] [--runtime <value>] [--dead-letter-config <value>] [--kms-key- arn <value>] [--tracing-config <value>] [--revision-id <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
update-function-code | codice-funzione-aggiornamento - nome-funzione <valore> [--zip-file <valore>] [--s3-bucket <valore>] [--s3-key <valore>] [--s3-oggetto- versione <valore>] [--publish | --no-publish] [--dry-run | --no-dry-run] [--revision-id <valore>] [- cli-input-json <valore>] [- generate-cli-skeleton <valore>] |
delete-function | funzione-cancellazione - nome-funzione <valore> [--qualifier <valore>] [--cli-input-json <valore>] [--generate-cli-skeleton <valore>] |
Ora, discutiamo questi comandi uno per uno in dettaglio.
funzione di creazione
Questa API creerà una nuova funzione lambda. Il codice deve essere fornito in formato zip. Se la funzione da creare esiste già, l'API fallirà. Notare che il nome della funzione fa distinzione tra maiuscole e minuscole.
Comandi inclusi
L'elenco dei comandi che puoi usare con create-function è fornito qui:
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Opzioni incluse
Le varie opzioni che è possibile utilizzare con le funzioni di cui sopra sono le seguenti:
--function-name (string)- Questo prende il nome della funzione. Il nome può contenere caratteri a 64 bit.
--runtime(string)- Qui è necessario specificare l'ambiente di runtime, ovvero la selezione della lingua. I dettagli del runtime sono indicati di seguito:
Opzioni disponibili | runtime |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Giava | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Partire | go1.x |
--role(string)- Questo sarà il nome della lambda policy ovvero il ruolo da attribuire alla funzione lambda per l'accesso ad altri servizi. Avrà l'autorizzazione secondo il ruolo specificato.
--handler (string) - Questo è il nome del gestore da cui inizierà l'esecuzione del codice lambda.
- Per nodejs, il nome del gestore è il nome del modulo che esportiamo.
- Per java, è package.classname :: handler o package.classname
- Per python, il gestore è il nome del file.
--code (structure) −Codice AWS Lambda
--description (string) - descrizione per la funzione AWS Lambda
--timeout (integer)- timeout avrà il momento in cui la funzione lambda deve terminare l'esecuzione. L'impostazione predefinita è 3s.
--memory-size (integer)- Questa è la memoria data alla funzione lambda aws. AWS allocherà la quantità di CPU e allocazione di memoria in base alla memoria fornita.
--environment (structure) - è un oggetto con i dettagli dell'ambiente richiesti nella funzione lambda aws.
e.g : Variables = {Name1 = string, Name2 = string}
--kms-key-arn (string)- questo è il nome della risorsa Amazon (ARN) utilizzato per crittografare le variabili di ambiente. Se non viene fornito, verranno utilizzate le impostazioni predefinite per la crittografia.
--zip-file (blob) - percorso del file zip che contiene i dettagli del codice.
--cli-input-json (string): Esegue l'operazione di servizio in base alla stringa JSON fornita. La stringa JSON segue il formato fornito da --generate-cli-skeleton. Se vengono forniti altri argomenti nella riga di comando, i valori CLI sovrascriveranno i valori forniti da JSON.
Ora, creiamo una semplice funzione AWS Lambda utilizzando il runtime come nodejs e aggiungiamo alcuni console.log da stampare.
Considera un codice di esempio per capire lo stesso -
exports.handler = async (event) => {
console.log("Using aws cli");
return 'Hello from Lambda from aws cli!'
};
Ora, comprimi il file e memorizzalo come awscli.zip.
Ottenere ARN
Per il ruolo, usiamo il arndal ruolo esistente che abbiamo creato. Per ottenere l'ARN, dovrai seguire i passaggi come mostrato qui. Osserva i rispettivi screenshot ovunque allegati -
Passo 1
Vai a IAM e seleziona il ruolo da cui desideri Roles. I dettagli ARN per il ruolo vengono visualizzati come mostrato di seguito. UsoRole ARN con create-function in aws cli.
Osserva qui che il ruolo arn è: arn: aws: iam :: 625297745038: role / lambdaapipolicy
Il comando con valori per create-function è il seguente -
aws lambda create-function
--function-name "awslambdausingcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "awscli.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://awscli.zip"
Ora, se esegui il comando in aws cli, puoi trovare un output come mostrato di seguito:
Nella console AWS, la funzione Lambda viene visualizzata come mostrato di seguito:
I dettagli delle funzioni sono come mostrato qui -
I dettagli della configurazione sono i seguenti:
È possibile testare la funzione e controllare l'output come mostrato -
L'output del registro corrispondente è mostrato qui -
funzioni-lista
Questa API fornisce l'elenco delle funzioni create finora in AWS Lambda.
Comandi inclusi
I seguenti sono i comandi associati a questa API:
list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]
Opzioni sotto funzioni elenco
Le seguenti sono varie opzioni che puoi usare in questa API di funzioni elenco:
--master-region(string)- opzionale. La regione da cui devono essere visualizzate le funzioni.
--function-version(string)- opzionale. Questo darà la versione della funzione.
--max-items(integer)- opzionale. Questo darà gli articoli come per il valore specificato.
--cli-input-json(string)- opzionale. Eseguirà l'operazione in base al file json fornito.
Il comando con i valori list-functions è il seguente -
aws lambda list-functions --max-items 3
Il comando visualizza i dettagli come segue:
get-function
Questa API fornirà i dettagli delle funzioni e anche un collegamento URL che ha il file zip caricato utilizzando create-function. L'URL con i dettagli dello zip sarà valido solo per 10 minuti.
Comandi inclusi
Di seguito sono riportati i comandi associati a questa API:
get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Opzioni incluse
--function-name- Nome della funzione AWS Lambda. Puoi anche specificare Amazon Resource Name della funzione.
--qualifier(string)- Facoltativo. La versione della funzione può essere utilizzata per ottenere i dettagli della funzione.
Il comando con i valori per get-function sono -
aws lambda get-function --function-name awslambdausingcli
I dettagli di visualizzazione dei comandi sono i seguenti:
Fornisce l'URL con il codice postale caricato. Nel caso precedente l'URL è:
https://prod-04-2014-
tasks.s3.amazonaws.com/snapshots/625297745038/awslambdausingcli-97048f8d-4a08
-4ed9-99d9-acb00d2063d2?versionId=d04HKvPu9S2zz8pzjbW6Rmf5o5fxnc_r&X-Amz-Security
-Token=FQoDYXdzEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDCpTmGvtwKToPBiWcyK3A96UcJEnwvYDhMbbxu
%2Bg2gffK2ocfnlEeiCHak8QqqE1RFpbKrdks9NzxP9gNbagL4M9RValxJ1a9PUY%2FOdAekscRHOiX00MVAxUlI8
2pKryhdOwLJWSj0uRzqvOxCcBwJenHrSNPeG6lMa2ZDo0qZFEUDONSaTg4nuSnJK1f6t3pMAKu4vF9wPvf92G%2BU
60rUxwleggigISmD9l1IlZse3%2BVF1JlNuN%2F5d85v0y2Q%2F%2BO515CybcZpn91sHPYG8JMJ00LsrkQ2Ww4VU
9Zz5c5QYH4JYPj0CyEgSz9b%2FMceMPpOoPUAMjctb%2FEwQqcShZeqAr9%2Fcd2ZI%2BXl2%2Bs4ri0ucgPvQQvs
eGIIiZbX3GqdwR2jb1nylrAEIfiuFMoSWfcFYoYtuL0MZnjGR9jy2GNkp6MB%2BlHHr7%2BnuFRUzU26rgDYmdE1w
Rb3%2B21Jm49WGDa9opRLvUxFaux57Or70haib2FuKzN6Gf3Vzzk5KPdWsYUpaLyf%2B1ovEytOZhB1JEXuCs%2FG
IlOXS88yxT%2BpOKmyxweiezpGgI%2FAkSAQTbSRsYQKIOFyIJNHzplwrJKhy28vy60numIBIo9Zqq2AU%3D
&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180527T112426Z&X-Amz-
SignedHeaders=host&X-Amz-Expires=600&X-Amz-
Credential=ASIAICSQHLSBWFP37U4Q%2F20180527%2Fus-
east-1%2Fs3%2Faws4_request&X-Amz-Signature=
8b97e7d6d7da13313068e027894d2c875be5e50a0c5a62550f55307985bdc1aa
get-function-configuration
Ciò fornirà i dettagli di configurazione della funzione AWS Lambda.
I seguenti sono i comandi usati insieme a questa API:
get-function-configuration
--function-name <value>
[--qualifier <value>]
The following are the options used with
--function-name (string) −nome della funzione lambda aws. Puoi anche specificare Amazon Resource Name della funzione.
--qualifier(string) − Opzionale La versione della funzione può essere utilizzata per ottenere i dettagli della funzione.
Il comando con i valori per get-function sono -
aws lambda get-function-configuration --function-name awslambdausingcli
Il comando visualizza i dettagli come segue:
get-account-settings
Questa API fornisce le impostazioni degli account.
Comandi coinvolti
I comandi che puoi usare con questa API sono:
get-account-settings
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Opzioni coinvolte
È possibile utilizzare le seguenti opzioni con questa API:
--cli-input-json(string) − Esegue il servizio in base alla stringa json fornita.
--generate-cli-skeleton(string) − Stampa l'output json senza inviare la richiesta API.
È possibile utilizzare il seguente comando per get-account-settings -
aws lambda get-account-settings
Puoi vedere il seguente output quando esegui il comando dato sopra -
aggiornamento-funzione-configurazione
Questa API aiuta ad aggiornare i dettagli di configurazione per la funzione AWS Lambda creata. È possibile modificare la memoria, il timeout, il gestore, il ruolo, il runtime, la descrizione ecc.
Comandi coinvolti
Di seguito sono riportati i comandi coinvolti nell'api di configurazione della funzione di aggiornamento:
update-function-configuration
--function-name <value>
[--role <value>]
[--handler <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--runtime <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Opzioni coinvolte
Le seguenti sono le opzioni coinvolte nell'api di configurazione della funzione di aggiornamento:
--function-name − nome della funzione lambda aws
--role (string) −opzionale. È necessario aggiornare l'ARN del ruolo.
--handler (string) −opzionale. I dettagli del gestore della funzione lambda aws.
--description(string) −opzionale. Descrizione della funzione.
--timeout(integer) −opzionale. Tempo necessario affinché la funzione aws lambda possa terminare.
--memory-size(integer) −opzionale. Questa è la memoria data alla funzione aws lambda. AWS allocherà la quantità di CPU e allocazione di memoria in base alla memoria fornita.
--environment (structure) −opzionale. È un oggetto con i dettagli dell'ambiente richiesti nella funzione lambda aws.
e.g: Variables = {Name1 = string, Name2 = string}
--runtime(string) − Qui è necessario specificare l'ambiente di runtime, ovvero la selezione della lingua.
I dettagli del runtime sono mostrati nella tabella sotto riportata -
Opzioni disponibili | runtime |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Giava | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Partire | go1.x |
--cli-input-json (string) −opzionale. Questo eseguirà l'operazione sull'API come specificato nella stringa json fornita.
--generate-cli-skeleton (string) −opzionale. Questo produrrà lo scheletro JSON di tutti i dettagli senza eseguire l'API. L'output può essere utilizzato come input per--cli-input-json.
Ora, cambiamo la memoria e il timeout della funzione AWS Lambda che abbiamo creato in precedenza. Segui i passaggi indicati di seguito e osserva gli screenshot corrispondenti allegati a questo scopo:
Passo 1
La memoria e il timeout prima che si verifichi la modifica sono i seguenti:
Passo 2
Ora, con update-function-configuration, cambiamo la memoria e il timeout a 320 MB e il timeout a 10 s. A tale scopo, utilizzare il seguente comando con i valori:
aws lambda update-function-configuration --function-name “awslambdusingcli”
--timeout 10 --memory-size 320
Passaggio 3
Quindi puoi vedere il seguente output come display:
Passaggio 4
La visualizzazione nella console AWS dopo l'utilizzo update-function-configuration è il seguente -
Aggiorna codice funzione
Questa API aggiornerà il codice per una funzione AWS Lambda esistente.
Comandi coinvolti
update-function-code
--function-name <value>
[--zip-file <value>]
[--s3-bucket <value>]
[--s3-key <value>]
[--s3-object-version <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Opzioni coinvolte
Le seguenti sono le opzioni coinvolte con l'API del codice funzione di aggiornamento:
--function-name(string) − nome della funzione lambda aws
--zip-file (blob) −opzionale. Percorso del file zip che ha il codice da aggiornare.
--s3-bucket(string) −opzionale. Nome del bucket S3 con il file zip con il codice caricato.
--s3-key(string) −opzionale. Nome della chiave dell'oggetto AWS s3 che deve essere caricato.
--s3-object-version (string) −opzionale. Versione oggetto AWS s3.
--cli-input-json (string) −opzionale. Questo eseguirà l'operazione sull'API come specificato nella stringa json fornita.
--generate-cli-skeleton (string) −opzionale. Questo produrrà lo scheletro JSON di tutti i dettagli senza eseguire l'API. L'output può essere utilizzato come input per --cli-input-json.
Il codice aggiornato è come mostrato di seguito:
exports.handler = async (event, context) => {
console.log("Using aws cli");
console.log()
return 'Hello from Lambda from aws cli!'
};
Puoi usare quanto segue command with values for this purpose -
aws lambda update-function-code --function-name "awslambdausingcli"
--zip-file "fileb://awscli.zip"
L'output corrispondente è come mostrato qui -
Il display dalla console AWS è come mostrato qui:
L'output del registro corrispondente è come mostrato di seguito:
funzione di cancellazione
Il delete aws cli api eliminerà la funzione data.
Comandi inclusi
I dettagli del comando per lo stesso sono forniti qui -
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Opzioni incluse
Le opzioni incluse in questa API sono le seguenti:
--function-name(string) − questo prenderà il nome della funzione lambda o l'arn della funzione lambda aws.
--qualifier (string) −Questo è opzionale. Qui puoi specificare la versione di aws lambda che deve essere eliminata.
-- cli-input-json(string) −Esegue l'operazione di servizio in base alla stringa JSON fornita. La stringa JSON segue il formato fornito da --generate-cli-skeleton. Se vengono forniti altri argomenti nella riga di comando, i valori CLI sovrascriveranno i valori forniti da JSON.
--generate-cli-skeleton(string) − stampa lo scheletro json sull'output standard senza inviare la richiesta API.
aws lambda delete-function --function-name "lambdatestcli"
Ora, osserva che la funzione non verrà visualizzata nell'elenco delle funzioni AWS Lambda -
AWS Lambda può essere creato e distribuito utilizzando un framework serverless. Ti consente di creare trigger AWS Lambda e distribuirli anche creando i ruoli richiesti. Il framework serverless consente di gestire grandi progetti in modo più semplice. Gli eventi e le risorse richieste sono scritti in un unico posto e solo pochi comandi aiutano a distribuire la piena funzionalità sulla console AWS.
In questo capitolo imparerai in dettaglio come iniziare con il framework serverless AWS.
Installa Serverless Framework utilizzando npm install
Per cominciare, devi prima installare nodejs. Puoi verificare la presenza di nodejs come segue:
Dovrai usare il seguente comando per installare serverless usando il pacchetto npm:
npm install -g serverless
Al termine di npm, esegui il comando serverless che mostra l'elenco dei comandi da utilizzare per creare e distribuire la funzione AWS Lambda. Osserva gli screenshot riportati di seguito:
Puoi anche usare sls invece di serverless. sls è il comando abbreviato per serverless.
Nel caso in cui hai bisogno di aiuto sul comando sls, puoi usare il seguente comando:
sls create --help
Per creare un framework senza server, devi seguire i passaggi indicati di seguito:
Passo 1
Per iniziare a utilizzare il framework senza server, è necessario aggiungere le credenziali. In questo modo, puoi prima l'utente nella console AWS come segue:
Passo 2
Clicca su Next:Permissionspulsante per aggiungere autorizzazioni. Dovrai allegare i criteri esistenti o l'accesso amministratore a questo utente.
Passaggio 3
Clic Create Userper aggiungere l'utente. Mostrerà la chiave di accesso e la chiave segreta di cui abbiamo bisogno per configurare il framework serverless -
Configura AWS Serverless Framework
Vediamo come configurare il framework serverless AWS. È possibile utilizzare il seguente comando per questo scopo:
sls config credentials --provider aws --key accesskey --secret secretkey
Si noti che i dettagli delle credenziali immesse, ovvero il file access key e secret key sono memorizzati nel file file /aws/credentials.
Innanzitutto, crea una cartella in cui desideri memorizzare i file di progetto.
Successivamente, inizieremo il lavoro in aws-serverless cartella.
Crea AWS Lambda utilizzando Serverless Framework
Ora, creiamo una funzione Lambda con il framework serverless utilizzando i passaggi indicati di seguito:
Passo 1
Di seguito sono riportati i dettagli per serverless create comando -
Passo 2
Ora, dobbiamo assegnare il modello che è il seguente:
AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.
Passaggio 3
Faremo uso di aws-nodejstemplate per creare il nostro primo progetto utilizzando framework serverless. Il comando per lo stesso scopo è come mostrato qui -
sls create --template aws-nodejs
Tieni presente che questo comando crea un boilerplate per il modello aws-nodejs.
Passaggio 4
Ora apri la cartella creata in un IDE. Qui stiamo usando il codice di Visual Studio e la struttura delle cartelle è la seguente:
Passaggio 5
Sono stati creati 2 file: handler.js e Serverless.yml
I dettagli della funzione di base di AWS Lambda sono mostrati in handler.js come segue -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
Questa vita Serverless.yml ha i dettagli di configurazione del framework serverless come mostrato di seguito -
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
# stage: dev
# region: us-east-1
# you can add statements to the Lambda function's IAM Role here
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
# you can define service wide environment variables here
# environment:
# variable1: value1
# you can add packaging information here
#package:
# include:
# - include-me.js
# - include-me-dir/**
# exclude:
# - exclude-me.js
# - exclude-me-dir/**
functions:
hello:
handler: handler.hello
# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# - http:
# path: users/create
# method: get
# - s3: ${env:BUCKET}
# - schedule: rate(10 minutes)
# - sns: greeter-topic
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# - iot:
# sql: "SELECT * FROM 'some_topic'"
# - cloudwatchEvent:
# event:
# Example:
# - "aws.ec2"
# detail-type:
# - "EC2 Instance State-change Notification"
# detail:
# state:
# - pending
# - cloudwatchLog: '/aws/lambda/hello'
# - cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp
# Define function environment variables here
# environment:
# variable2: value2
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Ora, dobbiamo aggiungere modifiche nel file serverless.yml secondo i nostri requisiti. È possibile utilizzare i comandi come indicato di seguito:
È possibile utilizzare il seguente comando per Service -
service: aws-nodejs # NOTE: update this with your service name
Ora, cambia il servizio qui e aggiungi il nome dato alla nostra cartella come mostrato -
service: aws-serverless # NOTE: update this with your service name
I dettagli del provider sono come mostrato -
provider:
name: aws
runtime: nodejs6.10
Il provider è aws e il runtime lo è nodejs6.10. Dobbiamo aggiungere il fileregion in cui lavoreremo e il stage, questo è dev or prodambiente per il progetto. Quindi ecco i dettagli aggiornati del provider: provider -
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1
Ruolo IAM
Il iam role, ovvero il codice per l'autorizzazione a lavorare con Lambda è mostrato qui nel file .yml file -
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
Tieni presente che dobbiamo fornire i dettagli del ruolo, ovvero l'autorizzazione richiesta con altri servizi AWS, nella sezione precedente.
Dettagli del gestore AWS Lambda
Il nome della funzione di esportazione in handler.jsè ciao. Quindi il gestore è il nome del file seguito dal nome dell'esportazione.
functions:
hello:
handler: handler.hello
I dettagli delle risorse sul servizio s3 aggiunti come mostrato di seguito qui -
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Distribuisci AWS Lambda utilizzando Serverless Framework
Distribuiamo la funzione lambda sopra nella console AWS. È possibile utilizzare i seguenti passaggi per questo scopo:
Passo 1
Innanzitutto, dovrai utilizzare il seguente comando:
sls deploy
Passo 2
Ora dovresti vedere la funzione nella console AWS ora come mostrato. I dettagli di AWS serverless vengono registrati nella formazione cloud AWS. A tal fine, vai al servizio AWS e selezionaCloudFormation. I dettagli di AWS Lambda vengono visualizzati come segue:
Si noti che il nome dato è il nome del progetto seguito dallo stadio utilizzato.
Passaggio 3
Crea il ruolo iam per AWS Lambda e il gruppo di log per AWS cloudwatch. Viene creato il bucket S3 che contiene i dettagli del codice memorizzati e i dettagli della configurazione.
Questo viene creato dal comando sls deploy. Non è necessario specificare il ruolo iam, invece viene creato per impostazione predefinita durante ildeploy palcoscenico.
Passaggio 4
Il flusso dettagliato degli eventi viene visualizzato di seguito nel servizio di formazione delle nuvole.
Codice AWS Lambda
Il codice AWS Lambda e le sue impostazioni di esecuzione sono mostrati nella schermata riportata di seguito:
Quando provi la funzione Lambda, puoi trovare il seguente output:
L'output del registro per la funzione di cui sopra è mostrato qui -
Possiamo anche testare la funzione AWS Lambda utilizzando il comando serverless come mostrato di seguito:
sls invoke --function hello
La sintassi del comando invoke è mostrata qui:
sls invoke --function hello
Questo comando invoke attiva la funzione AWS Lambda e visualizza l'output nel prompt dei comandi come mostrato di seguito:
Puoi anche testare la funzione Lambda prima della distribuzione e il comando per lo stesso utilizzando il seguente comando:
sls invoke local --function hello
Si noti che non è sempre possibile eseguire test in locale poiché le risorse come S3 eDynanoDB non possono essere simulate nell'ambiente locale. Solo le chiamate di funzione di base possono essere testate localmente.
Utilizzo di API Gateway e AWS Lambda con Serverless Framework
Vediamo come creare un nuovo progetto per lavorare con Lambda e api gateway. È possibile utilizzare il seguente comando per questo scopo:
sls create --template aws-nodejs
Ora aperto aws-apiprogetto in codice visivo. Puoi vedere che il filehandler.js e serverless.ymlfile creati. Facciamo le modifiche in questo per l'aggiunta del gateway API.
Dovrai apportare le seguenti modifiche in serverless.yml -
Ora, i dettagli degli eventi aggiunti per l'attivazione del gateway API con AWS Lambda -
C'è una nuova cosa aggiunta qui chiamata events. Abbiamo specificato l'evento comehttp, insieme al suo percorso e metodo.
Il percorso è l'end-point che useremo quando viene creato il percorso del gateway API e il metodo utilizzato è GET.
Osserva che il conduttore è handler.helloe ciao è il nome dell'esportazione da handler.js.
Nota che non devi distribuire il gateway API qui, poiché il framework serverless lo eseguirà.
Ora eseguiremo il file sls deploy comando per creare la funzione AWS Lambda con trigger come api gateway.
sls deploy
Osserva che i dettagli della distribuzione sono elencati sopra. Dà ilGeturl con il punto finale come dettagli del percorso. Il palco èprodquindi lo stesso viene utilizzato nell'URL. Il nome della funzione èaws-api-prod-hello.
Premiamo l'url e vediamo l'output. Puoi vedere quanto segue la risposta che otteniamo dall'API-gateway get url -
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":
"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":
"false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.
amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0
(Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==",
"X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},
"queryStringParameters":null,"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23:
43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135
-a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null,
"isBase64Encoded":false}}
I dettagli dell'evento sono disponibili anche nell'output quando si preme l'URL. HttpMethod è GET e queryStringParameters sono null poiché non viene passato nulla nella stringa di query. Vengono forniti i dettagli dell'eventoinput che abbiamo specificato nel gestore AWS Lambda -
L'output che otteniamo dal gateway API è solo il file body dettagli come message e input. La risposta è totalmente controllata dal gateway API e da come visualizzarla come output.
Ora, passiamo gli input all'URL GET nella stringa di query e vediamo il display -
Quindi puoi vedere l'output di querystring come mostrato di seguito -
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate,
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0
8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
"X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
"157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
null,"isBase64Encoded":false}}
Cambiamo la funzione AWS Lambda per visualizzare solo i dettagli della stringa di query come mostrato di seguito:
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message:(event.queryStringParameters && event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
Osserva che abbiamo modificato il messaggio in base alla stringa di query display message. Questo distribuirà nuovamente la funzione e controllerà l'output. Visualizza i dettagli presenti nel messaggio di visualizzazione della variabile della stringa di query come mostrato di seguito.
Aggiungiamo ora post metodo agli eventi creati come mostrato di seguito -
Ora, distribuisci le modifiche apportate e puoi vedere il seguente output dal comando deploy:
Nota che il test dell'URL del post direttamente nel browser non fornirà i dettagli. Dovresti testare l'URL del post inpostman.
Per ottenere il postino vai a https://www.getpostman.com/apps. Scarica l'app secondo il tuo sistema operativo. Una volta installato, dovresti essere in grado di testare l'URL del tuo post come mostrato di seguito -
Questo mostra il messaggio che abbiamo aggiunto nella funzione Lambda.
Questo capitolo spiegherà in dettaglio il processo di esecuzione e invocazione della funzione Lambda e i passaggi coinvolti in esso.
Modello di esecuzione AWS Lambda
L'esecuzione di AWS dipende dai dettagli di configurazione aggiunti per la funzione AWS Lambda. Quando la funzione viene creata, è presente un filememory e time allotted, che viene utilizzato per l'esecuzione della funzione AWS Lambda.
Con l'aiuto dei dettagli di configurazione, AWS Lambda crea un contesto di esecuzione. Il contesto di esecuzione è un ambiente di runtime temporaneo predisposto per eventuali dipendenze esterne come connessione al database, endpoint http, librerie di terze parti ecc., Se presenti.
Quando la funzione AWS Lambda viene richiamata per la prima volta o se la funzione lambda viene aggiornata, viene aggiunta poca latenza a causa della configurazione del contesto di esecuzione. Tuttavia, le chiamate successive sono più veloci rispetto alla prima. AWS Lambda tenta di riutilizzare nuovamente il contesto di esecuzione se la funzione Lambda viene richiamata impiegando meno tempo.
Il riutilizzo del contesto di esecuzione ha le seguenti implicazioni:
Se è presente una connessione al database eseguita per l'esecuzione di Lambda, la connessione viene mantenuta per il riutilizzo. Quindi il codice Lambda deve essere tale che la connessione deve essere prima controllata - se esiste e riutilizzata; altrimenti dovremo creare una nuova connessione.
Il contesto di esecuzione mantiene uno spazio su disco di 500 MB in formato /tmpdirectory. I dati richiesti vengono memorizzati nella cache in questa directory. Puoi avere un controllo aggiuntivo nel codice per vedere se i dati esistono.
Se i callback o alcuni processi in background non sono completi quando è stata richiamata la funzione Lambda, l'esecuzione inizierà quando la funzione lambda verrà nuovamente richiamata. Nel caso in cui non sia necessario che ciò accada, assicurati che i tuoi processi siano tutti terminati correttamente, quando l'esecuzione della funzione è completa.
È necessario utilizzare il contesto di esecuzione e i dati memorizzati nella directory tmp. Dovrai aggiungere i controlli necessari nel codice per vedere se i dati richiesti esistono prima di crearne di nuovi. Ciò consentirà di risparmiare tempo durante l'esecuzione e renderlo più veloce.
Richiamo della funzione AWS Lambda
Possiamo richiamare AWS manualmente utilizzando aws cli. Abbiamo già visto come creare e distribuire AWS Lambda utilizzandocli. Qui creeremo prima una funzione usandoaws cli e invoca lo stesso.
Creazione della funzione AWS Lambda utilizzando AWS CLI
Puoi utilizzare i seguenti comandi per creare la funzione AWS Lambda utilizzando aws cli -
Commands
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Command with values
aws lambda create-function
--function-name "lambdainvoke"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\nodeproject\index.zip"
L'output è come mostrato di seguito:
La funzione creata nella console AWS è come mostrato di seguito:
Ora puoi richiamare la funzione usando il comando:invoke
--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>
Options
--function-name − Specificare il nome della funzione che si desidera richiamare.
--invocation-type(string) − per impostazione predefinita, il tipo di invocazione è requestresponse. I valori disponibili per essere utilizzati con invokation-type sonoRequestResponse, Event e DryRun.
Il tipo di chiamata dell'evento deve essere utilizzato per la risposta asincrona.
DryRun è da utilizzare quando si desidera verificare la funzione Lambda senza necessità di eseguirla.
--log-type − Sarà Tailse il tipo di chiamata è RequestResponse. Fornisce gli ultimi dati di registro con codifica base 64 4KB. I valori possibili sonoTail e None.
--client-context −È possibile trasmettere dettagli specifici del client alla funzione Lambda. Il clientcontext deve essere in formato json e con codifica base64. La dimensione massima del file è 3583 byte.
--payload − input in formato json per la funzione lambda.
--qualifier −È possibile specificare la versione della funzione Lambda o il nome alias. Se si passa la versione della funzione, l'API utilizzerà la funzione qualificata arn per richiamare la funzione Lambda. Se specifichi un nome alias, l'API utilizza l'alias ARN per richiamare la funzione Lambda.
outfile − Questo è il nome del file in cui verrà salvato il contenuto.
Command with values
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail C:\nodeproject\outputfile.txt
È possibile utilizzare l'opzione payload per inviare un evento fittizio alla funzione lambda in formato json come mostrato di seguito.
Il codice AWS Lambda correlato è il seguente:
exports.handler = async (event, callback) => {
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
Osserva che nel codice abbiamo la console event.name e event.addr. Ora, usiamo l'opzione payload in aws cli per inviare l'evento con nome e indirizzo come segue:
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Quindi payload prende l'input come un percorso file che ha l'input json come mostrato -
{"name":"Roy Singh", "addr":"Mumbai"}
L'output corrispondente è come mostrato di seguito:
L'output viene memorizzato nel file C:\clioutput\outputfile.txt come segue -
"Hello Roy Singh and address is Mumbai"
Eventi di esempio
Puoi testare la funzione AWS Lambda passando un evento di esempio. Questa sezione fornisce alcuni eventi di esempio per i servizi AWS. Puoi usare il fileinvokecomando per testare l'output quando attivato con uno dei servizi. Osservare i codici forniti per gli eventi di esempio corrispondenti di seguito:
Evento di esempio Put di Amazon S3
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Prendere il details of the file from the s3 put event, puoi usare il seguente comando:
event.Records[0].s3.object.key //will display the name of the file
Per get the bucket name, puoi usare il seguente comando:
event.Records[0].s3.bucket.name //will give the name of the bucket.
Per see the EventName, puoi usare il seguente comando:
event.Records[0].eventName // will display the eventname
Amazon S3 Elimina evento di esempio
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg"
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectRemoved:Delete",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Amazon DynamoDB
Amazon DynamoDB può essere un evento su AWS Lambda quando vengono apportate modifiche alla tabella DynamoDB. Possiamo eseguire operazioni come aggiungere voci, aggiornare ed eliminare record dalla tabella DynamodDB.
Un esempio di evento per l'aggiunta, l'inserimento e l'eliminazione di DynamoDB viene mostrato qui:
{
"Records": [{
"eventID": "1",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES",
"SequenceNumber": "111",
"SizeBytes": 26
},
"awsRegion": "us-west-2",
"eventName": "INSERT",
"eventSourceARN": eventSourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "2",
"eventVersion": "1.0",
"dynamodb": {
"OldImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"SequenceNumber": "222",
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 59,
"NewImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"awsRegion": "us-west-2",
"eventName": "MODIFY",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "3",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 38,
"SequenceNumber": "333",
"OldImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
}, "awsRegion": "us-west-2",
"eventName": "REMOVE",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
}]
}
Amazon Simple Notification Service
AWS Lambda può essere utile per elaborare la notifica creata in Simple Notification Service (SNS). Ogni volta che c'è un messaggio pubblicato in SNS, la funzione Lambda può essere attivata con un evento SNS, che contiene i dettagli dei messaggi. Questi messaggi possono essere elaborati all'interno della funzione Lambda e possono essere inviati ulteriormente ad altri servizi secondo il requisito.
Una volta inserito il messaggio, SNS attiverà la funzione Lambda. Se un errore tenta di richiamare la funzione Lambda, SNS riproverà a chiamare la funzione lambda fino a tre volte.
Evento di esempio Amazon SNS
Di seguito è mostrato un evento di esempio che ha tutti i dettagli disponibili nella funzione AWS Lambda per eseguire l'ulteriore processo:
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": eventsubscriptionarn,
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": topicarn,
"Subject": "TestInvoke"
}
}]
}
Amazon Simple Mail Service
Amazon Simple Mail Service può essere utilizzato per inviare messaggi e anche per ricevere messaggi. La funzione AWS Lambda può essere chiamata su Simple Mail Service quando viene ricevuto il messaggio.
Evento campione di ricezione di posta elettronica Amazon SES
I dettagli dell'evento SES quando utilizzato in AWS Lambda sono mostrati di seguito:
{
"Records": [{
"eventVersion": "1.0",
"ses": {
"mail": {
"commonHeaders": {
"from": [
"Jane Doe <[email protected]>"
],
"to": [
"[email protected]"
],
"returnPath": "[email protected]",
"messageId": "<0123456789Source.com>",
"date": "Wed, 7 Oct 2015 12:34:56 -0700",
"subject": "Test Subject"
},
"example": "[email protected]",
"timestamp": "1970-01-01T00:00:00.000Z",
"destination": [
"[email protected]"
],
"headers": [{
"name": "Return-Path",
"value": "<[email protected]>"
},
{
"name": "Received",
"value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "From",
"value": "Jane Doe <[email protected]>"
},
{
"name": "Date",
"value": "Wed, 7 Oct 2015 12:34:56 -0700"
},
{
"name": "Message-ID",
"value": "<0123456789example.com>"
},
{
"name": "Subject",
"value": "Test Subject"
},
{
"name": "To",
"value": "[email protected]"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
}],
"headersTruncated": false,
"messageId": "o3vrnil0e2ic28tr"
},
"receipt": {
"recipients": [
"[email protected]"
],
"timestamp": "1970-01-01T00:00:00.000Z",
"spamVerdict": {
"status": "PASS"
},
"dkimVerdict": {
"status": "PASS"
},
"processingTimeMillis": 574,
"action": {
"type": "Lambda",
"invocationType": "Event",
"functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
},
"spfVerdict": {
"status": "PASS"
},
"virusVerdict": {
"status": "PASS"
}
}
},
"eventexample": "aws:ses"
}]
}
Log di Amazon Cloudwatch
AWS Lambda può essere attivato da Amazon CloudWatch Logs utilizzando l'estensione CloudWatch Logs Subscriptions. Le sottoscrizioni di CloudWatch Logs contengono dati in tempo reale sui log che possono essere elaborati e analizzati all'interno di AWS Lambda o possono essere utilizzati per il caricamento su altri sistemi.
Evento di esempio di Amazon CloudWatch Logs
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
DQiMdxRQEAAA=="
}
}
Amazon API Gateway
La funzione AWS Lambda può essere richiamata su httpsurl. Può essere fattoGET, POST, PUT. Quando viene richiamato l'URL https, viene attivata anche la funzione AWS Lambda ei dati passati a https utilizzando get / post possono essere resi disponibili all'interno di AWS Lambda per essere utilizzati per l'inserimento in DynamoDB o per inviare posta, ecc.
Evento richiesta proxy API Gateway
{
"path": "/test/hello",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"pathParameters": {
"proxy": "hello"
},
"requestContext": {
"accountId": "123456789012",
"reexampleId": "us4z18",
"stage": "test",
"requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
"identity": {
"cognitoIdentityPoolId": "",
"accountId": "",
"cognitoIdentityId": "",
"caller": "",
"apiKey": "",
"exampleIp": "192.168.100.1",
"cognitoAuthenticationType": "",
"cognitoAuthenticationProvider": "",
"userArn": "",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"user": ""
},
"reexamplePath": "/{proxy+}",
"httpMethod": "GET",
"apiId": "wt6mne2s9k"
},
"reexample": "/{proxy+}",
"httpMethod": "GET",
"queryStringParameters": {
"name": "me"
},
"stageVariables": {
"stageVarName": "stageVarValue"
}
}
Evento di risposta proxy di API Gateway
{
"statusCode": 200,
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"body": "Hello World"
}
L'eliminazione della funzione AWS Lambda rimuoverà AWS Lambda dalla console AWS. Esistono 2 modi per eliminare la funzione AWS Lambda.
- Utilizzo della console AWS.
- Utilizzo del comando AWS CLI
Questo capitolo discute questi due modi in dettaglio.
Utilizzo della console AWS
Per eliminare una funzione Lambda utilizzando la console AWS, segui i passaggi indicati di seguito:
Passo 1
Accedi alla console AWS e vai al servizio AWS Lambda. Puoi scoprire che le funzioni AWS lambda create finora sono elencate nella console AWS come mostrato di seguito:
L'elenco mostra che finora sono state create 23 funzioni AWS Lambda. Puoi visualizzarli utilizzando l'impaginazione fornita in alto o cercare in AWS Lambda utilizzando la casella di ricerca.
Passo 2
Osserva che è presente un pulsante di opzione in ciascuna funzione AWS Lambda. Seleziona la funzione che desideri eliminare. Osserva lo screenshot mostrato di seguito -
Passaggio 3
Dopo aver selezionato la funzione AWS Lambda, il file Actionl'elenco a discesa che in precedenza era disattivato è ora evidenziato. Ora, apri la casella combinata e mostrerà le opzioni come mostrato -
Passaggio 4
Seleziona il Deleteper eliminare la funzione AWS Lambda. Dopo aver fatto clic suDelete, visualizza il messaggio come segue -
Passaggio 5
Leggere attentamente il messaggio e successivamente fare clic Delete per rimuovere definitivamente la funzione lambda AWS.
Note- L'eliminazione di aws lambda non eliminerà il ruolo collegato. Per rimuovere il ruolo, devi andare su IAM e rimuovere il ruolo.
Passaggio 6
Di seguito è riportato l'elenco dei ruoli creati finora. Osserva che esiste un fileCreate role pulsante e Delete role pulsante.
Fare clic sulla casella di controllo nel ruolo che si desidera eliminare. Puoi anche selezionare più ruoli da eliminare contemporaneamente.
Passaggio 7
Verrà visualizzato un messaggio di conferma come mostrato di seguito dopo aver fatto clic sul pulsante Elimina -
Ora, leggi attentamente i dettagli menzionati e successivamente fai clic Yes, delete pulsante.
Utilizzo del comando AWS CLI
Creiamo prima una funzione Lambda utilizzando aws cli ed eliminiamo la stessa utilizzando lo stesso comando. Seguire i passaggi indicati di seguito per questo scopo:
Passo 1
Il comando con i valori per create-function è il seguente:aws lambda create-function
--function-name "lambdatestcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\demotest\index.zip"
L'output corrispondente è mostrato qui -
Passo 2
La funzione AWS Lambda creata è lambdatestcli. Abbiamo usato il ruolo arn esistente per creare la funzione lambda.
Quindi puoi trovare questa funzione visualizzata nella console AWS come mostrato di seguito:
Passaggio 3
Ora, richiamiamo la funzione per testare l'output usando il comando mostrato -aws lambda invoke --function-name "lambdatestcli" --log-type Tail
C:\demotest\outputfile.txt
Questo comando ti darà l'output come mostrato -
Passaggio 4
Puoi osservare i log di cloudwatch per la funzione lambda lambdatestcliPassaggio 5
Ora, passiamo alla parte effettiva dell'eliminazione della funzione AWS. Delete aws cli apicancellerà la funzione data. Di seguito sono riportati i dettagli del comando utilizzato per questo scopo:Command
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Options
--function-name(string) - Questo prenderà il nome della funzione Lambda o l'arn della funzione AWS Lambda.
--qualifier (string)- Questo è opzionale. Qui puoi specificare la versione di AWS Lambda che deve essere eliminata.
-- cli-input-json(string)- Esegue l'operazione di servizio in base alla stringa JSON fornita. La stringa JSON segue il formato fornitoby --generate-cli-skeleton. Se vengono forniti altri argomenti nella riga di comando, i valori CLI sovrascriveranno i valori forniti da JSON.
--generate-cli-skeleton(string) - stampa lo scheletro json sullo standard output senza inviare la richiesta API.
Command with values
aws lambda delete-function --function-name "lambdatestcli"
L'output corrispondente è mostrato di seguito:
Passaggio 6
Se controlli ora, puoi osservare che la funzione non verrà visualizzata nell'elenco delle funzioni AWS Lambda, come mostrato nello screenshot riportato di seguito:Lavorare con Amazon API Gateway
La funzione AWS Lambda può essere richiamata su HTTPSurl. Può essere fatto su GET, POST, PUT. Quando viene richiamato l'URL HTTPS, la funzione AWS Lambda può essere attivata e i dati vengono passati a HTTPS utilizzandoget/post può essere reso disponibile all'interno di AWS Lambda per essere utilizzato per l'inserimento in DynamoDB o per inviare posta, ecc.
Questo capitolo discute in dettaglio sui vari processi coinvolti nel lavoro con AWS lambda e API Gateway.
Processi coinvolti
Di seguito sono riportati i processi coinvolti nell'utilizzo di AWS lambda e API Gateway:
- Crea un ruolo IAM per l'autorizzazione
- Crea la funzione lambda AWS
- Crea API Gateway
- Collega la funzione lambda al gateway API
- Passaggio di dati al gateway API
Di seguito viene fornito un diagramma di base che spiega il funzionamento del gateway API e di AWS Lambda:
Questi processi sono spiegati in dettaglio più avanti in questo capitolo con le relative schermate.
Crea un ruolo IAM per l'autorizzazione
Dai servizi Amazon come mostrato di seguito, seleziona IAM per creare ruoli da utilizzare dalla funzione Lambda.
Vai a IAM e seleziona Roles dalla sezione del lato sinistro come mostrato di seguito -
Clic Create role per la funzione Lambda.
Seleziona Lambda e fai clic Permissionsin fondo. Seleziona l'autorizzazione richiesta per API Gateway e Lambda.
Cerca il gateway API nella ricerca e ti elencherà tutte le autorizzazioni correlate. Qui abbiamo scelto l'accesso completo al gateway API come mostrato di seguito -
Ora, cerca il gateway API e ti elencherà tutte le autorizzazioni correlate. Qui abbiamo scelto l'accesso completo al gateway API come mostrato di seguito -
Devi ripetere la stessa procedura anche per le politiche.
Dopo aver scelto le politiche necessarie, fare clic su Reviewper il passaggio successivo. Inserisci il nome del ruolo secondo la tua scelta come mostrato di seguito -
Visualizza le politiche associate al ruolo. ClicCreate role e abbiamo finito con la creazione del ruolo e possiamo procedere con la funzione lambda.
Crea funzione AWS Lambda
Vai ai servizi AWS e fai clic sul servizio lambda per creare una funzione per connetterlo con il gateway API.
La schermata dell'interfaccia utente per la funzione Lambda è mostrata di seguito. ClicCreate function per procedere con la creazione della funzione Lambda.
Inserisci il nome della funzione e scegli il ruolo esistente che abbiamo creato sopra.
Lampeggia un messaggio che la funzione con il nome lambdawithapigateway viene creato con successo.
Nota che qui useremo nodejsruntime per scrivere il codice. Il codice AWS conhelloworld il messaggio è come mostrato di seguito -
Il codice AWS Lambda è presente in index.jsfile. La funzione chiamata handler ha i parametri cioèevents, context e callback.
La funzione di callback ha fondamentalmente l'errore e il messaggio di successo. Nota che qui non abbiamo alcun codice relativo all'errore, quindi viene passato null e il messaggio di successo èHelloWorld from lambda.
Infine, salva le modifiche aggiunte e procediamo ad aggiungere la funzione Lambda al gateway API.
Crea API Gateway
Accedi al tuo account AWS e apri API Gateway come mostrato di seguito:
Fai clic su Gateway API e ti porterà alla schermata in cui è possibile creare un nuovo gateway API.
Clic Create API e aggiungi i dettagli come mostrato di seguito -
Clicca il Create APIpulsante sul lato destro dello schermo. Questo mostrerà l'API appena creata sul lato sinistro dello schermo.
Clicca il Actions menu a discesa per creare una nuova risorsa per l'API.
Ora, crea una nuova risorsa come mostrato di seguito:
Inserisci il Resource Namecome mostrato di seguito. Vedrai il nome della risorsa inserito nell'url creato alla fine. ClicCreate Resource e lo vedrai sullo schermo come segue:
Inserisci GET/POSTmetodi alla risorsa creata come mostrato di seguito. Seleziona il metodo daActions cadere in picchiata.
Clicca il GET metodo per aggiungere il metodo all'API.
Il passo successivo è l'integrazione che lo integrerà con la funzione Lambda. Ora aggiungi la funzione Lambda come mostrato di seguito -
Collega la funzione Lambda a API Gateway
Seleziona la funzione lambda creata in precedenza.
Salva le modifiche e puoi vedere una finestra di dialogo che richiede l'autorizzazione come mostrato di seguito -
Clic OKper il permesso. Questi sono i dettagli di esecuzione tra la richiesta HTTP del gateway API e la funzione Lambda -
Ora, implementiamo le modifiche al gateway API. A tal fine, dobbiamo selezionare il fileDeploy API a partire dal Actions menu a discesa come mostrato di seguito -
Selezionare Deploy API. Chiederà lo stato di distribuzione. SelezionareNew Stage dal menu a discesa Fase di distribuzione e aggiungi il nome della fase come Production.
Clic Deploy e ti reindirizzerà all'URL come mostrato di seguito -
Seleziona il GETmetodo dal lato sinistro per ottenere l'URL. Apri l'URL in una nuova scheda per vedere il messaggio dalla funzione Lambda.
Questo è un esempio di base di utilizzo di AWS Lambda e AWS API Gateway. Nell'esempio precedente, abbiamo codificato il messaggio nella funzione Lambda.
Ora, prendiamo i dettagli del messaggio dal gateway API. Nel caso in cui la chiamata HTTPS debba essere chiamata da un dominio diverso, ad esempio chiamata AJAX all'API, è necessario abilitare CORS per il gateway API creato.
Seleziona la risorsa creata per l'API e fai clic su Actions menu a discesa -
Adesso, Enable CORS si aprirà la seguente schermata -
È possibile utilizzare alcuni metodi per ABILITARE CORS. Access-Control-Allow-Origin è contrassegnato come *, il che significa che consentirà di ottenere contenuti dal gateway API da qualsiasi dominio.
Puoi anche specificare il nome di dominio che desideri utilizzare con l'API. ClicEnable CORS and replace existing CORS headers e visualizzerà il messaggio di conferma come mostrato di seguito -
Clic Yes, replace existing valuespulsante per abilitarlo. IlEnable CORS lo schermo appare come mostrato di seguito -
Passaggio di dati a API Gateway
Apri l'API creata in API Gateway displayhelloworld come mostrato di seguito -
Clic Integration Request per inviare i dati come mostrato di seguito -
Scegliere Body Mapping Templates e aggiungi il file Content-Type per questo esempio come application/json. Fare clic sul tipo di contenuto aggiunto aggiungere i dettagli come segue:
Ora aggiungi il modello in formato JSON come mostrato di seguito -
Tieni presente che abbiamo preso il messaggio come parametro per ottenere dati da API Gateway e condividerli con AWS Lambda. La sintassi per ottenere i dettagli è quella mostrata sopra.
Ora, distribuisci l'API per rendere disponibili le modifiche sull'URL di API Gateway. Per questo, dobbiamo modificare la funzione Lambda per visualizzare i dati in base all'URL del gateway API. Il codice per la funzione Lambda è fornito di seguito. Notare che stiamo prendendo il messaggio dall'evento e passando alla richiamata.
exports.handler = (event, context, callback) => {
let message = event.message;
callback(null, message);
};
Ora salva le modifiche in Lambda e premi l'URL per vedere le modifiche. Osserva lo screenshot riportato di seguito -
Fare clic sull'URL come mostrato di seguito -
https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
Osserva che qui stiamo passando il messaggio come stringa di query all'URL GET. Quindi puoi osservare l'output come mostrato di seguito -
Legge i dettagli inviati al messaggio dall'URL e li visualizza nel browser.
Utilizzo della funzione Lambda con Amazon S3
Il servizio Amazon S3 viene utilizzato per l'archiviazione dei file, dove è possibile caricare o rimuovere file. Possiamo attivare AWS Lambda su S3 quando sono presenti caricamenti di file nei bucket S3. AWS Lambda dispone di una funzione di gestione che funge da punto di partenza per la funzione AWS Lambda. Il gestore ha i dettagli degli eventi. In questo capitolo, vediamo come utilizzare AWS S3 per attivare la funzione AWS Lambda quando cariciamo i file nel bucket S3.
Passaggi per l'utilizzo della funzione AWS Lambda con Amazon S3
Per iniziare a utilizzare AWS Lambda con Amazon S3, abbiamo bisogno di quanto segue:
- Crea bucket S3
- Crea un ruolo che dispone dell'autorizzazione per lavorare con s3 e lambda
- Crea la funzione lambda e aggiungi s3 come trigger.
Esempio
Vediamo questi passaggi con l'aiuto di un esempio che mostra l'interazione di base tra Amazon S3 e AWS Lambda.
L'utente caricherà un file nel bucket Amazon S3
Una volta caricato il file, attiverà la funzione AWS Lambda in background che mostrerà un output sotto forma di un messaggio della console che il file è stato caricato.
L'utente sarà in grado di vedere il messaggio nei log di Cloudwatch una volta caricato il file.
Lo schema a blocchi che spiega il flusso dell'esempio è mostrato qui -
Creazione del bucket S3
Iniziamo prima creando un bucket s3 nella console AWS utilizzando i passaggi indicati di seguito:
Passo 1
Vai ai servizi Amazon e fai clic su S3 nella sezione di archiviazione come evidenziato nell'immagine sotto riportata -
Passo 2
Fare clic su Archiviazione S3 e Create bucket che memorizzerà i file caricati.
Passaggio 3
Dopo aver fatto clic su Create bucket pulsante, puoi vedere una schermata come segue:
Passaggio 4
Inserisci i dettagli Bucket name, Select the Region e fare clic Createpulsante in basso a sinistra. Pertanto, abbiamo creato un bucket con nome:workingwithlambdaands3.
Passaggio 5
Ora, fai clic sul nome del bucket e ti verrà chiesto di caricare i file come mostrato di seguito -
Quindi, abbiamo finito con la creazione del bucket in S3.
Crea un ruolo che funzioni con S3 e Lambda
Per creare un ruolo che funzioni con S3 e Lambda, segui i passaggi indicati di seguito:
Passo 1
Vai ai servizi AWS e seleziona IAM come mostrato di seguito:
Passo 2
Ora fai clic su IAM -> Roles come mostrato di seguito -
Passaggio 3
Ora fai clic su Create rolee scegli i servizi che utilizzeranno questo ruolo. Seleziona Lambda e fai clicPermission pulsante.
Passaggio 4
Aggiungi l'autorizzazione dal basso e fai clic Review.
Passaggio 5
Osserva che abbiamo scelto le seguenti autorizzazioni:
Osserva che le politiche che abbiamo selezionato sono AmazonS3FullAccess, AWSLambdaFullAccess e CloudWatchFullAccess.
Passaggio 6
Ora, inserisci il nome del ruolo, la descrizione del ruolo e fai clic su Create Role pulsante in basso.
Quindi, il nostro ruolo denominato lambdawiths3service è creato.
Crea funzione Lambda e aggiungi trigger S3
In questa sezione, vediamo come creare una funzione Lambda e aggiungervi un trigger S3. A tal fine, dovrai seguire i passaggi indicati di seguito:
Passo 1
Vai a Servizi AWS e seleziona Lambda come mostrato di seguito:
Passo 2
Clic Lambda e segui la procedura per l'aggiunta Name. Scegli ilRuntime, Roleecc. e creare la funzione. La funzione Lambda che abbiamo creato è mostrata nello screenshot qui sotto -
Passaggio 3
Ora aggiungiamo il trigger S3.
Passaggio 4
Scegli il trigger dall'alto e aggiungi i dettagli come mostrato di seguito -
Passaggio 5
Seleziona il bucket creato dal menu a discesa dei bucket. Il tipo di evento ha i seguenti dettagli:
Selezionare Object Created (All), poiché abbiamo bisogno del trigger AWS Lambda quando il file viene caricato, rimosso, ecc.
Passaggio 6
È possibile aggiungere Prefisso e Pattern di file che vengono utilizzati per filtrare i file aggiunti. Ad esempio, per attivare lambda solo per immagini .jpg. Lasciatelo vuoto per ora poiché dobbiamo attivare Lambda per tutti i file caricati. ClicAdd pulsante per aggiungere il trigger.
Passaggio 7
È possibile trovare il display trigger per la funzione Lambda come mostrato di seguito:
Aggiungiamo i dettagli per la funzione lambda aws. Qui utilizzeremo l'editor online per aggiungere il nostro codice e utilizzare nodejs come ambiente di runtime.
Passaggio 8
Per attivare S3 con AWS Lambda, dovremo utilizzare l'evento S3 nel codice come mostrato di seguito:
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Notare che il parametro dell'evento contiene i dettagli di S3event. Abbiamo consolato il nome del bucket e il nome del file che verranno registrati quando caricherai l'immagine in S3bucket.
Passaggio 9
Ora salviamo le modifiche e testiamo la funzione lambda con S3upload. Di seguito sono riportati i dettagli del codice aggiunti in AWS Lambda:
Passaggio 10
Ora aggiungiamo il ruolo, la memoria e il timeout.
Passaggio 11
Ora salva la funzione Lambda. Apri S3 dai servizi Amazon e apri il bucket che abbiamo creato in precedenza, ovveroworkingwithlambdaands3.
Carica l'immagine al suo interno come mostrato di seguito -
Passaggio 12
Clic Upload pulsante per aggiungere file come mostrato -
Passaggio 13
Clic Add filesper aggiungere file. Puoi anche trascinare e rilasciare i file. Ora fai clic suUpload pulsante.
Pertanto, abbiamo caricato un'immagine nel nostro bucket S3.
Passaggio 14
Per visualizzare i dettagli del trigger, vai al servizio AWS e seleziona CloudWatch. Apri i log per la funzione Lambda e utilizza il codice seguente:
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
L'output che puoi osservare in Cloudwatch è come mostrato:
La funzione AWS Lambda viene attivata quando il file viene caricato nel bucket S3 e i dettagli vengono registrati in Cloudwatch come mostrato di seguito:
Utilizzo della funzione Lambda con Amazon DynamoDB
DynamoDB può attivare AWS Lambda quando i dati vengono aggiunti alle tabelle, aggiornati o eliminati. In questo capitolo, lavoreremo su un semplice esempio che aggiungerà elementi alla tabella DynamoDB e AWS Lambda che leggerà i dati e invierà la posta con i dati aggiunti.
Requisiti
Per utilizzare Amazon DB e AWS Lambda, è necessario seguire i passaggi illustrati di seguito:
Crea una tabella in DynamoDB con la chiave primaria
Crea un ruolo che disponga dell'autorizzazione per lavorare con DynamoDB e AWS Lambda.
Crea una funzione in AWS Lambda
Trigger AWS Lambda per inviare posta
Aggiungi dati in DynamoDB
Parliamo in dettaglio di ciascuno di questi passaggi.
Esempio
Lavoreremo sul seguente esempio che mostra l'interazione di base tra DynamoDB e AWS Lambda. Questo esempio ti aiuterà a comprendere le seguenti operazioni:
Creazione di una tabella denominata cliente nella tabella Dynamodb e come inserire i dati in quella tabella.
Attivazione della funzione AWS Lambda una volta inseriti i dati e invio di posta tramite il servizio Amazon SES.
Lo schema a blocchi di base che spiega il flusso dell'esempio è come mostrato di seguito:
Crea tabella in DynamoDB con chiave primaria
Accedi alla console AWS. Vai a Servizi AWS e seleziona DynamoDB come mostrato di seguito. Seleziona DynamoDB.
DynamoDB mostra le opzioni come mostrato di seguito:
Ora fai clic su Create tableper creare la tabella come mostrato. Abbiamo chiamato la tabella comecustomer con chiave primaria per quella tabella come cust_id. Clicca suCreate pulsante per aggiungere la tabella a dynamodb.
La tabella creata è come mostrato di seguito -
Possiamo aggiungere elementi alla tabella creata come segue:
Clic Items e fare clic Create item pulsante come mostrato -
Creazione di ruoli con autorizzazioni per lavorare con DynamoDB e AWS Lambda
Per creare un ruolo, vai ai servizi AWS e fai clic su IAM.
Creiamo una policy da utilizzare solo per la tabella DynamoDB creata in precedenza -
Ora scegli un file Service. Osserva che il servizio che abbiamo selezionato èDynamoDB. PerActions abbiamo preso tutto Dynamodbazioni cioè accesso alla lista, lettura e scrittura. Perresources, selezioneremo le azioni del tipo di risorsa della tabella. Quando fai clic su di esso, puoi vedere una schermata come segue:
Ora seleziona table e Add ARNcome mostrato. OtterremoARN dettagli da customer table creato come mostrato di seguito -
accedere arn dettagli qui -
Clic Addpulsante per salvare le modifiche. Una volta fattoClick on Review policy. Immettere il nome della politica, la descrizione ecc. Come mostrato di seguito -
Clicca su create policyper salvarlo. Aggiungi la policy al ruolo da creare. SelezionareRole dal lato sinistro e inserire i dettagli.
Osserva che le politiche aggiunte sono newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess e amazonsesfullaccess. Aggiungi il ruolo e lo utilizzerà durante la creazione della funzione AWS Lambda.
Crea funzione in AWS Lambda
Pertanto, abbiamo creato la funzione Lambda chiamata newlambdafordynamodb come mostrato.
Ora, aggiungiamo il trigger DynamodDB ad AWS Lambda creato. Il runtime che useremo è Node.js.
Puoi trovare i seguenti dettagli nel trigger Dynamodb che deve essere configurato per AWS Lambda:
Ora, fai semplicemente clic Add per aggiungere il trigger ad AWS Lambda.
Trigger AWS Lambda per inviare posta
AWS Lambda verrà attivato quando i dati vengono inseriti in AWS Lambda. Il parametro dell'evento avrà i dati dynamodb inseriti. Questo leggerà i dati dell'evento e invierà un'e-mail.
Invio di un'e-mail
Per inviare e-mail, è necessario seguire i passaggi indicati di seguito:
Passo 1
Vai al servizio AWS e seleziona SES (semplice servizio di posta elettronica). Convalida l'e-mail a cui dobbiamo inviare un'e-mail come mostrato -
Passo 2
Fare clic sul pulsante Verify a New Email Address per aggiungere l'indirizzo e-mail.
Passaggio 3
Inserisci un indirizzo email per verificarlo. L'indirizzo e-mail riceverà e la posta di attivazione da Amazon su cui è necessario fare clic. Al termine dell'attivazione, l'ID e-mail viene verificato e può essere utilizzato con i servizi AWS.
Passaggio 4
Di seguito viene fornito il codice AWS Lambda che legge i dati dall'evento e invia e-mail:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
console.log(tabledetails.NewImage.address.S);
let customerid = tabledetails.NewImage.cust_id.S;
let name = tabledetails.NewImage.name.S;
let address = tabledetails.NewImage.address.S;
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
}
},
Subject: {
Data: "Data Inserted in Dynamodb table customer"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
}
Ora salva la funzione Lambda ei dati nella tabella DynamoDB.
Aggiungi dati in DynamoDB
Usa la seguente sequenza per aggiungere dati in DynamoDB.
Passo 1
Vai al tavolo customer creato in Dynamodb.
Passo 2
Clic Create item.
Passaggio 3
Clic Save e controlla l'ID e-mail fornito in AWS Lambda per vedere se il messaggio è stato inviato da AWS Lambda.
Utilizzo della funzione Lambda con eventi pianificati
Si suppone che gli eventi pianificati si verifichino a intervalli regolari in base a una serie di regole. Gli eventi pianificati vengono utilizzati per eseguire la funzione Lambda dopo un intervallo definito nei servizi cloudwatch. Sono utilizzati al meglio per lavorare su cron job insieme ad AWS Lambda. Questo capitolo spiegherà con un semplice esempio come inviare posta ogni 5 minuti utilizzando eventi pianificati e AWS Lambda.
Requisiti
I requisiti per l'utilizzo della funzione Lambda con eventi pianificati sono i seguenti:
- Verifica l'ID e-mail utilizzando AWS SES
- Crea un ruolo per utilizzare AWS SES, Cloudwatch e AWS Lambda
- Crea funzione Lambda per inviare email
- Aggiungi regola per eventi pianificati da AWS CloudWatch
Esempio
L'esempio che prenderemo in considerazione aggiungerà l'evento CloudWatch alla funzione AWS Lambda. Cloudwatch attiverà AWS Lambda in base al modello temporale ad esso associato. Ad esempio, nell'esempio seguente abbiamo utilizzato 5 minuti come trigger. Significa che ogni 5 minuti AWS Lambda verrà attivato e AWS Lambda invierà posta ogni volta che viene attivato.
Lo schema a blocchi di base per lo stesso è mostrato di seguito:
Verifica l'ID e-mail utilizzando AWS SES
Accedi ad AWS e vai al servizio AWS SES come mostrato di seguito:
Ora fai clic su Simple Email Servizio come mostrato -
Clic Email Addresses sul lato sinistro come mostrato -
Visualizza un pulsante Verify a New Email Address. Cliccalo.
accedere Email Addressvuoi verificare. ClicVerify This Email Addresspulsante. Riceverai posta da AWS su quell'ID email con oggetto dell'email: Amazon Web Services - Richiesta di verifica dell'indirizzo email nella regione Stati Uniti orientali (Virginia settentrionale)
Fare clic sul collegamento fornito nella posta per verificare l'indirizzo e-mail. Una volta verificato, mostrerà l'ID e-mail come segue:
Crea un ruolo per utilizzare AWS SES, Cloudwatch e AWS Lambda
È inoltre possibile creare un ruolo che dia il permesso di utilizzare i servizi. Per questo, vai su IAM e seleziona Ruolo. Aggiungi i criteri richiesti e crea il ruolo. Osserva che il ruolo creato qui èevents with lambda.
Crea funzione Lambda per inviare e-mail
Dovrai seguire i passaggi per creare la funzione Lambda utilizzando il runtime come nodejs.
Ora aggiungi il trigger a Lambda come mostrato -
Aggiungi dettagli a CloudWatch Events Trigger come mostrato di seguito -
Tieni presente che l'evento verrà attivato ogni 5 minuti in base al trigger della regola creato.
Di seguito è riportato il codice Lambda per l'invio di un'e-mail:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Ora abbiamo bisogno del servizio AWS SES. Puoi aggiungerlo utilizzando il codice mostrato come segue:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
Per inviare posta da nodejs, abbiamo creato eParams oggetto che ha dettagli come il example mail, to mail id e the body with message come segue -
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
Il codice Lambda per inviare la posta elettronica è il seguente:
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
Ora, salviamo questa funzione Lambda e controlliamo l'ID email per le email. Lo screenshot mostrato di seguito mostra che la posta viene inviata da AWS Lambda ogni 5 minuti.
Utilizzo della funzione Lambda con Amazon SNS
Amazon SNS è un servizio utilizzato per la notifica push. In questo capitolo, spiegheremo il funzionamento di AWS Lambda e Amazon SNS con l'aiuto di un esempio in cui verranno eseguite le seguenti azioni:
Crea argomento nel servizio SNS e utilizza AWS Lambda Aggiungi argomenti a CloudWatch
Invia messaggio di testo SNS sul numero di telefono fornito.
Requisiti
Per creare un argomento nel servizio SNS e utilizzare AWS Lambda Aggiungi argomenti a CloudWatch, non è necessario seguire i passaggi indicati di seguito:
- Crea argomento in SNS
- Crea ruolo per l'autorizzazione in IAM
- Crea funzione AWS Lambda
- Pubblica sull'argomento per attivare il trigger
- Controlla i dettagli del messaggio nel servizio CloudWatch.
Per inviare un messaggio di testo SNS sul numero di telefono fornito, dobbiamo fare quanto segue:
- Aggiungi il codice in AWS Lambda per inviare un messaggio al tuo telefono.
Esempio
In questo esempio, creeremo un argomento in SNS. Quando i dettagli vengono inseriti nell'argomento da pubblicare, viene attivato AWS Lambda. I dettagli dell'argomento vengono registrati in CloudWatch e un messaggio viene inviato al telefono da AWS Lambda.
Ecco uno schema a blocchi di base che spiega lo stesso:
Crea argomento in SNS
Dovrai seguire i passaggi indicati di seguito per creare un argomento in SNS -
Passo 1
Accedi alla Console AWS e vai al servizio SNS in Amazon come mostrato di seguito:
Passo 2
Clic Simple Notification Servizio e Create topic dentro.
Passaggio 3
Quindi, devi fare clic Create new topic pulsante come mostrato -
Passaggio 4
Inserisci il Topic name e Display name e fare clic su Create topic. Dovresti vedere il nome dell'argomento nel display come segue:
Crea un ruolo per l'autorizzazione in IAM
Per creare un ruolo che funzioni con AWS Lambda e il servizio SNS, è necessario accedere alla console AWS. Quindi, seleziona IAM dai servizi Amazon e fai clic sul ruolo dal lato sinistro come mostrato di seguito.
Tieni presente che abbiamo aggiunto criteri per SNS, Lambda e CloudWatch. Aggiungi il nome del ruolo e fai clic sul pulsante Crea ruolo per completare il processo di creazione del ruolo.
Crea funzione AWS Lambda
In questa sezione, vediamo come creare la funzione AWS Lambda utilizzando nodejs come runtime.
A tale scopo, accedi alla console AWS e scegli AWS Lambda dai servizi AWS. Aggiungi il nome della funzione, i dettagli del ruolo, ecc. E crea la funzione AWS Lambda come mostrato.
Aggiungi trigger SNS
Per aggiungere un trigger SNS, immettere i dettagli di configurazione SNS come mostrato -
Quindi seleziona SNS topic e Add il trigger per la funzione AWS Lambda come mostrato -
Quindi, aggiungi il codice lambda AWS indicato di seguito:
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const sns = event.Records[0].Sns.Message;
console.log(sns)
callback(null, sns);
};
Nel codice sopra, event.Records[0].Sns.Messagefornisce i dettagli del messaggio aggiunti. Abbiamo aggiunto i log della console per vederli in CloudWatch. Ora salva la funzione Lambda con la memoria richiesta e l'allocazione del tempo.
Pubblica su argomento per attivare il trigger
Ricorda che abbiamo già creato l'argomento in SNS nel passaggio 1. Ora pubblicheremo l'argomento e vedremo i dettagli in CloudWatch che verrà attivato da AWS Lambda -
Pubblica su Topic
Primo Selezionare il nome dell'argomento che si desidera pubblicare. Clicca suPublish to topic pulsante -
Inserisci il Subject e Message dettagli come mostrato di seguito -
Puoi anche selezionare JSON formato del messaggio da inviare JSONstile. ClicPublish the message pulsante alla fine dello schermo.
Controlla i dettagli del messaggio nel servizio CloudWatch
Accedi alla console AWS e apri il servizio CloudWatch. Fai clic sui log sul lato sinistro e seleziona i log per la funzione AWS Lambda creata. È possibile trovare la seguente schermata per i registri con i messaggi creati come mostrato sopra:
Aggiungi codice in AWS Lambda per inviare un messaggio al tuo telefono
Qui utilizzerà la messaggistica di testo SNS per inviare un messaggio al telefono utilizzando AWS Lambda. Puoi utilizzare il codice seguente per aggiornare il codice AWS Lambda come segue:
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const snsmessage = event.Records[0].Sns.Message;
console.log(snsmessage);
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
};
Abbiamo aggiunto AWS SDK e il servizio SNS da utilizzare per inviare messaggi. Il messaggio dell'evento proveniente da SNS viene inviato come messaggio di testo al numero di telefono fornito.
Ad esempio, osservare il codice seguente:
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
Inserisci ora l'argomento per vedere il messaggio in cloudwatch e il numero di telefono indicato sopra.
Clic Publish messageper pubblicare il messaggio. Viene visualizzato un messaggio sul numero di telefono fornito come segue:
Utilizzo della funzione Lambda con CloudTrail
AWS CloudTrailè un servizio disponibile con Amazon, che aiuta a registrare tutte le attività svolte all'interno della console AWS. Registra tutte le chiamate API e memorizza la cronologia, che può essere utilizzata in seguito a scopo di debug. Tieni presente che non possiamo attivare Lambda da CloudTrail. Invece, CloudTrail archivia tutta la cronologia sotto forma di log nel bucket S3 e possiamo attivare AWS Lambda da S3. Una volta che i log devono essere elaborati, AWS Lambda verrà attivato ogni volta che i log vengono aggiunti al bucket S3.
Requisiti
Prima di iniziare a lavorare con AWS CloudTrail, S3 e AWS Lambda, devi eseguire le seguenti operazioni:
- Crea un bucket S3 per archiviare i log di CloudTrail
- Crea servizio SNS
- Crea un percorso in CloudTrail e assegna il bucket S3 e il servizio SNS
- Crea un ruolo IAM con autorizzazione.
- Crea una funzione lambda aws
- Configurazione AWS Lambda
Esempio
Consideriamo un esempio che mostra il funzionamento di AWS CloudTrail, S3 e AWS Lambda. Qui creeremo un bucket in S3 che memorizzerà tutti i log per qualsiasi interazione eseguita nella console AWS. Creiamo un argomento SNS e pubblichiamo. Per questa azione, i log verranno inseriti come file in S3. Verrà attivato AWS lambda che invierà la posta utilizzando il servizio Amazon SES.
Lo schema a blocchi per spiegare questo processo è come mostrato di seguito:
Crea bucket S3 per archiviare i log di CloudTrail
Vai alla console AWS e fai clic sul servizio S3. ClicCreate bucket e inserisci il nome del bucket in cui desideri archiviare i log di cloudtrail come mostrato -
Osserva che qui abbiamo creato un bucket S3 cloudtraillogsaws per memorizzare i registri.
Crea servizio SNS
Vai alla console AWS e fai clic su Simple notification Service. Seleziona gli argomenti dal lato sinistro e fai clic sul pulsante Crea nuovo argomento.
Abbiamo creato un argomento chiamato displaytrailper pubblicare un argomento. I suoi dettagli verranno archiviati in S3bucket creato sopra.
Crea un percorso in Cloudtrail e assegna il bucket S3 e il servizio SNS
Vai alla console AWS e fai clic su CloudTrail servizio dagli strumenti di gestione come mostrato -
Clic Trails dal lato sinistro come mostrato di seguito -
Clic Create Trailpulsante. Inserisci ilTrail name, Apply trail to all regions e scegli Yes. Quindi Quindi i log verranno applicati per tutta la regione.
Per Read/Write events, scegli All. Aggiungi ilS3 bucket e SNS topicdettagli come mostrato di seguito. Puoi crearne uno nuovo qui o aggiungerne uno esistente.
Tieni presente che sono disponibili opzioni per encrypt log files, enable log file validation, send sns notification for every log file deliveryecc. Ho usato i valori predefiniti qui. È possibile consentire la crittografia dei file e verrà richiesta la chiave di crittografia. Fare clic sul pulsante Crea percorso una volta aggiunti i dettagli.
Crea ruolo IAM con autorizzazione
Vai alla console AWS e seleziona IAM. Crea un ruolo con autorizzazione per S3, Lambda, CloudTrail e SES per l'invio di e-mail. Il ruolo creato è come mostrato di seguito:
Crea funzione AWS Lambda
Vai al servizio AWS e fai clic su Lambdaservizio. Aggiungi il nome della funzione, seleziona runtime comenodejse seleziona il ruolo creato per la funzione lambda. Di seguito è la funzione lambda creata.
Configurazione AWS Lambda
Successivamente, dobbiamo aggiungere S3 come trigger per AWS lambda creato.
Aggiungi i dettagli del bucket S3 per aggiungere il trigger e aggiungi il seguente codice AWS Lambda:
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
console.log(s3message);
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:s3message
}
},
Subject: {
Data: "cloudtrail logs"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Tieni presente che stiamo prendendo il bucket S3 e i dettagli del registro dall'evento e inviamo la posta utilizzando il servizio SES come mostrato sopra.
Ogni volta che si verifica un'attività nella console AWS, i log verranno inviati al bucket S3 e, allo stesso tempo, AWS lambda verrà attivato e la posta verrà inviata all'ID e-mail menzionato nel codice.
Tieni presente che puoi elaborare i log in base alle tue esigenze in AWS Lambda.
Utilizzo della funzione Lambda con Amazon Kinesis
AWS Kinesisviene utilizzato per acquisire / memorizzare dati di tracciamento in tempo reale provenienti da clic del sito Web, log, feed dei social media. Possiamo attivare AWS Lambda per eseguire un'elaborazione aggiuntiva su questi log.
Requisiti
I requisiti di base per iniziare con Kinesis e AWS Lambda sono i seguenti:
- Crea un ruolo con le autorizzazioni richieste
- Crea un flusso di dati in Kinesis
- Crea la funzione AWS Lambda.
- Aggiungi codice ad AWS Lambda
- Aggiungi dati al flusso di dati Kinesis
Esempio
Lavoriamo su un esempio in cui attiveremo AWS Lambda per l'elaborazione del flusso di dati da Kinesis e invieremo la posta con i dati ricevuti.
Di seguito è mostrato un semplice diagramma a blocchi per spiegare il processo:
Crea ruolo con autorizzazioni richieste
Vai alla console AWS e crea un ruolo.
Crea flusso di dati in Kinesis
Vai alla console AWS e crea un flusso di dati in kinesis.
Ci sono 4 opzioni come mostrato. Lavoreremo su Crea flusso di dati in questo esempio.
Clic Create data stream. Immettere il nome nel nome del flusso Kinesis fornito di seguito.
Immettere il numero di frammenti per il flusso di dati.
I dettagli dei frammenti sono come mostrato di seguito:
Immettere il nome e fare clic su Create Kinesis stream pulsante in basso.
Tieni presente che è necessario un certo tempo affinché lo streaming diventi attivo.
Crea funzione AWS Lambda
Vai alla console AWS e fai clic su Lambda. Crea la funzione AWS Lambda come mostrato -
Clic Create functionpulsante alla fine dello schermo. Aggiungi Kinesis come trigger ad AWS Lambda.
Aggiungi i dettagli di configurazione al trigger Kinesis -
Aggiungi il trigger e ora aggiungi il codice ad AWS Lambda.
Aggiunta di codice ad AWS Lambda
A questo scopo, useremo nodejs come run-time. Invieremo la posta una volta che AWS Lambda viene attivato con il flusso di dati kinesis.
const aws = require("aws-sdk");
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
let payload = "";
event.Records.forEach(function(record) {
// Kinesis data is base64 encoded so decode here
payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload:', payload);
});
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:payload
}
},
Subject: {
Data: "Kinesis data stream"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Il parametro dell'evento contiene i dati immessi nel flusso di dati kinesis. Il codice lambda aws sopra verrà attivato una volta immessi i dati nel flusso di dati kinesis.
Aggiungi dati a Kinesis Data Stream
Qui useremo AWS CLI per aggiungere il flusso di dati di data kinesis come mostrato di seguito. A tale scopo, possiamo utilizzare il seguente comando:
aws kinesis put-record --stream-name kinesisdemo --data "hello world" --
partition-key "789675"
Quindi, AWS Lambda viene attivato e la posta viene inviata.
Utilizzo della funzione Lambda con applicazioni utente personalizzate
Possiamo utilizzare la funzione AWS lambda per elaborare utilizzando eventi generati dall'applicazione utente nei due modi seguenti:
- Utilizzo della console AWS
- Utilizzo di AWS CLI
Utilizzo della console AWS
Dalla console AWS, lavoreremo con eventi e AWS Lambda. A tale scopo, vai alla console AWS e crea una funzione lambda.
Successivamente, aggiungiamo il codice per AWS Lambda -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
Nota che nel codice sopra, stiamo stampando il nome e l'indirizzo usando event.
I dettagli dell'evento verranno forniti utilizzando l'evento di prova creato come segue:
Ora salva l'evento e provalo.
L'output del registro corrispondente è come mostrato qui -
Utilizzo di AWS CLI
Possiamo richiamare la funzione sopra utilizzando AWS CLI come segue:
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
I dettagli dell'evento vengono forniti al payload e l'output viene archiviato in C:\clioutput\outputfile.txt. come segue -
input.txt
{"name":"Roy Singh", "addr":"Mumbai"}
Quando si richiama Lambda utilizzando AWS CLI, è possibile vedere che l'output è il seguente:
Allo stesso modo, nel caso in cui desideri testare AWS Lambda per qualsiasi altro servizio AWS, puoi farlo utilizzando l'evento di test nella console AWS e nell'AWS CLI. Di seguito è riportato un evento di esempio per il servizio SNS:
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": "arnid",
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": "topicarn",
"Subject": "TestInvoke"
}
}]
}
Aggiungiamo l'evento di esempio mostrato sopra e testiamolo come mostrato -
In AWS Lambda, il codice stamperà il messaggio SNS come mostrato nell'esempio riportato di seguito:
exports.handler = (event, context, callback) => {
// TODO implement
console.log(event.Records[0].Sns.Message);
callback(null, event.Records[0].Sns.Message);};
Richiamiamo lo stesso utilizzando AWS CLI. Salviamo l'evento in un file e usiamo quello per il payload usando il comando mostrato -
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt
Utilizzo di AWS Lambda @ Edge con CloudFront
Lambda @ Edge è un'aggiunta al servizio di elaborazione AWS Lambda che viene utilizzato per personalizzare il contenuto fornito da cloudfront.
Di seguito è mostrato il diagramma a blocchi che mostra il funzionamento di AWS Lambda con cloudfront di AWS:
Esistono quattro modi in cui è possibile utilizzare AWS Lambda:
Viewer Request − L'utente finale effettua la richiesta denominata Viewer Request a CloudFront
Origin Request − CloudFront inoltra la richiesta all'origine
Origin Response − CloudFront riceve la risposta dall'origine
Viewer Response − CloudFront invia la risposta al visualizzatore
Possiamo utilizzare Lambda @ Edge per i seguenti scopi:
Per modificare le intestazioni su richiesta e tempo di risposta.
Aggiungi i dettagli dei cookie alle intestazioni. Eseguire test AB in base alla richiesta e alla risposta.
Reindirizza l'URL a un altro sito, in base ai dettagli dell'intestazione.
Possiamo recuperare lo user-agent dalle intestazioni e scoprire i dettagli del browser, del sistema operativo, ecc.
Requisiti
Per iniziare a lavorare su CloudFront e Lambda @ Edge, abbiamo bisogno di quanto segue:
Crea bucket di archiviazione S3 con i dettagli del file
Crea un ruolo che consentirà l'autorizzazione a lavorare con CloudFront e Lambda @ Edge
Crea distribuzione CloudFront
Crea funzione lambda
Aggiungi i dettagli della funzione lambda a cloudfront
Controlla l'URL di cloudfront nel browser
Lavoreremo su un esempio con CloudFront e Lambda @ Egde, in cui ospiteremo la pagina e cambieremo la risposta quando rilevata come desktop e dispositivi.
Crea un bucket di archiviazione S3 con i dettagli del file
Accedi alla console AWS e crea un bucket in S3 e aggiungi il file . html file che si desidera visualizzare.
Clicca su S3 e Create bucket come mostrato di seguito -
Ora fai clic su Create bucket e aggiungi i dettagli del secchio come mostrato di seguito -
Clicca su Create e carica il file .html al suo interno.
Crea ruolo
Vai alla console AWS e fai clic su IAM.
Ora fai clic su Roles -> Create role pulsante come mostrato -
Scegli l'autorizzazione per S3, Lambda e Cloudfront. È buona norma creare la policy dando il permesso solo alla funzione richiesta, archiviazione utilizzando i dettagli ARN.
Nell'esempio discusso di seguito, stiamo mostrando il file Full Accessautorizzazione. Criteri per il nome del ruolorole for cloudfrontviene aggiunto come mostrato sopra. Fare clic su Crea ruolo.
Tutti i criteri richiesti per lambda @ edge e cloudfront sono come mostrato sopra. C'è un ulteriore passaggio da fare qui poiché in caso di cloudfront l'URL sarà disponibile in tutta la regione e necessita di una relazione di fiducia tra i servizi che stiamo utilizzando.
Ora, per il ruolo creato, fai clic su Trust relationships scheda come mostrato -
Clicca su Edit Trust Relationship come mostrato di seguito -
Visualizza un documento della politica. Dobbiamo aggiungere gli altri servizi nel filePrincipal -> Serviceche abbiamo intenzione di utilizzare. Il documento finale sulla politica del rapporto di fiducia è come mostrato di seguito:
Clic Update Trust Policy pulsante per salvare le modifiche.
Crea distribuzione CloudFront
Vai al servizio CloudFront come mostrato di seguito -
Fare clic sul servizio CloudFront e fare clic su Create Distribution -
Impostazioni di origine, Impostazioni di comportamento e Impostazioni di distribuzione
Esaminiamo queste impostazioni una per una:
Origin Settings
I vari parametri delle impostazioni dell'origine vengono spiegati di seguito:
Origin Domain Name −Questo è il nome del bucket S3 in cui abbiamo archiviato i file html. Possiamo anche memorizzare le immagini, se presenti, nel bucket S3 creando cartelle di nostra scelta.
Origin Path −Qui è necessario inserire il nome della cartella in cui sono archiviati i file. Al momento non abbiamo questa cartella, quindi la terremo vuota per ora.
Origin ID −Viene popolato quando viene selezionato il nome del dominio di origine. Puoi modificare l'ID secondo la tua scelta.
Restrict Bucket Access − In questo, sceglieremo l'opzione yes. Qui abbiamo bisogno di sicurezza per il bucket S3 in modo che nessuno possa accedere al bucket S3. Per questa opzione ci sono altre opzioni popolate comeOrigin Access Identity, Comment and Grant Read Permission on Bucket.
Origin Access Identity −Abbiamo usato crea una nuova opzione di identità. Puoi anche scegliere l'identità esistente. Questo crea una nuova identità che viene utilizzata da CloudFront per leggere i dettagli dal bucket S3.
Grand Read Permission on Bucket − Per questo, scegli l'opzione Yes.
Origin Custom Headers − Manterremo vuote le intestazioni qui, poiché non abbiamo bisogno dei dettagli in questo momento.
Quindi, discutiamo e riempiamo il file Behaviour Settings per la distribuzione Cloudront -
Ora seleziona il protocollo - https o http e l'opzione di memorizzazione nella cache. Si noti che la memorizzazione nella cache predefinita è 86400 o 24 ore. È possibile modificare questo valore secondo il requisito.
Clic Object Caching(opzione personalizza) per modificare la memorizzazione nella cache. Puoi usaresmooth streamingnel caso in cui ci siano dei video sulla tua pagina. Qui, stiamo mantenendo disponibile l'opzione predefinita. Una volta creata la funzione lambda, verranno aggiunti i suoi dettagli.
I dettagli per le impostazioni di distribuzione sono mostrati di seguito:
Di seguito vengono spiegati vari parametri delle impostazioni di distribuzione:
Price class −Ha dettagli come l'origine del traffico degli utenti. Nota che qui abbiamo selezionato quello predefinito -Use All Edge Locations.
AWS WAF Web ACL −Serve per la selezione del firewall dell'applicazione web. Qui ha l'opzione comeNone. Innanzitutto, dobbiamo creare il firewall in AWS. Fornisce sicurezza al sito.
Alternate Domain Names − Qui puoi specificare il nome del dominio, se hai.
SSL Certificate −Questo ha tutti i dettagli da selezionare per il certificato SSL. Manterremo quelli predefiniti.
Default Root Object −Qui specificheremo il nome del file che abbiamo caricato in S3. Per questo, abbiamo bisogno che il contenuto del .html venga visualizzato per impostazione predefinita.
Per il resto, manterremo l'impostazione predefinita.
Clic Create Distribution pulsante per aggiungere la distribuzione.
Tieni presente che la distribuzione impiegherà del tempo per mostrare lo stato come distribuito.
Crea funzione AWS Lambda
Vai alla console AWS e crea la funzione Lambda.
Nel codice AWS Lambda, prenderemo le intestazioni della richiesta e controlleremo lo user-agent. Se lo user-agent proviene dal desktop, cambieremo la risposta per visualizzare il messaggio come“DESKTOP : Welcome to AWS Lambda with Cloudfront!” e se dispositivo il messaggio sarà“MOBILE DEVICES : Hello from Lambda@Edge!”
Il codice AWS Lambda corrispondente è come mostrato di seguito:
let content = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1>
</body>
</html>
`;
let content1 = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1>
</body>
</html>
`;
exports.handler = (event, context, callback) => {
let request = event.Records[0].cf.request;
let finalrequest = JSON.stringify(request);
let headers = request.headers;
let useragent = JSON.stringify(headers["user-agent"][0].value);
let str = "";
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) {
str = content;
} else {
str = content1;
}
const response = {
status: '200',
statusDescription: 'OK',
body: str+useragent,
};
callback(null, response);
};
Ora salva la funzione Lambda. Nota che dobbiamo pubblicare la funzione Lambda in modo che possa essere utilizzata con tutte le regioni. Per pubblicare, dobbiamo fare quanto segue:
Dal menu a discesa Azioni, seleziona Publish new version come mostrato di seguito -
Se fai clic su Publish new version, visualizza la seguente schermata:
Ora, inserisci la descrizione della versione e fai clic su Publish. L'ARN mostrerà la versione della funzione AWS Lambda creata come mostrato di seguito:
Aggiungi il trigger CloudFront alla nuova versione creata come mostrato di seguito -
Ora aggiungi i dettagli di configurazione per CloudFront. L'evento CloudFront ha un'opzione perViewer request, Origin request, Origin response, e Viewer response.
Quindi, scegli la distribuzione CloudFront creata in precedenza. A partire dalevents, selezioneremo Viewer request. In base alla richiesta del visualizzatore, verrà deciso il desktop / dispositivo dallo user-agent e la risposta verrà modificata. Successivamente, aggiungi i dettagli del trigger.
Una volta aggiunto il trigger, è necessario attendere che venga distribuita la distribuzione da CloudFront.
Una volta che lo stato viene modificato in Deployed, possiamo testare l'URL di CloudFront e controllare il nome del dominio nel browser.
La visualizzazione nel browser desktop è come mostrato di seguito. Qui abbiamo stampato lo user-agent dall'evento di richiesta del visualizzatore.
Questa è la visualizzazione nel dispositivo mobile.
Pertanto, nell'esempio precedente, abbiamo utilizzato Lambda @ Edge per modificare la risposta sul desktop e sul dispositivo mobile.
Monitoraggio e risoluzione dei problemi utilizzando Cloudwatch
Le funzioni create in AWS Lambda sono monitorate da Amazon CloudWatch. Aiuta a registrare tutte le richieste fatte alla funzione Lambda quando viene attivata.
Considera che il codice seguente viene caricato in AWS Lambda con il nome della funzione come lambda and cloudwatch.
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
callback(null, 'Hello from Lambda');
};
Quando la funzione viene testata o attivata, dovresti vedere una voce in Cloudwatch. A tale scopo, vai ai servizi AWS e fai clic su CloudWatch.
Seleziona i registri dal lato sinistro.
Quando fai clic su Logs, ha l'estensione Log Groupsdella funzione AWS Lambda creata nel tuo account. Seleziona una qualsiasi funzione AWS Lambda e controlla i dettagli. Qui ci riferiamo alla funzione Lambda con il nome:lambdaandcloudwatch. I log aggiunti alla funzione Lambda vengono visualizzati qui come mostrato di seguito -
Ora, aggiungiamo il trigger S3 alla funzione Lambda e vediamo i dettagli dei log in CloudWatch come mostrato di seguito -
Cerchiamo di aggiornare il codice AWS Lambda per visualizzare il file caricato e il nome del bucket come mostrato nel codice riportato di seguito:
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].s3.bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
Ora aggiungi il file s3storetestlambdaEventbucket come mostrato -
Quando il file viene caricato, le funzioni AWS Lambda verranno attivate e i messaggi di log della console dal codice Lambda vengono visualizzati in CloudWatch come mostrato di seguito:
In caso di errore, CloudWatch fornisce i dettagli dell'errore come mostrato di seguito:
Tieni presente che nel codice AWS Lambda abbiamo fatto erroneamente riferimento al nome del bucket, come mostrato:
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
Il riferimento al nome del bucket dall'evento è sbagliato. Pertanto, dovremmo vedere un errore visualizzato in CloudWatch come mostrato di seguito -
Metriche di CloudWatch
I dettagli dell'esecuzione della funzione Lambda possono essere visualizzati nelle metriche. ClicMetrics visualizzato sul lato sinistro.
I dettagli del grafico per la funzione lambda lambdaandcloudwatch sono come mostrato di seguito -
Fornisce dettagli come la durata di esecuzione della funzione Lambda, il numero di volte in cui viene richiamata e gli errori della funzione Lambda.
AWS Lambda - Esempio aggiuntivo
Finora abbiamo visto lavorare AWS Lambda con i servizi AWS. Sulla base di queste conoscenze, creiamo un semplice modulo di registrazione utente e pubblichiamo i dati utilizzando il gateway API in AWS Lambda. AWS Lambda otterrà i dati dall'evento o dal trigger del gateway API e aggiungerà tali dettagli alla tabella DynamoDB.
Esempio
Consideriamo un esempio ed eseguiamo le seguenti funzionalità su di esso:
Crea tabella DynamoDB
Crea modulo per registrazione utente
Crea AWS Lambda e il gateway API per inviare messaggi al telefono utilizzando il servizio AWS SNS
Crea AWS Lambda e il gateway API per i dati del modulo POST e inseriscili nella tabella DynamoDb
Crea AWS Lambda e il gateway API per leggere i dati dalla tabella Dynamodb
Elaborazione finale del modulo di registrazione dell'utente
Crea tabella DynamoDB
I dati inseriti verranno memorizzati nella tabella DynamodDB. Useremo il gateway API per condividere i dati immessi con AWS Lambda e successivamente AWS Lambda aggiungerà i dettagli in DynamoDB.
Puoi utilizzare i seguenti dettagli per creare la tabella DynamodDB nella console AWS. Per prima cosa, vai al servizio AWS e fai clic suDynamoDB. ClicTable per creare la tabella come mostrato di seguito -
Puoi utilizzare l'ARN per creare policy per DynamoDB da utilizzare con AWS Lambda.
Vai a IAM e seleziona Policies. ClicCreate policy, scegli il servizio come DynamodDB come mostrato di seguito -
Clic All DynamoDBazioni come mostrato sopra. Scegli la risorsa e inserisci l'ARN per la tabella come mostrato di seguito -
Ora fai clic su Add come mostrato di seguito.
Se fai clic su Review policy alla fine dello schermo, puoi vedere la seguente finestra:
Immettere il nome della politica e fare clic Create policypulsante alla fine della pagina. Ora, dobbiamo creare un ruolo da utilizzare con Lambda. Abbiamo bisogno delle autorizzazioni perDynamoDB, APIGateway e Lambda.
Vai ai servizi AWS e seleziona IAM. Seleziona Ruoli dal lato sinistro e aggiungi i ruoli richiesti.
Immettere il nome del ruolo e fare clic su Create role. Il ruolo creato èroleforlambdaexample.
Crea modulo per registrazione utente
Ecco la visualizzazione del form di registrazione utente per entrare e leggere i dati dalla tabella dynamodb.
Crea AWS Lambda e API Gateway per inviare messaggi OTP al telefono utilizzando il servizio SNS
Se vedi il modulo di registrazione utente, è presente un pulsante validate phone. L'utente deve inserire il numero di telefono e fare clic suvalidate phone pulsante per convalidare il numero di telefono.
A questo scopo -
Quando un utente fa clic su questo pulsante, viene chiamato il metodo di post del gateway API che contiene i dettagli del telefono e internamente viene attivato AWS Lambda.
Quindi, AWS Lambda invia OTP al numero di telefono inserito utilizzando il servizio AWS SNS.
L'utente riceve l'OTP e deve inserire questo numero OTP.
La casella di testo per inserire OTP apparirà quando il numero di telefono è inserito e validate phone si fa clic sul pulsante.
L'OTP ricevuta da AWS Lambda e l'OTP immesso dall'utente devono corrispondere, per consentire all'utente di inviare il modulo di registrazione utente.
Di seguito è mostrato un semplice diagramma a blocchi che spiega il funzionamento della convalida telefonica:
La funzione AWS Lambda creata è come mostrato qui:
Il codice AWS Lambda corrispondente è il seguente:
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
let phoneno = event.mphone;
let otp = Math.floor(100000 + Math.random() * 900000);
let snsmessage = "Your otp is : "+otp;
sns.publish({
Message: snsmessage,
PhoneNumber: "+91"+phoneno
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, otp);
}
});
};
Tieni presente che stiamo utilizzando il servizio SNS per inviare il codice OTP. Questo codice viene utilizzato per convalidare il numero di cellulare inserito dall'utente nel modulo di registrazione utente. Il gateway API creato per la convalida del telefono sopra è il seguente:
La funzione Lambda data è phonevalidationexample. Stiamo prendendo i dettagli del telefono cellulare qui da utilizzare all'interno di AWS Lambda. Quindi, AWS Lambda invierà il codice OTP al numero di cellulare specificato.
Crea AWS Lambda e API Gateway per POST i dati del modulo e inseriscili nella tabella DynamoDB
Per il modulo di registrazione utente, tutti i campi sono obbligatori. Viene eseguita una chiamata AJAX in cui i dati immessi nel modulo vengono inviati all'URL di API Gateway.
Un semplice diagramma a blocchi che spiega il funzionamento del pulsante di invio è mostrato qui -
Una volta compilato il modulo, il pulsante di invio chiamerà il gateway API che attiverà AWS Lambda. AWS Lambda otterrà i dettagli del modulo dall'evento o dall'API Gateway ei dati verranno inseriti nella tabella DynamodDB.
Cerchiamo di capire la creazione di API Gateway e AWS Lambda.
Innanzitutto, vai ai servizi AWS e fai clic su Lambda. La funzione Lambda creata è come mostrato qui -
Ora, per creare un gateway API, vai al servizio AWS e seleziona API Gateway. Clicca suCreate API pulsante mostrato sotto.
Inserisci il API name e fare clic su Create API pulsante per aggiungere l'API.
Ora viene creata un'API chiamata come registeruser. Seleziona l'API e fai clic suActions menu a discesa per creare Resource.
Clic Create Resource. Ora, aggiungiamo il filePOSTmetodo. Per questo, fai clic sulle risorse create sul lato sinistro e daActions selezione a discesa create method. Verrà visualizzato un menu a discesa come mostrato di seguito:
Seleziona il metodo POST e aggiungi la funzione Lambda che abbiamo creato sopra.
Clic Savepulsante per aggiungere il metodo. Per inviare i dettagli del modulo alla funzione Lambdalambdaexample dobbiamo aggiungere il file Integration Request come mostrato di seguito -
Per pubblicare i dettagli del modulo, dovrai fare clic Integration Request. Verrà visualizzato di seguito i dettagli.
Clic Body Mapping Templates per aggiungere i campi del modulo da registrare.
Quindi fare clic su Add mapping templatee inserisci il tipo di contenuto. Qui, abbiamo aggiuntoapplication/jsoncome tipo di contenuto. Fare clic e qui è necessario inserire il campo in formato json come mostrato di seguito -
Ora, fai clic su Save e distribuisci l'API come mostrato di seguito:
Ecco l'API creata per POST che utilizzerà all'interno del nostro file .html. Tieni presente che dobbiamo abilitare CORS per la risorsa creata. Utilizzerà l'URL del gateway API per effettuare una chiamata ajax, quindi il CORS deve essere abilitato.
Seleziona i metodi su cui desideri abilitare CORS. Clicca suEnable CORS and replace existing CORS headers.
Visualizza la schermata di conferma come segue:
Clic Yes, replace existing values per abilitare CORS.
Il codice AWS Lambda per POST API Gateway è come mostrato qui:
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
console.log("Entering Data");
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
}
Il parametro dell'evento nel gestore AWS Lambda avrà tutti i dettagli aggiunti in precedenza nella richiesta di integrazione POST. I dettagli dell'evento vengono aggiunti alla tabella DynamodDB come mostrato nel codice.
Ora, dobbiamo ottenere i dettagli del servizio da AWS-SDK come mostrato di seguito:
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
Crea AWS Lambda e API Gateway per leggere i dati dalla tabella DynamodDB
Ora creeremo la funzione AWS Lambda per leggere i dati dalla tabella DynamoDB. Attiveremo APIGateway sulla funzione AWS Lambda che invierà i dati al modulo html.
La funzione AWS Lambda creata è come mostrato di seguito:
Il codice AWS Lambda corrispondente è il seguente:
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
var readdata = {
TableName : "registeruser",
Limit : 10
}
docClient.scan(readdata, function(err, data) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("Data is " + data);
callback(null, data);
}
});
}
Qui i dati vengono letti dalla tabella DynamoDB e forniti al callback. Ora creeremo APIGateway e aggiungeremo la funzione AWS Lambda come trigger.
Aggiungeremo il metodo get all'API creata in precedenza.
La funzione Lambda aggiunta è lambdareaddataexample. ClicSave per salvare il metodo e distribuire l'API.
Elaborazione finale del modulo di registrazione dell'utente
La visualizzazione finale del modulo è come mostrato di seguito:
Ora, inserisci i dettagli come mostrato sopra. Tieni presente che il pulsante di invio è disabilitato. Sarà abilitato solo quando tutti i dettagli saranno inseriti come mostrato -
Ora, inserisci il numero di cellulare e fai clic validate phonepulsante. Verrà visualizzato il messaggio di avviso che dice“OTP is send to the mobile, please enter the OTP to continue”. L'OTP inviato al numero di cellulare è il seguente:
Immettere l'OTP e i dettagli rimanenti e inviare il modulo.
I dati in DynamoDB registeruser la tabella dopo l'invio è come mostrato qui -
I dettagli del codice sono indicati di seguito:
Example1.html
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="formdet.js"></script>
<style>
input[type=text], input[type=password],button {
width: 100%;
padding: 5px 5px;
margin: 5px 0;
box-sizing: border-box;
}
#maincontainer {
width: 80%;
margin: auto;
padding: 10px;
}
div#userregistration {
width: 60%;
float: left;
}
div#userdisplay {
margin-left: 60%;
}
</style>
</head>
<body>
<div id="maincontainer">
<div id="userregistration">
<h1>User Registration Form</h1>
<table border="0">
<tr>
<td><b>First Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="fname" id="fname" /></td>
<td id="tdfname" style="display:none;"><span style="color:red;">Enter First Name</span></td>
</tr>
<tr>
<td><b>Last Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="lname" id="lname" /></td>
<td id="tdlname" style="display:none;"><span style="color:red;">Enter Last Name</span></td>
</tr>
<tr>
<td><b>Email Id<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="emailid" id="emailid" /></td>
<td id="tdemailid" style="display:none;"><span style="color:red;">Enter Email</span></td>
</tr>
<tr>
<td><b>Mobile No<span style="color:red;">*</span> : </b></td>
<td><input type="text" name="mphone" id="mphone"/></td>
<td id="tdmphone" style="display:none;"><span style="color:red;">Enter Mobile Number</span></td>
</tr>
<tr>
<td></td>
<td><button id="validatephone">validate phone</button></td>
<td></td>
</tr>
<tr id="otpdiv" style="display:none;">
<td><b>Enter OTP<span style="color:red;">*</span>:</b></td>
<td><input type="text" value="" name="otp" id="otp" /></td>
<td id="tdotp" style="display:none;"><span style="color:red;">Enter OTP</span></td>
</tr>
<tr>
<td><b>Username<span style="color:red;">*</span>: </b></td>
<td><input type="text" value="" name="uname" id="uname"/></td>
<td id="tduname" style="display:none;"><span style="color:red;">Enter Username</span></td>
</tr>
<tr><td><b>Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="passwd" id="passwd"/></td>
<td id="tdpasswd" style="display:none;"><span style="color:red;">Enter Password</span></td>
</tr>
<tr><td><b>Confirm Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="cpasswd" id="cpasswd"/></td>
<td id="tdcpasswd" style="display:none;"><span style="color:red;">Enter Confirm Password</span></td>
</tr>
<tr>
<td></td>
<td><button name="submit" id="submit" style="display:;" disabled="true">Submit</button></td>
<td></td>
</tr>
</table>
</div>
<div id="userdisplay">
<h1>User Display</h1>
<table id="displaydetails" style="display:block;width:80%;padding:5px;margin:5px; border: 1px solid black;">
<tr>
<td></td>
<td>FirstName</td>
<td>LastName</td>
<td>Mobile No</td>
<td>EmailID</td>
</tr>
</table>
</div>
</div>
</body>
</html>
formdet.js
function validateform() {
var sError="";
if ($("#fname").val() === "") { $("#tdfname").css("display","");
sError++;
}
if ($("#lname").val() === "") { $("#tdlname").css("display","");
sError++;
}
if ($("#emailid").val() === "") { $("#tdemailid").css("display","");
sError++;
}
if ($("#mphone").val() === "") { $("#tdmphone").css("display","");
sError++;
}
if ($("#otp").val() === "") { $("#tdotp").css("display","");
sError++;
}
if ($("#uname").val() === "") { $("#tduname").css("display","");
sError++;
}
if ($("#passwd").val() === "") { $("#tdpasswd").css("display","");
sError++;
}
if ($("#cpasswd").val() === "") { $("#tdcpasswd").css("display","");
sError++;
}
if (sError === "") {
return true;
} else {
return false;
}
}
$("#fname").change(function() { if ($("#fname").val() !== "") {
$("#tdfname").css("display","none"); } else { $("#tdfname").css("display","");
}
});
$("#lname").change(function() { if ($("#lname").val() !== "") {
$("#tdlname").css("display","none"); } else { $("#tdlname").css("display","");
}
});
$("#emailid").change(function() { if ($("#emailid").val() !== "") {
$("#tdemailid").css("display","none"); } else { $("#tdemailid").css("display","");
}
});
$("#mphone").change(function() { if ($("#mphone").val() !== "") {
$("#tdmphone").css("display","none"); } else { $("#tdmphone").css("display","");
}
});
$("#otp").change(function() { if ($("#otp").val() !== "") {
$("#tdotp").css("display","none"); } else { $("#tdotp").css("display","");
}
});
$("#uname").change(function() { if ($("#uname").val() !== "") {
$("#tduname").css("display","none"); } else { $("#tduname").css("display","");
}
});
$("#passwd").change(function() { if ($("#passwd").val() !== "") {
$("#tdpasswd").css("display","none"); } else { $("#tdpasswd").css("display","");
}
});
$("#cpasswd").change(function() { if ($("#cpasswd").val() !== "") {
$("#tdcpasswd").css("display","none"); } else { $("#tdcpasswd").css("display","");
}
});
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); } $(document).ready(function() {
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
});
$("#validatephone").on("click", function() { $.ajax({
type:'POST',
url:phonevalidationurl,
data:JSON.stringify({
"mphone":$("#mphone").val() }), success: function(data) { $("#otpdiv").css("display", "");
alert("OTP is send to the mobile, please enter to continue");
console.log(data);
otpsend = data;
},
error : function(err) {
$("#otpdiv").css("display", "none"); alert("Invalid mobile no."); } }); }); $("#submit").on("click", function() {
if (validateform()) {
$.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(),
"lname": $("#lname").val(), "emailid":$("#emailid").val(),
"mphone":$("#mphone").val(), "otp":$("#otp").val(),
"uname":$("#uname").val(), "passwd":$("#passwd").val(),
"cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
getdata();
});
Fino ad ora, abbiamo fatto una chiamata AJAX all'API creata e pubblicato i dati come mostrato sopra.
La chiamata AJAX per aggiungere i dati alla tabella è la seguente:
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
$(document).ready(function() {
$("#submit").on("click", function() { if (validateform()) { $.ajax({
type:'POST',
url:posturl,
data:JSON.stringify({
"fname": $("#fname").val(), "lname": $("#lname").val(),
"emailid":$("#emailid").val(), "mphone":$("#mphone").val(),
"otp":$("#otp").val(), "uname":$("#uname").val(),
"passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
});
Si noti che per leggere i dati, viene chiamata una funzione, il cui codice è dato di seguito -
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>');
});
},
error: function(err) {
console.log(err);
}
});
}
Quando fai clic sul pulsante di convalida del numero di cellulare, viene chiamato il seguente codice e invia il numero di cellulare:
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
$("#validatephone").on("click", function() {
$.ajax({ type:'POST', url:phonevalidationurl, data:JSON.stringify({ "mphone":$("#mphone").val()
}),
success: function(data) {
$("#otpdiv").css("display", ""); alert("OTP is send to the mobile, please enter the OTP to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none");
alert("Invalid mobile no.");
}
});
});
// Validate otp
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
}