

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
<a name="web-functions-code-s3"></a>

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'`codeConfig`interno della richiesta. `buildConfig` In`s3Object`, 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 

**Topics**
+ [Prerequisiti](#web-functions-code-s3-requirements)
+ [Autorizzazioni richieste](#web-functions-code-s3-permissions)
+ [Creazione di una funzione Web con codice da Amazon S3](#web-functions-code-s3-creating)
+ [Ciclo di vita dell'oggetto](#web-functions-code-s3-lifecycle)
+ [Multi-Region distribuzioni](#web-functions-code-s3-multi-region)

## Prerequisiti
<a name="web-functions-code-s3-requirements"></a>

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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html). 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](https://aws.amazon.com/s3/pricing/).

## Autorizzazioni richieste
<a name="web-functions-code-s3-permissions"></a>

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
<a name="web-functions-code-s3-caller-permissions"></a>

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
<a name="web-functions-code-s3-bucket-policy"></a>

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 in`arn: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
<a name="web-functions-code-s3-creating"></a>

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 omette`versionId`, 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}}"
      }'
  ```

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

## Ciclo di vita dell'oggetto
<a name="web-functions-code-s3-lifecycle"></a>

**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 per`lambda.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](web-functions-deployment.md)

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
<a name="web-functions-code-s3-multi-region"></a>

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](web-functions-endpoint-replication.md#web-functions-endpoint-replication-what)