

# Automatizar a configuração do S3 Object Lambda com um modelo do CloudFormation
<a name="olap-using-cfn-template"></a>

**nota**  
Desde 7 de novembro de 2025, o S3 Object Lambda está disponível somente para clientes existentes que estão usando o serviço no momento, bem como para parceiros selecionados da Rede de Parceiros da AWS (APN). Para recursos semelhantes ao S3 Object Lambda, saiba mais aqui: [Amazon S3 Object Lambda availability change](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazons3-ol-change.html).

Você pode usar um modelo do AWS CloudFormation para criar rapidamente um ponto de acesso do Amazon S3 Object Lambda. O modelo do CloudFormation cria automaticamente recursos relevantes, configura perfis do AWS Identity and Access Management (IAM) e configura uma função do AWS Lambda que lida automaticamente com solicitações por meio do ponto de acesso do Object Lambda. Com o modelo do CloudFormation, é possível implementar práticas recomendadas, melhorar seu procedimento de segurança e reduzir erros causados por processos manuais.

Esse [repositório GitHub](https://github.com/aws-samples/amazon-s3-object-lambda-default-configuration) contém o modelo do CloudFormation e o código-fonte da função do Lambda. Para obter instruções sobre como usar o modelo, consulte [Criar pontos de acesso do Object Lambda](olap-create.md).

A função do Lambda fornecida no modelo não executa nenhuma transformação. Em vez disso, ele retorna seus objetos como estão da fonte de dados subjacente. Você pode clonar a função e adicionar seu próprio código de transformação para modificar e processar dados à medida que eles são retornados a uma aplicação. Para obter mais informações sobre como modificar a função, consulte [Modificar a função Lambda](#modifying-lambda-function) e [Escrever funções do Lambda para pontos de acesso do S3 Object Lambda](olap-writing-lambda.md). 

## Modificar o template
<a name="modifying-cfn-template"></a>

**Criar um ponto de acesso de suporte**  
O S3 Object Lambda usa dois pontos de acesso: um ponto de acesso do Object Lambda e um ponto de acesso padrão do S3, chamado de *ponto de acesso de suporte*. Quando você faz uma solicitação a um ponto de acesso do Object Lambda, o S3 chama o Lambda em seu nome ou delega a solicitação ao ponto de acesso de suporte, de acordo com a configuração do S3 Object Lambda. É possível criar um ponto de acesso de suporte transmitindo o seguinte parâmetro como parte do comando `aws cloudformation deploy` ao implantar o modelo.

```
CreateNewSupportingAccessPoint=true
```

**Configurar uma carga útil de função**  
Você pode configurar uma carga útil para fornecer dados complementares à função Lambda transmitindo o seguinte parâmetro como parte do comando `aws cloudformation deploy` ao implantar o template.

```
LambdaFunctionPayload="format=json"
```

**Habilitar o monitoramento do Amazon CloudWatch**  
Você pode habilitar o monitoramento do CloudWatch transmitindo o seguinte parâmetro como parte do comando `aws cloudformation deploy` ao implantar o template.

```
EnableCloudWatchMonitoring=true
```

Esse parâmetro habilita o ponto de acesso do Object Lambda para métricas de solicitação do Amazon S3 e cria dois alarmes do CloudWatch para monitorar erros no lado do cliente e no lado do servidor.

**nota**  
O uso do Amazon CloudWatch incorrerá em custos adicionais. Para obter mais informações sobre métricas de solicitação do Amazon S3, consulte [Monitorar e registrar de pontos de acesso](access-points-monitoring-logging.md).  
Para obter detalhes sobre os preços, consulte [Definição de preço do CloudWatch](https://aws.amazon.com/cloudwatch/pricing/). 

**Configurar a simultaneidade provisionada**  
Para reduzir a latência, é possível configurar a simultaneidade provisionada para a função do Lambda com base no ponto de acesso do Object Lambda editando o modelo para incluir as seguintes linhas em `Resources`.

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

**nota**  
Haverá cobranças adicionais pela simultaneidade de provisionamento. Para obter mais informações sobre simultaneidade provisionada, consulte [Gerenciar a simultaneidade provisionada do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html) no *Guia do desenvolvedor do AWS Lambda*.  
Para obter detalhes de preço, consulte [Definição de preço do AWS Lambda](https://aws.amazon.com/lambda/pricing/).

## Modificar a função Lambda
<a name="modifying-lambda-function"></a>

**Alterar os valores do cabeçalho de uma solicitação `GetObject`**  
Por padrão, a função do Lambda encaminha todos os cabeçalhos, exceto `Content-Length` e `ETag`, da solicitação de URL pré-assinado ao cliente do `GetObject`. Com base em seu código de transformação na função Lambda, é possível escolher enviar novos valores de cabeçalho ao cliente do `GetObject`.

Você pode atualizar sua função do Lambda para enviar novos valores de cabeçalho, transmitindo-os na operação de API `WriteGetObjectResponse`.

Por exemplo, se a função Lambda traduzir texto em objetos do Amazon S3 para um idioma diferente, você poderá transmitir um novo valor no cabeçalho `Content-Language`. Faça isso modificando a função `writeResponse`, conforme mostrado abaixo:

```
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();
}
```

Para obter uma lista completa dos cabeçalhos compatíveis, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax](https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax) na *Referência da API do Amazon Simple Storage Service*.

**Retornar cabeçalhos de metadados**  
Você pode atualizar sua função do Lambda para enviar novos valores de cabeçalho, transmitindo-os na solicitação de operação de API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax](https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax).

```
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();
}
```

**Retornar um novo código de status**  
É possível retornar um código de status personalizado ao cliente do `GetObject` transmitindo-o na solicitação de operação de API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax](https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax).

```
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();
}
```

Para obter uma lista completa dos códigos de status compatíveis, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax](https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html#API_WriteGetObjectResponse_RequestSyntax) na *Referência da API do Amazon Simple Storage Service*.

**Aplicar os parâmetros `Range` e `partNumber` no objeto de origem**  
Por padrão, o ponto de acesso do Object Lambda criado pelo modelo do CloudFormation pode lidar com os parâmetros `Range` e `partNumber`. A função Lambda aplica o intervalo ou o número da parte solicitado ao objeto transformado. Para isso, a função precisa baixar o objeto inteiro e executar a transformação. Em alguns casos, os intervalos de objetos transformados podem mapear exatamente para seus intervalos de objetos de origem. Isso significa que solicitar o intervalo de bytes A–B no objeto de origem e executar a transformação poderá produzir o mesmo resultado que solicitar o objeto inteiro, executar a transformação e retornar o intervalo de bytes A–B no objeto transformado.

Nesses casos, é possível alterar a implementação da função Lambda para aplicar o intervalo ou o número da parte diretamente no objeto de origem. Essa abordagem reduz a latência geral da função e a memória necessárias. Para obter mais informações, consulte [Trabalhar com cabeçalhos Range e partNumber](range-get-olap.md).

**Desabilitar o tratamento de `Range` e `partNumber`**  
Por padrão, o ponto de acesso do Object Lambda criado pelo modelo do CloudFormation pode lidar com os parâmetros `Range` e `partNumber`. Se você não precisar desse comportamento, poderá desabilitá-lo removendo as seguintes linhas do modelo:

```
AllowedFeatures:
  - GetObject-Range
  - GetObject-PartNumber
  - HeadObject-Range 
  - HeadObject-PartNumber
```

**Transformar objetos grandes**  
Por padrão, a função Lambda processa todo o objeto na memória antes que ele possa começar a transmitir a resposta ao S3 Object Lambda. É possível modificar a função para transmitir a resposta à medida que ela executa a transformação. Isso ajuda a reduzir a latência de transformação e o tamanho da memória da função do Lambda. Para obter um exemplo de implementação, consulte o [Exemplo de conteúdo compactado de transmissão](olap-writing-lambda.md#olap-getobject-response).