Como usar o Lambda com o AWS CLI - AWS Lambda

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Como usar o Lambda com o AWS CLI

Você pode usar a AWS Command Line Interface para gerenciar funções e outros recursos do AWS Lambda. A AWS CLI usa o AWS SDK for Python (Boto) para interagir com a API do Lambda. Você pode usá-la para aprender sobre a API e aplicar esse conhecimento na criação de aplicações que usam o Lambda com o AWS SDK.

Neste tutorial, você gerencia e invoca as funções do Lambda com a AWS CLI. Para obter mais informações, consulte O que é o AWS CLI? no Manual do usuário do AWS Command Line Interface.

Pré-requisitos

Este tutorial presume que você tenha algum conhecimento de operações básicas do Lambda e do console do Lambda. Se ainda não tiver visto as instruções, acesse-as em Criar uma função do Lambda com o console.

Para concluir as etapas a seguir, a AWS Command Line Interface (AWS CLI) versão 2 será necessária. Os comandos e a saída esperada são mostrados em blocos separados:

aws --version

A seguinte saída deverá ser mostrada:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

Para comandos longos, um caractere de escape (\) é usado para dividir um comando em várias linhas.

No Linux e no macOS, use seu gerenciador preferido de pacotes e de shell.

nota

No Windows, alguns comandos da CLI do Bash que você costuma usar com o Lambda (como zip) não são compatíveis com os terminais integrados do sistema operacional. Para obter uma versão do Ubuntu com o Bash integrada no Windows, instale o Subsistema do Windows para Linux. Os exemplos de comandos da CLI neste guia usam a formatação Linux. Os comandos que incluem documentos JSON em linha deverão ser reformatados se você estiver usando a CLI do Windows.

Criar a função de execução

Crie a função de execução que dá à sua função permissão para acessar recursos do AWS. Para criar uma função de execução com a AWS CLI, use o comando create-role.

No exemplo a seguir, você especifica a política de confiança em linha. Os requisitos para escapar de aspas na string JSON variam dependendo do seu shell.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'

Também é possível definir a política de confiança para a função usando um arquivo JSON. No exemplo a seguir, trust-policy.json é um arquivo no diretório atual. Essa política de confiança permite que o Lambda use as permissões da função fornecendo à entidade principal de serviço a permissão lambda.amazonaws.com para chamar a ação AWS Security Token Service (AWS STS) AssumeRole.

exemplo trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json

A seguinte saída deverá ser mostrada:

{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }

Para adicionar permissões à função, use o comando attach-policy-to-role. Inicie adicionando oAWSLambdaBasicExecutionRolepolítica gerenciada pela.

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

A AWSLambdaBasicExecutionRolepolítica tem as permissões que a função precisa para gravar registros em CloudWatch Logs.

Criar a função

O exemplo a seguir registra em log os valores das variáveis de ambiente e o objeto do evento.

exemplo index.js
exports.handler = async function(event, context) { console.log("ENVIRONMENT VARIABLES\n" + JSON.stringify(process.env, null, 2)) console.log("EVENT\n" + JSON.stringify(event, null, 2)) return context.logStreamName }
Para criar a função
  1. Copie o código de amostra em um arquivo chamado index.js.

  2. Crie um pacote de implantação.

    zip function.zip index.js
  3. Crie uma função do Lambda com o comando create-function. Substitua o texto realçado no ARN da função pelo ID da conta.

    aws lambda create-function --function-name my-function \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs20.x \ --role arn:aws:iam::123456789012:role/lambda-ex

    A seguinte saída deverá ser mostrada:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }

Para obter logs para uma invocação a partir da linha de comando, use a opção --log-type. A resposta inclui um campo LogResult que contém até 4 KB de logs codificados em base64 da invocação.

aws lambda invoke --function-name my-function out --log-type Tail

A seguinte saída deverá ser mostrada:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

Você pode usar o utilitário base64 para decodificar os logs.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d

A seguinte saída deverá ser mostrada:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

O utilitário base64 está disponível no Linux, macOS e Ubuntu no Windows. Para macOS, o comando é base64 -D.

Para obter eventos de log completos a partir da linha de comando, você pode incluir o nome do fluxo de logs na saída de sua função, conforme mostrado no exemplo anterior. O script de exemplo a seguir invoca uma função chamada my-function e faz o download dos últimos 5 eventos de log.

exemplo Script get-logs.sh

Este exemplo requer que my-function retorne um ID de fluxo de log.

#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name $(cat out) --limit 5

O script usa sed para remover aspas do arquivo de saída e dorme por 15 segundos para permitir que os logs estejam disponíveis. A saída inclui a resposta do Lambda, e a saída do comando get-log-events.

./get-logs.sh

A seguinte saída deverá ser mostrada:

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

Atualizar a função

Depois de criar uma função, você pode configurar recursos adicionais para a função, como acionadores, acesso à rede e acesso ao sistema de arquivos. Você também pode ajustar recursos associados à função, como memória e simultaneidade. Essas configurações se aplicam a funções definidas como arquivos.zip e a funções definidas como imagens de contêiner.

Use o update-function-configurationcomando para configurar funções. O exemplo a seguir define a memória de função como 256 MB.

exemplo update-function-configuration comando
aws lambda update-function-configuration \ --function-name my-function \ --memory-size 256

Listar as funções do Lambda na conta

Execute o comando da AWS CLI list-functions a seguir para recuperar uma lista de funções que você criou.

aws lambda list-functions --max-items 10

A seguinte saída deverá ser mostrada:

{ "Functions": [ { "FunctionName": "cli", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", ... }, { "FunctionName": "random-error", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:random-error", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", ... }, ... ], "NextToken": "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=" }

Em resposta, o Lambda retorna uma lista de até 10 funções. Se há mais funções que você pode recuperar, o parâmetro NextToken fornece um marcador que você pode usar na próxima solicitação list-functions. O comando list-functions da AWS CLI a seguir é um exemplo que mostra o parâmetro --starting-token.

aws lambda list-functions --max-items 10 --starting-token eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=

Recuperar uma função do Lambda

O comando get-function da CLI do Lambda retorna metadados da função do Lambda e um URL pré-assinado que você pode usar para fazer download do pacote de implantação da função.

aws lambda get-function --function-name my-function

A seguinte saída deverá ser mostrada:

{ "Configuration": { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }, "Code": { "RepositoryType": "S3", "Location": "https://awslambda-us-east-2-tasks.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-function-4203078a-b7c9-4f35-..." } }

Para obter mais informações, consulte GetFunction.

Limpeza

Execute o comando delete-function a seguir para excluir a função my-function.

aws lambda delete-function --function-name my-function

Exclua a função do IAM que você criou no console do IAM. Para obter mais informações sobre como excluir uma função, consulte Excluir funções ou perfis de instância no Manual do usuário do IAM.