

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

# Self-managed Archiviazione del codice S3
<a name="configuration-self-managed-storage"></a>

Per impostazione predefinita, quando crei o aggiorni una funzione o un layer Lambda da un archivio di file .zip, Lambda archivia una copia del codice in memoria. Lambda-managed Ogni AWS account ha una quota di 300 GB di spazio di Lambda-managed archiviazione per regione.

Con l'archiviazione del codice S3 autogestita, puoi configurare Lambda in modo che faccia riferimento al tuo codice direttamente da un bucket S3 nel tuo account. Lambda non memorizza una copia del codice, quindi il codice non viene conteggiato nella tua quota di archiviazione. Lambda-managed Lambda accede al codice direttamente dal bucket S3.

Self-managed L'archiviazione del codice S3 è disponibile per tutte le funzioni e i livelli creati e aggiornati utilizzando archivi di file .zip. È compatibile con tutte le classi di archiviazione S3 ad eccezione delle classi di archiviazione Glacier.

**Nota**  
Self-managed L'archiviazione del codice S3 non modifica la dimensione massima del pacchetto di distribuzione .zip, che rimane a 250 MB (decompresso).

**Topics**
+ [Configurazione dell'archiviazione del codice S3 autogestita](#self-managed-storage-setup)
+ [Configurazione delle autorizzazioni](#self-managed-storage-permissions)
+ [Creazione di una funzione con storage S3 autogestito](#self-managed-storage-create-function)
+ [Utilizzo dello storage S3 autogestito con livelli](#self-managed-storage-layers)
+ [Passaggio da una modalità di archiviazione all'altra](#self-managed-storage-switching)
+ [Ciclo di vita delle funzioni con storage autogestito](#self-managed-storage-lifecycle)
+ [Cross-account e utilizzo in più regioni](#self-managed-storage-cross-account)
+ [Considerazioni](#self-managed-storage-considerations)

## Configurazione dell'archiviazione del codice S3 autogestita
<a name="self-managed-storage-setup"></a>

Per utilizzare lo storage di codice S3 autogestito, completa i seguenti passaggi:

1. Crea un bucket S3 o utilizza un bucket esistente nel tuo account.

1. Abilita il controllo delle versioni [https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) S3 per il bucket. Lambda richiede il controllo delle versioni di S3 per tenere traccia della versione dell'oggetto sorgente da utilizzare. Ogni volta che carichi un nuovo pacchetto .zip, S3 crea una nuova versione in modo che Lambda possa distinguere gli aggiornamenti.

1. Carica il tuo pacchetto di distribuzione .zip nel bucket S3.

1. Concedi l'entità del servizio Lambda `s3:GetObject` e le `s3:GetObjectVersion` autorizzazioni per l'oggetto sorgente. Vedi [ Configurazione delle autorizzazioni. ](#self-managed-storage-permissions)

1. Crea o aggiorna la funzione o il livello, specificando l'oggetto S3, la chiave S3, la versione dell'oggetto S3 e impostando su. `S3ObjectStorageMode` `REFERENCE`

## Configurazione delle autorizzazioni
<a name="self-managed-storage-permissions"></a>

Per utilizzare l'archiviazione di codice S3 autogestita, concedi al servizio Lambda service principal (`lambda.amazonaws.com`) l'autorizzazione ad accedere agli oggetti sorgente. Aggiungi la seguente policy per il bucket S3:

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

## Creazione di una funzione con storage S3 autogestito
<a name="self-managed-storage-create-function"></a>

È possibile creare una funzione con archiviazione di codice S3 autogestita utilizzando la console, il, o. AWS CLI AWS CloudFormation

**Nota**  
L'editor di codice della console Lambda non è disponibile per le funzioni che utilizzano la modalità Reference. Per modificare il codice della funzione, aggiorna il file .zip nel bucket S3 e aggiorna la funzione.

### Utilizzo della console
<a name="self-managed-storage-console"></a>

Quando aggiorni una funzione da una posizione S3 nella console Lambda, puoi scegliere la modalità di archiviazione del codice.

**Per aggiornare una funzione per utilizzare la modalità Reference (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegliere la funzione da aggiornare e scegliere la scheda **Codice**

1. In ** Code source**, scegli ** Aggiorna**, quindi scegli ** Aggiorna da un file in Amazon S3**.

1. Per l'URL del link di ** Amazon S3**, inserisci l'URL del link S3 del tuo file .zip.

1. In modalità di archiviazione ** del codice**, scegli ** la modalità di riferimento. **

1. Scegli **Save** (Salva).

Dopo aver configurato la modalità di riferimento, la ** sezione delle proprietà del ** codice nella ** scheda ** Codice della funzione mostra la modalità di archiviazione del ** codice: Reference ** e la posizione ** S3 che ** punta al bucket S3.

### Utilizzo di AWS CLI
<a name="self-managed-storage-cli"></a>

Usa il `create-function` comando con il parametro: `S3ObjectStorageMode=REFERENCE`

```
aws lambda create-function \
  --function-name my-function \
  --runtime python3.12 \
  --role arn:aws:iam::111122223333:role/lambda-execution-role \
  --handler lambda_function.lambda_handler \
  --code S3Bucket={{my-bucket}},\
S3Key={{my-function.zip}},\
S3ObjectVersion={{abc123def456}},\
S3ObjectStorageMode=REFERENCE
```

Per aggiornare una funzione esistente per utilizzare lo storage S3 autogestito:

```
aws lambda update-function-code \
  --function-name my-function \
  --s3-bucket {{my-bucket}} \
  --s3-key {{my-function.zip}} \
  --s3-object-version {{abc123def456}} \
  --s3-object-storage-mode REFERENCE
```

**Importante**  
È necessario specificare `S3ObjectStorageMode=REFERENCE` in ogni chiamata a. `update-function-code` Se si omette`S3ObjectStorageMode`, il valore predefinito è `COPY` e Lambda memorizza il codice in memoria. Lambda-managed 

### Utilizzo AWS CloudFormation
<a name="self-managed-storage-cfn"></a>

Nel CloudFormation modello, imposta su `S3ObjectStorageMode` `REFERENCE` nella `Code` proprietà della risorsa: `AWS::Lambda::Function`

```
Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-function
      Runtime: python3.12
      Handler: lambda_function.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        S3Bucket: {{my-bucket}}
        S3Key: {{my-function.zip}}
        S3ObjectVersion: {{abc123def456}}
        S3ObjectStorageMode: REFERENCE
```

## Utilizzo dello storage S3 autogestito con livelli
<a name="self-managed-storage-layers"></a>

È inoltre possibile utilizzare lo storage di codice S3 autogestito per le versioni a più livelli. Usa il `publish-layer-version` comando con: `S3ObjectStorageMode=REFERENCE`

```
aws lambda publish-layer-version \
  --layer-name my-layer \
  --content S3Bucket={{my-bucket}},S3Key={{my-layer.zip}},S3ObjectStorageMode=REFERENCE \
  --compatible-runtimes python3.12
```

È possibile utilizzare qualsiasi combinazione Lambda-managed e archiviazione autogestita per il codice funzione e il codice di livello.

## Passaggio da una modalità di archiviazione all'altra
<a name="self-managed-storage-switching"></a>

È possibile passare dall'archiviazione del codice S3 all'altra Lambda-managed e gestirla automaticamente quando si aggiorna il codice della funzione o si pubblica una nuova versione del layer. Impostato su `S3ObjectStorageMode` uno o: `COPY` `REFERENCE`
+ `COPY`(impostazione predefinita): Lambda copia il codice sorgente nell' Lambda-managed archivio.
+ `REFERENCE`— Lambda fa riferimento al codice sorgente direttamente dal bucket S3 senza archiviarne una copia.

Quando si passa da `COPY` a`REFERENCE`, Lambda elimina la Lambda-managed copia del codice sorgente. Quando si passa da `REFERENCE` a`COPY`, Lambda crea una copia del codice sorgente in memoria. Lambda-managed Il passaggio a `COPY` non riesce se si supera il limite di archiviazione del Lambda-managed codice.

## Ciclo di vita delle funzioni con storage autogestito
<a name="self-managed-storage-lifecycle"></a>

Lambda accede periodicamente all'oggetto sorgente dal bucket S3 per riottimizzare il codice della funzione. È necessario mantenere l'accesso all'oggetto sorgente affinché la funzione rimanga attiva.
+ Se Lambda perde l'accesso all'oggetto sorgente di una funzione, la funzione passa allo `Inactive` stato. Per ripristinare la funzione, ripristina l'accesso all'oggetto sorgente e aggiorna la funzione.
+ Se Lambda perde l'accesso all'oggetto sorgente per un livello, la funzione rimane`Active`. È possibile aggiornare la configurazione della funzione (senza aggiornare i livelli), aggiornare il codice della funzione o aggiornare la configurazione della funzione con nuovi livelli. Tuttavia, l'aggiornamento della configurazione della funzione con il livello inaccessibile non riesce.

## Cross-account e utilizzo in più regioni
<a name="self-managed-storage-cross-account"></a>

Puoi creare funzioni e livelli dal codice sorgente nei bucket S3 in diversi account e in diverse regioni. Cross-Region il recupero degli oggetti comporta costi aggiuntivi per il trasferimento dei dati S3. Per i dettagli, consulta i prezzi [ di S3. ](https://aws.amazon.com/s3/pricing/)

## Considerazioni
<a name="self-managed-storage-considerations"></a>
+ Self-managed L'archiviazione del codice S3 è disponibile solo per le funzioni e i livelli di archiviazione di file .zip. Le funzioni di immagine dei contenitori continuano a utilizzare Amazon ECR.
+ La dimensione massima del pacchetto di distribuzione .zip (250 MB decompresso) rimane invariata.
+ Paghi le tariffe di storage standard di Amazon S3 per il codice archiviato nei tuoi bucket autogestiti. Lambda non addebita alcun costo per il recupero di oggetti S3 all'interno della stessa regione.
+ Self-managed L'archiviazione del codice S3 è compatibile con tutte le classi di archiviazione S3 ad eccezione delle classi di archiviazione Glacier.
+ Puoi utilizzare funzionalità S3 come S3 Cross-Region Replication per condividere gli artefatti tra le regioni e le policy del ciclo di vita S3 per gestire gli oggetti.