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á.
Introdução aos testes na nuvem com sam remote invoke
Use a interface de linha de AWS Serverless Application Model comando (AWS SAM CLI) sam remote invoke
comando para interagir com AWS os recursos suportados no Nuvem AWS. Você pode usar sam remote invoke
para invocar os seguintes recursos:
-
Amazon Kinesis Data Streams – Envie registros de dados para aplicativos do Kinesis Data Streams.
-
AWS Lambda - Invoque e transmita eventos para suas funções do Lambda.
-
Amazon Simple Queue Service (AmazonSQS) — Envie mensagens para as SQS filas da Amazon.
-
AWS Step Functions – Invoque máquinas de estado do Step Functions para iniciar a execução.
Para uma introdução ao AWS SAM CLI, veja O que é o CLI do AWS SAM?
Para obter um exemplo de uso do sam remote invoke
durante um fluxo de trabalho de desenvolvimento típico, consulte Etapa 5: Interaja com sua função no Nuvem AWS.
Tópicos
Para usarsam remote invoke
, instale o AWS SAM CLI preenchendo o seguinte:
Também recomendamos a atualização para a versão mais recente do AWS SAM CLI. Para saber mais, consulteAtualizar o AWS SAM CLI.
Antes de usar sam remote invoke
, recomendamos uma compreensão básica do seguinte:
Usando o comando de invocação remota do sam
Antes de usar esse comando, seu recurso deve ser implantado no Nuvem AWS.
Use a seguinte estrutura de comando e execute no diretório raiz do seu projeto:
$
sam remote invoke
<arguments> <options>
nota
Esta página mostrará as opções fornecidas no prompt de comando. Você também pode configurar opções no arquivo de configuração do seu projeto em vez de passá-las no prompt de comando. Para saber mais, Definir configurações do projeto.
Para obter uma descrição dos argumentos e opções sam remote invoke
, consulte sam remote invoke.
Usar com o Kinesis Data Streams
Você pode enviar registros de dados para um aplicativo do Kinesis Data Streams. O AWS SAM CLI enviará seu registro de dados e retornará um ID de fragmento e um número de sequência. Veja um exemplo a seguir:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide a JSON string as event { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980850790050483811301135051202232322" }%KinesisStream
--stack-namekinesis-example
--eventhello-world
Para enviar um registro de dados
-
Forneça um valor de ID de recurso como argumento para seu aplicativo Kinesis Data Streams. Para obter informações sobre recursos válidosIDs, consulte ID do recurso.
-
Forneça o registro de dados como um evento para enviar ao seu aplicativo Kinesis Data Streams. Você pode fornecer o evento na linha de comando usando a opção
--event
ou a partir de um arquivo usando--event-file
. Se você não fornecer um evento, o AWS SAM CLI envia um evento vazio.
Usar com funções do Lambda
Você pode invocar uma função do Lambda na nuvem e transmitir um evento vazio ou fornecer um evento na linha de comando ou apartir de um arquivo. O AWS SAM CLI invocará sua função Lambda e retornará sua resposta. Veja um exemplo a seguir:
$
sam remote invoke
Invoking Lambda Function HelloWorldFunction START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Duration: 6.62 ms Billed Duration: 7 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 164.06 ms {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%HelloWorldFunction
--stack-namesam-app
Para invocar uma função do Lambda
-
Forneça um valor de ID de recurso como argumento para sua função do Lambda. Para obter informações sobre recursos válidosIDs, consulte ID do recurso.
-
Forneça um evento para enviar para sua função do Lambda. Você pode fornecer o evento na linha de comando usando a opção
--event
ou a partir de um arquivo usando--event-file
. Se você não fornecer um evento, o AWS SAM CLI envia um evento vazio.
Funções Lambda configuradas com streaming de resposta
O comando sam remote invoke
é compatível com funções do Lambda que são configuradas para transmitir respostas. Você pode configurar uma função Lambda para transmitir respostas usando a FunctionUrlConfig
propriedade em seus AWS SAM modelos. Quando você usasam remote invoke
, o AWS SAM CLI detectará automaticamente sua configuração do Lambda e a invocará com streaming de resposta.
Para ver um exemplo, consulte Invoque uma função do Lambda configurada para o streaming de respostas.
Transmita eventos de teste compartilháveis para uma função do Lambda na nuvem
Eventos de teste compartilháveis são eventos de teste que você pode compartilhar com outros na mesma Conta da AWS. Para saber mais, consulte Eventos de teste compartilháveis no AWS Lambda Guia do desenvolvedor.
Acessar e gerenciar eventos compartilháveis de teste
Você pode usar o AWS SAM CLI sam remote test-event
comando para acessar e gerenciar eventos de teste compartilháveis. Por exemplo, você pode usar a sam remote test-event
para fazer o seguinte:
-
Recupere eventos de teste compartilháveis do registro de EventBridge esquemas da Amazon.
-
Modifique eventos de teste compartilháveis localmente e carregue-os no registro do EventBridge esquema.
-
Exclua eventos de teste compartilháveis do registro do EventBridge esquema.
Para saber mais, consulte Introdução aos testes em nuvem com sam remote test-event.
Transmita um evento de teste compartilhável para uma função do Lambda na nuvem
Para passar um evento de teste compartilhável do registro do EventBridge esquema para sua função Lambda na nuvem, use a --test-event-name
opção e forneça o nome do evento de teste compartilhável. Veja um exemplo a seguir:
$
sam remote invoke
HelloWorldFunction
--stack-namesam-app
--test-event-namedemo-event
Se você salvar o evento de teste compartilhável localmente, poderá usar a opção --event-file
e fornecer o caminho do arquivo e o nome do evento de teste local. Veja um exemplo a seguir:
$
sam remote invoke
HelloWorldFunction
--stack-namesam-app
--event-filedemo-event.json
Usando com a Amazon SQS
Você pode enviar mensagens para as SQS filas da Amazon. O AWS SAM CLI retorna o seguinte:
-
ID de mensagem
-
MD5do corpo da mensagem
-
Metadados de resposta
Veja um exemplo a seguir:
$
sam remote invoke
Sending message to SQS queue MySqsQueue { "MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592", "MessageId": "05c7af65-9ae8-4014-ae28-809d6d8ec652" }%MySqsQueue
--stack-namesqs-example
-eventhello
Para enviar uma mensagem
-
Forneça um valor de ID de recurso como argumento para a SQS fila da Amazon. Para obter informações sobre recursos válidosIDs, consulte ID do recurso.
-
Forneça um evento para enviar para sua SQS fila da Amazon. Você pode fornecer o evento na linha de comando usando a opção
--event
ou a partir de um arquivo usando--event-file
. Se você não fornecer um evento, o AWS SAM CLI envia um evento vazio.
Usar o com o Step Functions
Você pode invocar uma máquina de estado do Step Functions para iniciar a execução. O AWS SAM CLI aguardará a conclusão do fluxo de trabalho da máquina de estado e retornará uma saída da última etapa da execução. Veja um exemplo a seguir:
$
sam remote invoke
Invoking Step Function HelloWorldStateMachine "Hello Developer World"%HelloWorldStateMachine
--stack-namestate-machine-example
--event'{"is_developer": true}'
Para invocar uma máquina de estado
-
Forneça um valor de ID de recurso como argumento para a máquina de estado do Step Functions. Para obter informações sobre recursos válidosIDs, consulte ID do recurso.
-
Forneça um evento para enviar para sua máquina estadual. Você pode fornecer o evento na linha de comando usando a opção
--event
ou a partir de um arquivo usando--event-file
. Se você não fornecer um evento, o AWS SAM CLI envia um evento vazio.
Usando o comando de invocação remota do sam
Esta seção aborda algumas das principais opções que você pode usar com o comando sam remote invoke
. Para obter uma lista completa das opções, consulte sam remote invoke.
Passe um evento para seu recurso
Use as seguintes opções para transmitir eventos para seus recursos na nuvem:
-
--event
- Passe um evento na linha de comando. -
--event-file
- Passe um evento de um arquivo.
Exemplos do Lambda
Use --event
para passar um evento na linha de comando como um valor de string:
$
sam remote invoke
Invoking Lambda Function HelloWorldFunction START RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab Version: $LATEST END RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab REPORT RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab Duration: 16.41 ms Billed Duration: 17 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 185.96 ms {"statusCode":200,"body":"{\"message\":\"hello!\"}"}%HelloWorldFunction
--stack-namesam-app
--event'{"message": "hello!"}'
Use --event-file
para transmitir um evento de um arquivo e fornecer o caminho para o arquivo:
$
cat event.json
{"message": "hello from file"}%$
sam remote invoke
Invoking Lambda Function HelloWorldFunction START RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 Version: $LATEST END RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 REPORT RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 Duration: 21.15 ms Billed Duration: 22 ms Memory Size: 128 MB Max Memory Used: 67 MB {"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%HelloWorldFunction
--stack-namesam-app
--event-fileevent.json
Passe um evento usando stdin
:
$
cat event.json
{"message": "hello from file"}%$
cat
Reading event from stdin (you can also pass it from file with --event-file) Invoking Lambda Function HelloWorldFunction START RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a Version: $LATEST END RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a REPORT RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a Duration: 1.36 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 67 MB {"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%event.json
| sam remote invokeHelloWorldFunction
--stack-namesam-app
--event-file -
Configurar o AWS SAM CLI resposta de saída
Quando você invoca um recurso compatível comsam remote invoke
, o AWS SAM CLI retorna uma resposta que contém o seguinte:
-
Metadados da solicitação – Metadata associados à solicitação. Isso inclui o ID da solicitação e o horário de início da solicitação.
-
Resposta do recurso - A resposta do seu recurso após ser invocado na nuvem.
Você pode usar a --output
opção para configurar o AWS SAM CLI resposta de saída. Os seguintes valores de opção estão disponíveis:
-
json
— Os metadados e a resposta do recurso são retornados em um JSON estrutura. A resposta contém o texto completo SDK saída. -
text
- Os metadados são retornados na estrutura do texto. A resposta do recurso é retornada no formato de saída do recurso.
A seguir, veja um exemplo de uma saída json
:
$
sam remote invoke --stack-name
Invoking Lambda Function HelloWorldFunction { "ResponseMetadata": { "RequestId": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Mon, 19 Jun 2023 17:15:46 GMT", "content-type": "application/json", "content-length": "57", "connection": "keep-alive", "x-amzn-requestid": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41", "x-amzn-remapped-content-length": "0", "x-amz-executed-version": "$LATEST", "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==", "x-amzn-trace-id": "root=1-64908d42-17dab270273fcc6b527dd6b8;sampled=0;lineage=2301f8dc:0" }, "RetryAttempts": 0 }, "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==", "ExecutedVersion": "$LATEST", "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}" }%sam-app
--outputjson
Quando você especifica uma saída json
, toda a resposta é retornada para stdout
. Veja um exemplo a seguir:
$
sam remote invoke --stack-name
Invoking Lambda Function HelloWorldFunctionsam-app
--outputjson
1>stdout.log
$
cat
{ "ResponseMetadata": { "RequestId": "d30d280f-8188-4372-bc94-ce0f1603b6bb", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Mon, 19 Jun 2023 17:35:56 GMT", "content-type": "application/json", "content-length": "57", "connection": "keep-alive", "x-amzn-requestid": "d30d280f-8188-4372-bc94-ce0f1603b6bb", "x-amzn-remapped-content-length": "0", "x-amz-executed-version": "$LATEST", "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=", "x-amzn-trace-id": "root=1-649091fc-771473c7778689627a6122b7;sampled=0;lineage=2301f8dc:0" }, "RetryAttempts": 0 }, "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=", "ExecutedVersion": "$LATEST", "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}" }%stdout.log
A seguir, veja um exemplo de uma saída text
:
$
sam remote invoke --stack-name
Invoking Lambda Function HelloWorldFunction START RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 Version: $LATEST END RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 REPORT RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 Duration: 9.13 ms Billed Duration: 10 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 165.50 ms {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%sam-app
--outputtext
Quando você especifica uma saída text
, a saída de tempo de execução da função do Lambda (por exemplo, registros) é retornada para stderr
. A carga útil da função do Lambda é retornada para stdout
. Veja um exemplo a seguir:
$
sam remote invoke --stack-name
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%sam-app
--outputtext
2>stderr.log
$
cat
Invoking Lambda Function HelloWorldFunction START RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 Version: $LATEST END RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 REPORT RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 Duration: 40.62 ms Billed Duration: 41 ms Memory Size: 128 MB Max Memory Used: 68 MBstderr.log
$
sam remote invoke --stack-name
Invoking Lambda Function HelloWorldFunction START RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd Version: $LATEST END RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd REPORT RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd Duration: 2.31 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 67 MBsam-app
--outputtext
1>stdout.log
$
cat
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%stdout.log
Personalização Boto3 parâmetros
Parasam remote invoke
, o AWS SAM CLI utiliza o AWS SDK for Python (Boto3) para interagir com seus recursos na nuvem. Você pode usar a --parameter
opção de personalizar Boto3 parâmetros. Para ver uma lista dos parâmetros, consulte --parameter
.
Exemplos
Invoque uma função do Lambda para validar os valores dos parâmetros e verificar as permissões:
$
sam remote invoke
HelloWorldFunction
--stack-namesam-app
--parameterInvocationType="DryRun"
Use a opção --parameter
várias vezes em um único comando para fornecer vários parâmetros:
$
sam remote invoke
HelloWorldFunction
--stack-namesam-app
--parameterInvocationType="Event"
--parameterLogType="None"
Outras opções
Para obter uma lista completa das opções sam remote invoke
, consulte sam remote invoke.
Configure o arquivo de configuração do seu projeto
Para configurar sam remote invoke
em seu arquivo de configuração, use remote_invoke
em sua tabela. Veja a seguir um exemplo de arquivo samconfig.toml
que configura valores padrão para o comando sam
remote invoke
.
...
version =0.1
[default]
...
[default.remote_invoke.parameters]
stack_name = "cloud-app"
event = '{"message": "Hello!"}'
Exemplos
Para ver um exemplo básico de usosam remote invoke
, consulte Teste de AWS Lambda
funções com AWS SAM controle remoto
Exemplos do Kinesis Data Streams
Exemplos básicos
Envie um registro de dados para um aplicativo Kinesis Data Streams a partir de um arquivo. O aplicativo Kinesis Data Streams é identificado ARN fornecendo um para o ID do recurso:
$
sam remote invoke
arn:aws:kinesis:us-west-2:01234567890:stream/kinesis-example-KinesisStream-BgnLcAey4xUQ
--event-fileevent.json
Envie um evento fornecido na linha de comando para um aplicativo do Kinesis Data Streams:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide a JSON string as event { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980903986194508740483329854174920706" }%KinesisStream
--stack-namekinesis-example
--eventhello-world
Obtenha a ID física do aplicativo Kinesis Data Streams. Em seguida, forneça um evento na linha de comando:
$
sam list resources --stack-name
[ { "LogicalResourceId": "KinesisStream", "PhysicalResourceId": "kinesis-example-KinesisStream-ZgnLcQey4xUQ" } ]kinesis-example
--outputjson
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream Auto converting value 'hello' into JSON '"hello"'. If you don't want auto-conversion, please provide a JSON string as event { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904340716841045751814812900261890" }%kinesis-example-KinesisStream-ZgnLcQey4xUQ
--eventhello
Forneça uma JSON string na linha de comando como um evento:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904492868617924990209230536441858" }%KinesisStream
--stack-namekinesis-example
--event'{"method": "GET", "body": ""}'
Envie um evento vazio para o aplicativo Kinesis Data Streams:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904866469008589597168190416224258" }%KinesisStream
--stack-namekinesis-example
Devolva o AWS SAM CLI resposta no JSON formato:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980905078409420803696667195489648642", "ResponseMetadata": { "RequestId": "ebbbd307-3e9f-4431-b67c-f0715e9e353e", "HTTPStatusCode": 200, "HTTPHeaders": { "x-amzn-requestid": "ebbbd307-3e9f-4431-b67c-f0715e9e353e", "x-amz-id-2": "Q3yBcgTwtPaQTV26IKclbECmZikUYOzKY+CzcxA84ZHgCkc5T2N/ITWg6RPOQcWw8Gn0tNPcEJBEHyVVqboJAPgCritqsvCu", "date": "Thu, 09 Nov 2023 18:13:10 GMT", "content-type": "application/x-amz-json-1.1", "content-length": "110" }, "RetryAttempts": 0 } }%KinesisStream
--stack-namekinesis-example
--event'{"hello": "world"}'
--outputjson
Retorne a JSON saída para stdout:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStreamKinesisStream
--stack-namekinesis-example
--event'{"hello": "world"}'
--outputjson 1> stdout.log
$
cat
{ "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980906397777867595039988349006774274", "ResponseMetadata": { "RequestId": "f4290006-d84b-b1cd-a9ee-28306eeb2939", "HTTPStatusCode": 200, "HTTPHeaders": { "x-amzn-requestid": "f4290006-d84b-b1cd-a9ee-28306eeb2939", "x-amz-id-2": "npCqz+IBKpoL4sQ1ClbUmxuJlbeA24Fx1UgpIrS6mm2NoIeV2qdZSN5AhNurdssykXajBrXaC9anMhj2eG/h7Hnbf+bPuotU", "date": "Thu, 09 Nov 2023 18:33:26 GMT", "content-type": "application/x-amz-json-1.1", "content-length": "110" }, "RetryAttempts": 0 } }%stdout.log
Exemplos do Lambda
Exemplos básicos
Invoque uma função Lambda fornecendo ARN o como ID do recurso:
$
sam remote invoke
arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-ohRFEn2RuAvp
Invoque uma função do Lambda fornecendo a ID lógica como uma ID de recurso:
Você também deve fornecer o nome da AWS CloudFormation pilha usando a --stack-name
opção. Veja um exemplo a seguir:
$
sam remote invoke
HelloWorldFunction
--stack-namesam-app
Se seu aplicativo contiver uma única função do Lambda, você não precisará especificar sua ID lógica. Você pode fornecer somente a opção --stack-name
. Veja um exemplo a seguir:
$
sam remote invoke --stack-name
sam-app
Invoque uma função do Lambda fornecendo o ID físico como ID do recurso:
O ID físico é criado quando você implanta usando AWS CloudFormation.
$
sam remote invoke
sam-app-HelloWorldFunction-TZvxQRFNv0k4
Invoque uma função do Lambda de uma pilha secundária:
Neste exemplo, nosso aplicativo contém a seguinte estrutura de diretórios:
lambda-example ├── childstack │ ├── function │ │ ├── __init__.py │ │ ├── app.py │ │ └── requirements.txt │ └── template.yaml ├── events │ └── event.json ├── samconfig.toml └── template.yaml
Para invocar a função do Lambda do nosso childstack
, executamos o seguinte:
$
sam remote invoke
Invoking Lambda Function HelloWorldFunction START RequestId: 207a864b-e67c-4307-8478-365b004d4bcd Version: $LATEST END RequestId: 207a864b-e67c-4307-8478-365b004d4bcd REPORT RequestId: 207a864b-e67c-4307-8478-365b004d4bcd Duration: 1.27 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 36 MB Init Duration: 111.07 ms {"statusCode": 200, "body": "{\"message\": \"Hello\", \"received_event\": {}}"}%ChildStack/HelloWorldFunction
--stack-namelambda-example
Invoque uma função do Lambda configurada para o streaming de respostas
Neste exemplo, usamos o AWS SAM CLI para inicializar um novo aplicativo sem servidor que contém uma função Lambda configurada para transmitir sua resposta. Implantamos nosso aplicativo no Nuvem AWS e usamos o sam remote invoke
para interagir com nossa função na nuvem.
Começamos executando o comando sam init
para criar um novo aplicativo sem servidor. Selecionamos o modelo de início rápido do Lambda Response Streaming e nomeamos nosso aplicativo. lambda-streaming-nodejs-app
$
sam init
You can preselect a particular runtime or package type when using the `sam init` experience. Call `sam init --help` to learn more. Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice:1
Choose an AWS Quick Start application template 1 - Hello World Example ... 9 - Lambda Response Streaming ... 15 - Machine Learning Template:9
Which runtime would you like to use? 1 - go (provided.al2) 2 - nodejs18.x 3 - nodejs16.x Runtime:2
Based on your selections, the only Package type available is Zip. We will proceed to selecting the Package type as Zip. Based on your selections, the only dependency manager available is npm. We will proceed copying the template using npm. Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]:ENTER
Would you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:ENTER
Project name [sam-app]:lambda-streaming-nodejs-app
----------------------- Generating application: ----------------------- Name: lambda-streaming-nodejs-app Runtime: nodejs18.x Architectures: x86_64 Dependency Manager: npm Application Template: response-streaming Output Directory: . Configuration file: lambda-streaming-nodejs-app/samconfig.toml Next steps can be found in the README file at lambda-streaming-nodejs-app/README.md Commands you can use next ========================= [*] Create pipeline: cd lambda-streaming-nodejs-app && sam pipeline init --bootstrap [*] Validate SAM template: cd lambda-streaming-nodejs-app && sam validate [*] Test Function in the Cloud: cd lambda-streaming-nodejs-app && sam sync --stack-name {stack-name} --watch
O AWS SAM CLI cria nosso projeto com a seguinte estrutura:
lambda-streaming-nodejs-app ├── README.md ├── __tests__ │ └── unit │ └── index.test.js ├── package.json ├── samconfig.toml ├── src │ └── index.js └── template.yaml
Veja a seguir um exemplo de nosso código de função do Lambda:
exports.handler = awslambda.streamifyResponse( async (event, responseStream, context) => { const httpResponseMetadata = { statusCode: 200, headers: { "Content-Type": "text/html", "X-Custom-Header": "Example-Custom-Header" } }; responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata); // It's recommended to use a `pipeline` over the `write` method for more complex use cases. // Learn more: https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html responseStream.write("<html>"); responseStream.write("<p>First write!</p>"); responseStream.write("<h1>Streaming h1</h1>"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("<h2>Streaming h2</h2>"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("<h3>Streaming h3</h3>"); await new Promise(r => setTimeout(r, 1000)); // Long strings will be streamed const loremIpsum1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a."; responseStream.write(`<p>${loremIpsum1}</p>`); await new Promise(r => setTimeout(r, 1000)); responseStream.write("<p>DONE!</p>"); responseStream.write("</html>"); responseStream.end(); } );
Este é um exemplo de nosso arquivo template.yaml
. O streaming de resposta para nossa função do Lambda é configurado usando a propriedade FunctionUrlConfig
.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > Sample SAM Template for lambda-streaming-nodejs-app Resources: StreamingFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: index.handler Runtime: nodejs18.x Architectures: - x86_64 Timeout: 10 FunctionUrlConfig: AuthType: AWS_IAM InvokeMode: RESPONSE_STREAM Outputs: StreamingFunction: Description: "Streaming Lambda Function ARN" Value: !GetAtt StreamingFunction.Arn StreamingFunctionURL: Description: "Streaming Lambda Function URL" Value: !GetAtt StreamingFunctionUrl.FunctionUrl
Normalmente, você pode usar sam build
e sam deploy --guided
criar e implantar um aplicativo de produção. Neste exemplo, assumiremos um ambiente de desenvolvimento e usaremos o comando sam sync
para criar e implantar nosso aplicativo.
nota
O comando sam sync
é recomendado para ambientes de desenvolvimento. Para saber mais, consulte Introdução ao uso sam sync para sincronizar com Nuvem AWS.
Antes de executar sam sync
, verificamos se nosso projeto está configurado corretamente em nosso arquivo samconfig.toml
. Mais importante ainda, verificamos os valores de stack_name
e watch
. Com esses valores especificados em nosso arquivo de configuração, não precisamos fornecê-los na linha de comando.
version = 0.1 [default] [default.global.parameters] stack_name = "lambda-streaming-nodejs-app" [default.build.parameters] cached = true parallel = true [default.validate.parameters] lint = true [default.deploy.parameters] capabilities = "CAPABILITY_IAM" confirm_changeset = true resolve_s3 = true s3_prefix = "lambda-streaming-nodejs-app" region = "us-west-2" image_repositories = [] [default.package.parameters] resolve_s3 = true [default.sync.parameters] watch = true [default.local_start_api.parameters] warm_containers = "EAGER" [default.local_start_lambda.parameters] warm_containers = "EAGER"
Em seguida, executamos sam sync
para criar e implantar nosso aplicativo. Como a --watch
opção está configurada em nosso arquivo de configuração, o AWS SAM CLI criará nosso aplicativo, implantará nosso aplicativo e observará as mudanças.
$
sam sync
The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without performing a CloudFormation deployment. This will cause drift in your CloudFormation stack. **The sync command should only be used against a development stack**. Queued infra sync. Waiting for in progress code syncs to complete... Starting infra sync. Building codeuri: /Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture: x86_64 functions: StreamingFunction package.json file not found. Continuing the build without dependencies. Running NodejsNpmBuilder:CopySource Build Succeeded Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp. Execute the following command to deploy the packaged template sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp --stack-name <YOUR STACK NAME> Deploying with following values =============================== Stack name : lambda-streaming-nodejs-app Region : us-west-2 Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samcliamzn-s3-demo-bucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"] Parameter overrides : {} Signing Profiles : null Initiating deployment ===================== 2023-06-20 12:11:16 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 0.5 seconds) ----------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason ----------------------------------------------------------------------------------------------------- CREATE_IN_PROGRESS AWS::CloudFormation::St lambda-streaming- Transformation ack nodejs-app succeeded CREATE_IN_PROGRESS AWS::IAM::Role StreamingFunctionRole - CREATE_IN_PROGRESS AWS::CloudFormation::St AwsSamAutoDependencyLay - ack erNestedStack CREATE_IN_PROGRESS AWS::IAM::Role StreamingFunctionRole Resource creation Initiated CREATE_IN_PROGRESS AWS::CloudFormation::St AwsSamAutoDependencyLay Resource creation ack erNestedStack Initiated CREATE_COMPLETE AWS::IAM::Role StreamingFunctionRole - CREATE_COMPLETE AWS::CloudFormation::St AwsSamAutoDependencyLay - ack erNestedStack CREATE_IN_PROGRESS AWS::Lambda::Function StreamingFunction - CREATE_IN_PROGRESS AWS::Lambda::Function StreamingFunction Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Function StreamingFunction - CREATE_IN_PROGRESS AWS::Lambda::Url StreamingFunctionUrl - CREATE_IN_PROGRESS AWS::Lambda::Url StreamingFunctionUrl Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Url StreamingFunctionUrl - CREATE_COMPLETE AWS::CloudFormation::St lambda-streaming- - ack nodejs-app ----------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ------------------------------------------------------------------------------------------------------- Outputs ------------------------------------------------------------------------------------------------------- Key StreamingFunction Description Streaming Lambda Function ARN Value arn:aws:lambda:us-west-2:012345678910:function:lambda-streaming-nodejs-app- StreamingFunction-gUmhO833A0vZ Key StreamingFunctionURL Description Streaming Lambda Function URL Value https://wxgkcc2dyntgtrwhf2dgdcvylu0rnnof.lambda-url.us-west-2.on.aws/ ------------------------------------------------------------------------------------------------------- Stack creation succeeded. Sync infra completed. Infra sync completed.
Agora que nossa função está implantada na nuvem, podemos usar sam remote
invoke
para interagir com nossa função. O AWS SAM CLI detecta automaticamente que nossa função está configurada para streaming de resposta e imediatamente começa a gerar uma resposta transmitida de nossa função em tempo real.
$
sam remote invoke
Invoking Lambda Function StreamingFunction {"statusCode":200,"headers":{"Content-Type":"text/html","X-Custom-Header":"Example-Custom-Header"}}<html><p>First write!</p><h1>Streaming h1</h1><h2>Streaming h2</h2><h3>Streaming h3</h3><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.</p><p>DONE!</p></html>START RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 Version: $LATEST END RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 REPORT RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 Duration: 4088.66 ms Billed Duration: 4089 ms Memory Size: 128 MB Max Memory Used: 68 MB Init Duration: 168.45 msStreamingFunction
Quando modificamos nosso código de função, o AWS SAM CLI detecta instantaneamente e implanta imediatamente nossas alterações. Aqui está um exemplo do AWS SAM CLI saída após as alterações serem feitas em nosso código de função:
Syncing Lambda Function StreamingFunction...
Building codeuri:
/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture:
x86_64 functions: StreamingFunction
package.json file not found. Continuing the build without dependencies.
Running NodejsNpmBuilder:CopySource
Finished syncing Lambda Function StreamingFunction.
Syncing Layer StreamingFunctione9cfe924DepLayer...
SyncFlow [Layer StreamingFunctione9cfe924DepLayer]: Skipping resource update as the
content didn't change
Finished syncing Layer StreamingFunctione9cfe924DepLayer.
Agora podemos usar sam remote invoke
novamente para interagir com nossa função na nuvem e testar nossas alterações.
SQSexemplos
Exemplos básicos
Invoque uma SQS fila da Amazon fornecendo o ARN como ID do recurso:
$
sam remote invoke
Sending message to SQS queue MySqsQueue { "MD5OfMessageBody": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9", "MessageId": "4f464cdd-15ef-4b57-bd72-3ad225d80adc", "ResponseMetadata": { "RequestId": "95d39377-8323-5ef0-9223-ceb198bd09bd", "HTTPStatusCode": 200, "HTTPHeaders": { "x-amzn-requestid": "95d39377-8323-5ef0-9223-ceb198bd09bd", "date": "Wed, 08 Nov 2023 23:27:26 GMT", "content-type": "application/x-amz-json-1.0", "content-length": "106", "connection": "keep-alive" }, "RetryAttempts": 0 } }%arn:aws:sqs:us-west-2:01234567890:sqs-example-4DonhBsjsW1b
--event'{"hello": "world"}'
--outputjson
Exemplos de Step Functions
Exemplos básicos
Invoque uma máquina de estado fornecendo sua ID física como ID de recurso:
Primeiro, usamos sam list resources
para obter nossa identificação física:
$
sam list resources --stack-name
[ { "LogicalResourceId": "HelloWorldStateMachine", "PhysicalResourceId": "arn:aws:states:us-west-2:513423067560:stateMachine:HelloWorldStateMachine-z69tFEUx0F66" }, { "LogicalResourceId": "HelloWorldStateMachineRole", "PhysicalResourceId": "simple-state-machine-HelloWorldStateMachineRole-PduA0BDGuFXw" } ]state-machine-example
--outputjson
Em seguida, invocamos nossa máquina de estado usando o ID físico como ID do recurso. Transmitimos um evento na linha de comando com a opção --event
:
$
sam remote invoke
Invoking Step Function arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66 "Hello Developer World"%arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66
--event'{"is_developer": true}'
Invoque uma máquina de estado transmitindo um evento vazio:
$
sam remote invoke
Invoking Step Function HelloWorldStateMachine "Hello World"%HelloWorldStateMachine
--stack-namestate-machine-example
Links relacionados
Para documentação relacionada sam remote invoke
e usando o AWS SAM CLI, veja o seguinte: