View a markdown version of this page

Armazenamento de código do S3 autogerenciado - AWS Lambda

Armazenamento de código do S3 autogerenciado

Por padrão, quando você cria ou atualiza uma função ou camada do Lambda a partir de um arquivo .zip, o Lambda armazena uma cópia do seu código no armazenamento gerenciado pelo Lambda. Cada conta da AWS tem uma cota de 300 GB para o armazenamento gerenciado pelo Lambda por região.

Com o armazenamento de código do S3 autogerenciado, você pode configurar o Lambda para fazer referência ao seu código diretamente de um bucket do S3 em sua conta. O Lambda não armazena uma cópia do seu código e, portanto, o código não conta na sua cota de armazenamento gerenciado pelo Lambda. O Lambda acessa seu código diretamente do bucket do S3.

O armazenamento de código do S3 autogerenciado está disponível para todas as funções e camadas criadas e atualizadas usando arquivos .zip. Ele é compatível com todas as classes de armazenamento do S3, exceto as classes de armazenamento do Glacier.

nota

O armazenamento de código do S3 autogerenciado não altera o tamanho máximo do pacote de implantação .zip, que permanece em 250 MB (descompactado).

Configuração do armazenamento de código do S3 autogerenciado

Para usar o armazenamento de código do S3 autogerenciado, conclua as seguintes etapas:

  1. Crie um bucket do S3 ou use um bucket existente na sua conta.

  2. Ative o versionamento do S3 para o bucket. O Lambda exige o versionamento do S3 para rastrear qual versão do objeto de origem será usada. Sempre que você carrega um novo pacote .zip, o S3 cria uma nova versão para que o Lambda possa distinguir as atualizações.

  3. Faça o upload do seu pacote de implantação .zip no bucket do S3.

  4. Conceda à entidade principal do serviço do Lambda as permissões s3:GetObject e s3:GetObjectVersion para o objeto de origem. Consulte Configurar permissões.

  5. Crie ou atualize sua função ou camada, especificando o objeto do S3, a chave do S3, a versão do objeto do S3 e configurando S3ObjectStorageMode como REFERENCE.

Configurar permissões

Para usar o armazenamento de código do S3 autogerenciado, conceda permissão à entidade principal do serviço do Lambda (lambda.amazonaws.com) para acessar seus objetos de origem. Adicione a política de bucket do S3 a seguir:

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

Criação de uma função com armazenamento do S3 autogerenciado

Você pode criar uma função com armazenamento de código do S3 autogerenciado usando AWS CLI ou AWS CloudFormation.

Como usar o AWS CLI

Use o comando create-function com o parâmetro S3ObjectStorageMode=REFERENCE:

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

Para atualizar uma função existente para usar o armazenamento do S3 autogerenciado:

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

Você deve especificar S3ObjectStorageMode=REFERENCE em cada chamada para update-function-code. Se você omitir S3ObjectStorageMode, o padrão será COPY e o Lambda armazenará seu código no armazenamento gerenciado pelo Lambda.

Usar o AWS CloudFormation

No seu modelo CloudFormation, defina S3ObjectStorageMode como REFERENCE na propriedade Code do recurso 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

Uso do armazenamento do S3 autogerenciado com camadas

Você também pode usar o armazenamento de código do S3 autogerenciado para versões de camadas. Use o comando publish-layer-version com 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

Você pode usar qualquer combinação de armazenamento gerenciado pelo Lambda e autogerenciado para o código da função e o código da camada.

Alternar entre os modos de armazenamento

Você pode alternar entre armazenamento de código do S3 gerenciado pelo Lambda e autogerenciado ao atualizar o código da função ou publicar uma nova versão da camada. Defina S3ObjectStorageMode como COPY ou REFERENCE.

  • COPY (padrão): o Lambda copia seu código-fonte para o armazenamento gerenciado pelo Lambda.

  • REFERENCE: o Lambda faz referência ao seu código-fonte diretamente do bucket do S3 sem armazenar uma cópia.

Quando você alterna de COPY para REFERENCE, o Lambda exclui a cópia gerenciada pelo Lambda do seu código-fonte. Quando você alterna de REFERENCE para COPY, o Lambda faz uma cópia do seu código-fonte no armazenamento gerenciado pelo Lambda. Alternar para COPY falhará se você exceder o limite de armazenamento de código gerenciado pelo Lambda.

Ciclo de vida da função com armazenamento autogerenciado

O Lambda acessa periodicamente o objeto de origem do bucket do S3 para otimizar de novo o código da função. Você deve manter o acesso ao objeto de origem para que sua função permaneça ativa.

  • Se o Lambda perder o acesso ao objeto de origem de uma função, a função fará a transição para o estado Inactive. Para restaurar a função, restaure o acesso ao objeto de origem e atualize a função.

  • Se o Lambda perder o acesso ao objeto de origem de uma camada, a função permanecerá Active. Você pode atualizar a configuração da função (sem atualizar as camadas), atualizar o código da função ou atualizar a configuração da função com novas camadas. No entanto, a atualização da configuração da função com a camada inacessível produzirá uma falha.

Uso entre contas e entre regiões

Você pode criar funções e camadas do código-fonte nos buckets do S3 em diferentes contas e em diferentes regiões. A recuperação de objetos entre regiões gera custos adicionais de transferência de dados do S3. Consulte Preços do S3 para obter detalhes.

Considerações

  • O armazenamento de código do S3 autogerenciado está disponível apenas para as funções e camadas do arquivo .zip. As funções da imagem do contêiner continuam usando o Amazon ECR.

  • O tamanho máximo do pacote de implantação .zip (250 MB descompactado) permanece inalterado.

  • Você paga as taxas de armazenamento padrão do Amazon S3 pelo código armazenado em seus buckets autogerenciados. O Lambda não cobra pela recuperação de objetos do S3 na mesma região.

  • O armazenamento de código do S3 autogerenciado é compatível com todas as classes de armazenamento do S3, exceto as classes de armazenamento do Glacier.

  • Você pode usar os recursos do S3, como a replicação entre regiões do S3, para compartilhar artefatos entre regiões e políticas de ciclo de vida do S3 para gerenciar objetos.