View a markdown version of this page

Distribuzione del codice Web Function da Amazon S3 - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Distribuzione del codice Web Function da Amazon S3

Fornisci il codice Lambda Web Function come pacchetto di distribuzione.zip in un bucket Amazon S3. Questo è l'unico modo per fornire il codice per una funzione Web. Quando crei una funzione Web o una revisione, specifica l'oggetto nel s3Object campo, che è annidato all'codeConfiginterno della richiesta. buildConfig Ins3Object, includi il bucket, la chiave e un VersionID opzionale. Lambda fa riferimento al codice direttamente dal bucket. Poiché Lambda associa ogni revisione a una versione specifica dell'oggetto, le tue implementazioni sono riproducibili. Puoi riutilizzare un singolo pacchetto di distribuzione tra account e regioni. AWS

Prerequisiti

Prima di distribuire il codice Web Function da Amazon S3, assicurati che il bucket e il pacchetto di distribuzione soddisfino i seguenti requisiti:

Controllo delle versioni S3

Il bucket deve avere il controllo delle versioni S3 abilitato. Lambda utilizza le versioni degli oggetti per tenere traccia della versione del codice utilizzata da una revisione.

ID versione

Il versionId parametro è facoltativo nella richiesta. Se lo ometti, Lambda utilizza la versione più recente dell'oggetto al momento della creazione. In entrambi i casi, Lambda associa la revisione a una versione specifica dell'oggetto.

Dimensione massima del pacchetto di distribuzione

512 MB (decompresso).

File di ingresso

Il pacchetto di distribuzione deve contenere il file di ingresso dell'applicazione. Per impostazione predefinita, il runtime viene caricato index.js nella radice del pacchetto. Per utilizzare un file di ingresso diverso, impostate la variabile di AWS_LAMBDA_NODEJS_ENTRYPOINT ambiente nella revisione sul percorso del file relativo alla radice del pacchetto. Dopo aver caricato il file di ingresso, il runtime attende che il server HTTP inizi ad ascoltare sull'host e sulla porta della variabile di AWS_LAMBDA_HTTP_ENDPOINT ambiente. Se il runtime non è in grado di risolvere il file di ingresso o il server non inizia mai l'ascolto, l'inizializzazione fallisce e le richieste all'endpoint falliscono.

Lambda non verifica che il server inizi ad ascoltare quando crea o aggiorna un endpoint per utilizzare la revisione. La revisione e l'endpoint possono ancora essere visualizzati in questi casi. Active Dopo ogni implementazione, invia una richiesta di test e controlla i registri delle applicazioni.

Posizione del bucket

Il bucket può trovarsi in un AWS account diverso e in una AWS regione diversa dalla funzione Web. Il bucket deve trovarsi nella stessa AWS partizione della funzione Web. Il bucket non può trovarsi in una regione opzionale (una regione che non è abilitata per impostazione predefinita). Se una delle due condizioni non è soddisfatta, Lambda rifiuta la richiesta. Cross-Region il recupero degli oggetti comporta costi aggiuntivi per il trasferimento dei dati in Amazon S3. Per ulteriori informazioni sui prezzi, consulta Prezzi di Amazon S3.

Autorizzazioni richieste

Per distribuire il codice Web Function da Amazon S3, devi configurare le autorizzazioni sia per l'identità chiamante che per l'entità del servizio Lambda.

Autorizzazioni del chiamante

Per creare la funzione Web o la revisione, la tua identità IAM necessita delle seguenti autorizzazioni sull'oggetto S3:

  • s3:GetObject

  • s3:GetObjectVersion

Per i bucket tra più account, la policy bucket deve inoltre concedere all'identità chiamante l'accesso all'oggetto.

Politica Bucket per Lambda

La policy bucket deve concedere il servizio Lambda principal lambda.amazonaws.com (s3:GetObject) s3:GetObjectVersion e le autorizzazioni. Definisci l'ambito della politica con una aws:SourceArn condizione che corrisponda al modello ARN di revisione. Utilizzalo ArnLike con un carattere jolly per l'ID di revisione, poiché Lambda genera l'ID di revisione quando crei la revisione.

Se l'oggetto è crittografato con una AWS KMS chiave (SSE-KMS), la policy della chiave deve consentire anche di richiamare lambda.amazonaws.com quella chiave. kms:Decrypt Lambda controlla l'accesso dell'entità del servizio quando crei la revisione e rifiuta la richiesta se manca l'accesso.

L'esempio seguente di bucket policy concede l'accesso Lambda per leggere i pacchetti di distribuzione per qualsiasi revisione della funzione Web specificata.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaWebFunctionCodeAccess", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::my-bucket/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } } ] }

