Utilizzo di un modello AWS CloudFormation per automatizzare la configurazione di S3 Object Lambda - Amazon Simple Storage Service

Utilizzo di un modello AWS CloudFormation per automatizzare la configurazione di S3 Object Lambda

Nota

A partire dal 7 novembre 2025, Lambda per oggetti S3 sarà disponibile solo per i clienti esistenti che attualmente utilizzano il servizio e per alcuni partner della Rete dei partner AWS (APN). Se desideri utilizzare il servizio, registrati prima del 7 novembre 2025. Per funzionalità simili a Lambda per oggetti S3, consulta Modifica della disponibilità di Lambda per oggetti Amazon S3.

Puoi utilizzare un modello AWS CloudFormation per creare rapidamente un punto di accesso Lambda per oggetti Amazon S3. Il modello CloudFormation crea automaticamente risorse pertinenti, configura i ruoli AWS Identity and Access Management (IAM) e imposta una funzione AWS Lambda che gestisce automaticamente le richieste tramite il punto di accesso Lambda per oggetti. Con il modello CloudFormation, è possibile implementare best practice, migliorare la posizione di sicurezza e ridurre gli errori causati dai processi manuali.

Questo Repository GitHub contiene il modello CloudFormation e il codice sorgente della funzione Lambda. Per istruzioni su come utilizzare il modello, consulta Creazione di punti di accesso Object Lambda.

La funzione Lambda fornita nel modello non esegue alcuna trasformazione. Restituisce invece gli oggetti così come sono dall’origine dati sottostante. È possibile clonare la funzione e aggiungere il proprio codice di trasformazione per modificare ed elaborare i dati man mano che vengono restituiti ad un'applicazione. Per ulteriori informazioni sulla modifica della funzione, consulta Modifica della funzione Lambda e Scrittura di funzioni Lambda per i punti di accesso Lambda per oggetti S3.

Modificare il modello

Creazione di un nuovo punto di accesso di supporto

Lambda per oggetti S3 utilizza due punti di accesso, un punto di accesso Lambda per oggetti e un punto di accesso S3 standard, denominato punto di accesso di supporto. Quando effettui una richiesta a un punto di accesso Lambda per oggetti, S3 invoca Lambda per tuo conto o delega la richiesta al punto di accesso di supporto, a seconda della configurazione di Lambda per oggetti S3. È possibile creare un nuovo punto di accesso di supporto passando il seguente parametro come parte del comando aws cloudformation deploy durante l'implementazione del modello.

CreateNewSupportingAccessPoint=true
Configurazione di un payload di funzione

È possibile configurare un payload per fornire dati supplementari alla funzione Lambda passando il seguente parametro come parte del comando aws cloudformation deploy al momento dell'implementazione del modello.

LambdaFunctionPayload="format=json"
Abilitazione del monitoraggio di Amazon CloudWatch

È possibile abilitare il monitoraggio di CloudWatch passando il seguente parametro come parte del comando aws cloudformation deploy al momento dell'implementazione del modello.

EnableCloudWatchMonitoring=true

Questo parametro abiliterà il punto di accesso Lambda per oggetti per le metriche della richiesta Amazon S3 e creerà due allarmi CloudWatch per monitorare gli errori lato client e lato server.

Nota

L'utilizzo di Amazon CloudWatch comporta costi aggiuntivi. Per ulteriori informazioni sulle metriche delle richieste Amazon S3, consulta la sezione Monitoraggio e registrazione degli access point.

Per informazioni sui prezzi, consulta i prezzi di CloudWatch.

Configurazione della simultaneità fornita

Per ridurre la latenza, è possibile configurare la simultaneità con provisioning per la funzione Lambda che supporta il punto di accesso Lambda per oggetti modificando il modello per includere le seguenti righe in Resources.

LambdaFunctionVersion: Type: AWS::Lambda::Version Properties: FunctionName: !Ref LambdaFunction ProvisionedConcurrencyConfig: ProvisionedConcurrentExecutions: Integer
Nota

