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
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 oAWSLambdaBasicExecutionRole
polí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
-
Copie o código de amostra em um arquivo chamado
index.js
. -
Crie um pacote de implantação.
zip function.zip index.js
-
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-exA 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 Windowsbase64 -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-configuration
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.