Automatizza la configurazione di S3 Object Lambda con un modello CloudFormation - Amazon Simple Storage Service

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

Automatizza la configurazione di S3 Object Lambda con un modello CloudFormation

Puoi utilizzare un AWS CloudFormation modello per creare rapidamente un punto di accesso Amazon S3 Object Lambda. Il CloudFormation modello crea automaticamente le risorse pertinenti, configura i ruoli AWS Identity and Access Management (IAM) e imposta una AWS Lambda funzione che gestisce automaticamente le richieste tramite l'access point Object Lambda. Con il CloudFormation modello, puoi implementare le migliori pratiche, migliorare il tuo livello di sicurezza e ridurre gli errori causati dai processi manuali.

Questo GitHub repository contiene il CloudFormation modello 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. Al contrario, restituisce gli oggetti così come sono dal bucket S3. È 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 richiama 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"
Abilitare il CloudWatch monitoraggio di Amazon

Puoi abilitare il CloudWatch monitoraggio passando il seguente parametro come parte del aws cloudformation deploy comando durante la distribuzione del modello.

EnableCloudWatchMonitoring=true

Questo parametro abilita i parametri delle richieste Object Lambda Access Point per Amazon S3 e crea CloudWatch due allarmi per monitorare gli errori lato client e lato server.

Nota

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

Per i dettagli sui prezzi, vedere 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, l'Object Lambda Access Point creato dal CloudFormation modello può gestire i parametri Range andpartNumber. 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, l'Object Lambda Access Point creato dal CloudFormation modello può gestire i parametri Range andpartNumber. 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.