View a markdown version of this page

Self-managed Archiviazione del codice 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à.

Self-managed Archiviazione del codice S3

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

Configurazione dell'archiviazione del codice S3 autogestita

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.

  2. Abilita il controllo delle versioni S3 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.

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

  4. Concedi il principale del servizio Lambda s3:GetObject e s3:GetObjectVersion le autorizzazioni per l'oggetto di origine. Vedi Configurazione delle autorizzazioni.

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

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" } } } ] }

Creazione di una funzione con storage S3 autogestito

Puoi creare una funzione con l'archiviazione del codice S3 autogestita utilizzando o. AWS CLI AWS CloudFormation

Utilizzo di AWS CLI

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

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 omettiS3ObjectStorageMode, l'impostazione predefinita è e COPY Lambda archivia il codice in un archivio. Lambda-managed

Utilizzo AWS CloudFormation

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

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

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 aREFERENCE, Lambda elimina la Lambda-managed copia del codice sorgente. Quando passi da REFERENCE aCOPY, 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

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

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 per i dettagli.

Considerazioni

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