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).
Tópicos
Configuração do armazenamento de código do S3 autogerenciado
Para usar o armazenamento de código do S3 autogerenciado, conclua as seguintes etapas:
-
Crie um bucket do S3 ou use um bucket existente na sua conta.
-
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.
-
Faça o upload do seu pacote de implantação .zip no bucket do S3.
-
Conceda à entidade principal do serviço do Lambda as permissões
s3:GetObjectes3:GetObjectVersionpara o objeto de origem. Consulte Configurar permissões. -
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
S3ObjectStorageModecomoREFERENCE.
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-bucketmy-bucket\ --s3-keymy-function.zip\ --s3-object-versionabc123def456\ --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-bucketS3Key:my-function.zipS3ObjectVersion:abc123def456S3ObjectStorageMode: 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
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.