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 AWS Identity and Access Management (IAM) i ruoli e imposta una AWS Lambda funzione che gestisce automaticamente le richieste tramite l'Object Lambda Access Point. 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, tranne Content-Length eETag, dalla richiesta prefirmata al clientURL. GetObject In base al codice di trasformazione nella funzione Lambda, puoi scegliere di inviare nuovi valori di intestazione al client GetObject.

Puoi aggiornare la tua funzione Lambda per inviare nuovi valori di intestazione passandoli durante l'operazione. WriteGetObjectResponse API

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 WriteGetObjectResponseAmazon Simple Storage Service API Reference.

Restituzione di intestazioni di metadati

Puoi aggiornare la tua funzione Lambda per inviare nuovi valori di intestazione passandoli nella richiesta dell'WriteGetObjectResponseAPIoperazione.

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 GetObject client passandolo nella richiesta dell'WriteGetObjectResponseAPIoperazione.

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 dei codici di stato supportati, consulta WriteGetObjectResponseAmazon Simple Storage Service API Reference.

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 Lavorare con Range e partNumber headers.

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.