

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 Event da un archivio di file.zip, Lambda archivia una copia del codice in un archivio. 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 codice direttamente da un bucket S3 del tuo account. Lambda non memorizza una copia del codice, quindi il codice non viene conteggiato nella quota di spazio di Lambda-managed archiviazione. 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 tranne le 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 interregionale](#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 usa un bucket esistente nel tuo account.

1. Abilita il controllo delle [versioni S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) per il bucket. Lambda richiede il controllo delle versioni 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 il principale del servizio Lambda `s3:GetObject` e `s3:GetObjectVersion` le autorizzazioni per l'oggetto di origine. Vedi [Configurazione delle autorizzazioni](#self-managed-storage-permissions).

1. Crea o aggiorna la tua 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 lo storage di codice S3 autogestito, concedi al servizio Lambda l'autorizzazione principal (`lambda.amazonaws.com`) per accedere ai tuoi oggetti di origine. Aggiungi la seguente policy sui 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}}"
        }
      }
    }
  ]
}
```

Questa policy sui bucket S3 è separata dal ruolo di esecuzione della funzione. La bucket policy è una policy basata sulle risorse che concede al servizio Lambda l'autorizzazione principal (`lambda.amazonaws.com`) per recuperare un oggetto di codice specifico in modo che Lambda possa ottimizzare la tua funzione. Non concede autorizzazioni a nessun altro principale e non concede l'autorizzazione a richiamare la funzione. Il [ruolo di esecuzione](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) della tua funzione è un'identità IAM separata che Lambda assume quando esegue la tua funzione; concedi invoke e altre autorizzazioni di runtime tramite le policy IAM collegate a quel ruolo. La concessione al servizio Lambda dell'accesso principale agli oggetti nel bucket non consente ad altre identità di accedere a tali oggetti o di richiamare le tue funzioni.

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

Puoi creare una funzione con l'archiviazione del 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 tuo 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. Apri la [pagina Event Functions](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

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

1. In **Codice sorgente**, scegli **Aggiorna**, quindi scegli **Aggiorna da un file in Amazon S3**.

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

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

1. Selezionare **Salva**.

Dopo aver configurato la modalità Reference, 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 ometti`S3ObjectStorageMode`, l'impostazione predefinita è e `COPY` Lambda archivia il codice in un archivio. Lambda-managed 

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

Nel tuo 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>

Puoi anche utilizzare l'archiviazione del codice S3 autogestita 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 di Lambda-managed storage autogestito per codice funzionale e codice di livello.

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

Puoi passare da una memorizzazione del codice S3 all'altra Lambda-managed e gestirla automaticamente quando aggiorni il codice della funzione o pubblichi una nuova versione di livello. Imposta su uno `S3ObjectStorageMode` dei due o su: `COPY` `REFERENCE`
+ `COPY`(impostazione predefinita): Lambda copia il codice sorgente nello storage. Lambda-managed 
+ `REFERENCE`— Lambda fa riferimento al codice sorgente direttamente dal bucket S3 senza archiviarne una copia.

Quando passi da `COPY` a`REFERENCE`, Lambda elimina la Lambda-managed copia del codice sorgente. Quando passi da `REFERENCE` a`COPY`, Lambda crea una copia del codice sorgente in Lambda-managed archivio. 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 stato. `Inactive` Per ripristinare la funzione, ripristina l'accesso all'oggetto di origine 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 delle funzioni con il livello inaccessibile non riesce.

## Cross-account e utilizzo interregionale
<a name="self-managed-storage-cross-account"></a>

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

## 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 dei file.zip. Le funzioni di immagine dei container continuano a utilizzare Amazon ECR.
+ La dimensione massima del pacchetto di distribuzione.zip (250 MB decompressi) 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 tranne le classi di archiviazione Glacier.
+ Puoi utilizzare funzionalità di S3 come S3 Cross-Region Replication per condividere artefatti tra regioni e politiche del ciclo di vita di S3 per gestire gli oggetti.