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 visualizzerà 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

Immettere 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 Modello 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: