O ambiente de runtime do AWS Lambda não tem todos os recursos da versão mais recente de um SDK da AWS. Quero integrar a versão mais recente do AWS SDK para JavaScript à minha função Node.js do Lambda.
Breve descrição
Para integrar a versão mais recente de um SDK da AWS ao pacote de implantação da sua função do Lambda, crie uma camada do Lambda. Em seguida, adicione a camada à sua função.
Observação: para as versões 16 e posteriores do Node.js, o runtime do Lambda Node.js inclui o AWS SDK para JavaScript versão 2. Para as versões 18 e posteriores do Node.js, o runtime do Lambda Node.js inclui o AWS SDK para JavaScript versão 3. Para obter mais informações, consulte a documentação AWS SDK para JavaScript.
Para obter uma lista completa dos runtimes e das versões do SDK da AWS que o Lambda usa, consulte runtimes do Lambda.
Observação: a resolução a seguir aumenta o tamanho do pacote de implantação da sua função. Para obter informações sobre cotas de armazenamento do Lambda, consulte Cotas do Lambda.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
(Opcional) Confirme a versão do AWS SDK que sua função usa
Conclua as etapas a seguir:
Observação: use esse método somente para as versões 16 e anteriores do Node.js.
-
Crie uma função no console do Lambda.
-
Atualize o código da função para retornar a versão do SDK da AWS que a função usa quando você invoca a função:
const AWS = require('aws-sdk')
exports.handler = async (event) => {
return AWS.VERSION;
};
-
Invoque sua função.
-
Compare a versão do SDK da AWS que sua função retornou com a versão mais recente do SDK da AWS listada na documentação do SDK da AWS.
Instale e empacote a versão mais recente do SDK da AWS
Observação: os pacotes de implantação devem ser compatíveis com o runtime do Lambda que você usa. É uma prática recomendada usar o mesmo sistema operacional (SO) para seu runtime especificado nos runtimes do Lambda.
Em um ambiente de desenvolvimento compatível com o Lambda, conclua as seguintes etapas:
-
Execute o comando a seguir para criar um diretório:
mkdir -p aws-sdk-layer/nodejs
-
Execute o comando a seguir para ir para o diretório:
cd aws-sdk-layer/nodejs
-
Instale o AWS SDK para sua versão de runtime do Node.js:
Node.js 16 e versões anteriores (SDK da AWS versão 2)
Para instalar a versão mais recente do SDK da AWS versão 2, use uma instância compatível com Amazon Linux 2 para executar o seguinte comando:
npm install aws-sdk
Para obter mais informações, consulte Tutorial: Como configurar o Node.js em uma instância do Amazon EC2.
Observação: é uma prática recomendada usar um ambiente do Amazon Linux 2 ao desenvolver recursos do Lambda.
-ou-
Se você usa um sistema operacional Windows ou macOS para desenvolvimento, use o Docker para executar o seguinte comando:
docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"
Observação: antes de executar o comando, verifique se você está usando a versão mais recente do Docker no site do Docker.
Node.js 18 e versões posteriores (SDK da AWS versão 3)
Para instalar a versão mais recente do SDK da AWS versão 3, consulte Instalar o SDK para JavaScript.
-
Crie um arquivo .zip a ser carregado na sua camada do Lambda:
zip -r ../package.zip ../
-
(Opcional) Verifique a versão do SDK da AWS que você instalou:
cat package-lock.json
Exemplo de saída:
{ "requires": true, "lockfileVersion": 1,
"dependencies": {
"aws-sdk": {
"version": "2.888.0",
...
Use a AWS CLI ou o console do Lambda para criar uma camada Lambda e adicioná-la à sua função
AWS CLI
-
Para criar uma nova camada do Lambda que inclua a versão mais recente do SDK da AWS, execute o seguinte comando publish-layer-version:
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region
Observação: substitua node_sdk pelo nome da sua camada e Minha camada por uma descrição da camada. Além disso, substitua o valor compatible-runtimes pelo runtime que você usa e region pela região da AWS em que sua função e camada estão.
-
Na saída, copie o valor LayerVersionArn para usar na próxima etapa.
-
Para adicionar a camada à sua função, execute o seguinte comando update-function-configuration:
aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region
Observação: substitua my-function pelo nome da sua função, arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 pelo valor LayerVersionArn da sua saída e region pela sua região.
Para obter mais informações, consulte Gerenciando dependências do Lambda com camadas.
O console do Lambda
Para criar uma camada do Lambda e adicioná-la à sua função no console do Lambda, conclua as seguintes etapas:
- Abra a página Layers no console do Lambda.
- Escolha Criar camada.
- Em Nome, insira um nome para a nova camada.
- Escolha Carregar um arquivo.zip e, em seguida, escolha o nome do arquivo .zip do seu pacote de implantação.
- Escolha Criar.
- Abra a página Funções no console do Lambda e escolha o nome da função à qual você deseja adicionar a camada.
- Em Camadas, escolha Adicionar uma camada.
- Em Escolher uma camada, escolha Camadas personalizadas.
- Escolha a lista suspensa Camadas personalizadas e, em seguida, escolha sua camada personalizada.
- Escolha Adicionar.
(Opcional) testar a configuração
Conclua as etapas na seção (Opcional) Confirme a versão do AWS SDK que sua função usa para invocar sua função. A função retorna a versão do SDK da AWS que ela usa.
Informações relacionadas
Práticas recomendadas para trabalhar com funções do AWS Lambda
Como faço para criar um pacote de implantação do Lambda para o Node.js?
Como posso criar uma camada para minha função Lambda Python?