Per limitare l'accesso al prefisso chiave che contiene i pacchetti di distribuzione, modifica il Resource valore inarn:aws:s3:::my-bucket/my-prefix/*, where my-bucket è il nome del bucket e my-prefix il prefisso della chiave. Mantieni il /* prefisso alla fine. Non modificare il carattere revision/* jolly in. aws:SourceArn

Creazione di una funzione Web con codice da Amazon S3

Specifichi il tuo pacchetto di distribuzione S3 nella codeConfig sezione di. buildConfig Le seguenti procedure mostrano come creare una funzione Web e come creare una nuova revisione utilizzando. AWS CLI

Per creare una funzione Web con codice da Amazon S3 (AWS CLI)
  • Esegui il comando seguente per creare una funzione Web che faccia riferimento al tuo pacchetto di distribuzione.zip in Amazon S3.

    aws lambda-web create-web-function \ --function-name my-web-app \ --revision-config '{ "buildConfig": { "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }, "serviceConfig": { "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" } }' \ --endpoint-config '{ "endpointName": "my-endpoint", "endpointType": "HomeRegion", "authType": "ApplicationManaged" }'

    Quando si ometteversionId, Lambda utilizza la versione più recente dell'oggetto al momento della creazione.

Per creare una nuova revisione con una versione specifica dell'oggetto (AWS CLI)
  • Esegui il comando seguente per creare una nuova revisione che utilizzi una versione specifica del pacchetto di distribuzione.

    aws lambda-web create-web-function-revision \ --function-name my-web-app \ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip", "versionId": "abc123def456" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" }'

    SpecificandoversionId, si aggiunge la revisione a una versione esatta dell'oggetto anziché alla versione più recente.

Ciclo di vita dell'oggetto

Non eliminare oggetti S3 o rimuovere l'accesso Lambda per le revisioni attive

Lambda fa riferimento al codice contenuto nel bucket Amazon S3. Se elimini l'oggetto S3 utilizzato da una revisione o la versione dell'oggetto specifica utilizzata dalla revisione, la revisione passa allo stato in Failed cui Lambda verificherà successivamente l'accesso all'oggetto e quindi non può più servire il traffico. Conserva le versioni dell'oggetto per tutte le revisioni che stai ancora utilizzando.

La rimozione dell'accesso dell'entità del servizio Lambda al bucket ha lo stesso effetto. Se modifichi la policy del bucket per negare o rimuovere s3:GetObject e s3:GetObjectVersion le autorizzazioni perlambda.amazonaws.com, le revisioni esistenti che fanno riferimento agli oggetti in quel bucket passano allo stato. Failed Mantieni sia gli oggetti che l'accesso in lettura del responsabile del servizio Lambda per tutto il tempo in cui qualsiasi revisione fa riferimento a tali oggetti.

Lo Failed stato è permanente. Il ripristino dell'oggetto eliminato o delle autorizzazioni del bucket non restituisce una revisione dello stato. Active Per ripristinare, crea una nuova revisione che faccia riferimento a una versione dell'oggetto disponibile, quindi aggiorna i pesi di revisione degli endpoint per indirizzare il traffico verso di essa. Per i modelli di distribuzione, consulta. Modelli di implementazione

Lambda non sposta automaticamente il traffico da una Failed revisione. Le richieste di indirizzamento di un endpoint a una Failed revisione vengono rifiutate con il codice di stato HTTP 409 e l'intestazione di risposta di. lambda-web-error-type Platform.RevisionNotActive Se l'endpoint valuta il traffico tra più revisioni, ne risente solo la quota di richieste indirizzate alla revisione; le richieste indirizzate a Failed revisioni integre vengono soddisfatte normalmente. Per interrompere gli errori, aggiorna i pesi di revisione dell'endpoint per rimuovere la revisione. Failed

La sovrascrittura dell'oggetto con un nuovo caricamento crea una nuova versione di S3. Ciò non influisce sulle revisioni esistenti: quando crei una revisione, Lambda risolve e fissa la versione esatta dell'oggetto, anche quando la ometti. versionId Tuttavia, se elimini una vecchia versione dell'oggetto a cui fa riferimento una revisione, tale revisione passa allo stato. Failed Il caricamento di un oggetto sostitutivo non aiuta, poiché la versione sostitutiva è una nuova versione con un ID di versione diverso.

Multi-Region distribuzioni

Per le funzioni Web con MultiRegion o PerRegion endpoint, Lambda legge l'oggetto sorgente dal bucket specificato, a prescindere dalla regione in cui si trova il bucket. Lambda replica quindi l'elemento di codice preparato che deriva da quell'oggetto nelle altre regioni. Non è necessario copiare il pacchetto di distribuzione in bucket in altre regioni. Per ulteriori informazioni su ciò che Lambda replica, consulta. Cosa replica Lambda