Saranno applicati costi aggiuntivi la simultaneità con provisioning. Per ulteriori informazioni sulla simultaneità con provisioning, consulta Gestione della simultaneità con provisioning di Lambda nella Guida per gli sviluppatori di AWS Lambda.

Per i dettagli sui prezzi, vedere Prezzi di AWS Lambda.

Modifica della funzione Lambda

Modifica dei valori di intestazione per una richiesta GetObject

Per impostazione predefinita, la funzione Lambda inoltra tutte le intestazioni, eccetto Content-Length ed ETag, dalla richiesta URL prefirmata al client GetObject. In base al codice di trasformazione nella funzione Lambda, puoi scegliere di inviare nuovi valori di intestazione al client GetObject.

È possibile aggiornare la funzione Lambda per inviare nuovi valori di intestazione passandoli nell'operazione API WriteGetObjectResponse.

Ad esempio, se la funzione Lambda traduce il testo negli oggetti Amazon S3 in una lingua diversa, puoi passare un nuovo valore nell'intestazione Content-Language. Puoi fare ciò modificando la funzione writeResponse come descritto di seguito.

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest }, ...headers, ContentLanguage: 'my-new-language' }).promise(); }

Per un elenco completo delle intestazioni supportate, consulta WriteGetObjectResponse nella Documentazione di riferimento delle API di Amazon Simple Storage Service.

Restituzione di intestazioni di metadati

È possibile aggiornare la funzione Lambda per inviare nuovi valori di intestazione passandoli nella richiesta dell'operazione API WriteGetObjectResponse.

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest, 'my-new-header': 'my-new-value' }, ...headers }).promise(); }
Restituzione di un nuovo codice di stato

È possibile restituire un codice di stato personalizzato al client GetObject passandolo nella richiesta dell'operazione API WriteGetObjectResponse.

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest }, ...headers, StatusCode: Integer }).promise(); }

Per un elenco completo degli stati supportati, consulta WriteGetObjectResponse nella Documentazione di riferimento delle API di Amazon Simple Storage Service.

Applicazione dei Range e partNumber all'oggetto di origine

Per impostazione predefinita, il punto di accesso Lambda per oggetti creato dal modello CloudFormation è in grado di gestire i parametri Range e partNumber. La funzione Lambda applica l'intervallo o il numero di parte richiesto all'oggetto trasformato. A tale scopo, è necessario scaricare l'intero oggetto ed eseguire la trasformazione. In alcuni casi, gli intervalli di oggetti trasformati potrebbero essere associati esattamente agli intervalli di oggetti fonte. Ciò significa che la richiesta dell'intervallo di byte A-B sull'oggetto di origine e l'esecuzione della trasformazione potrebbero produrre lo stesso risultato della richiesta dell'intero oggetto, dell'esecuzione della trasformazione e della restituzione dell'intervallo di byte A-B sull'oggetto trasformato.

In questi casi, è possibile modificare l'implementazione della funzione Lambda per applicare l'intervallo o il numero di parte direttamente all'oggetto fonte. Questo approccio riduce la latenza generale della funzione e la memoria richieste. Per ulteriori informazioni, consulta Utilizzo delle intestazioni Range e partNumber.

Disabilitazione della gestione di Range epartNumber

Per impostazione predefinita, il punto di accesso Lambda per oggetti creato dal modello CloudFormation è in grado di gestire i parametri Range e partNumber. Se questo comportamento non è necessario, è possibile disabilitarlo rimuovendo le seguenti righe dal modello:

AllowedFeatures: - GetObject-Range - GetObject-PartNumber - HeadObject-Range - HeadObject-PartNumber
Trasformazione di oggetti di grandi dimensioni

Per impostazione predefinita, la funzione Lambda elabora l'intero oggetto in memoria prima di poter avviare lo streaming della risposta a S3 Object Lambda. È possibile modificare la funzione per effettuare lo streaming della risposta mentre esegue la trasformazione. Ciò aiuta a ridurre la latenza della trasformazione e la dimensione della memoria della funzione Lambda. Per un'implementazione esemplificativa, consulta Streaming esemplificativo del contenuto compresso.