Tutorial: criação de um função do Lambda de streaming de resposta com um URL da função - AWS Lambda

Tutorial: criação de um função do Lambda de streaming de resposta com um URL da função

Neste tutorial, você criará uma função do Lambda definida como um arquivo .zip com um endpoint público do URL da função que retorna um fluxo de resposta. Para obter mais informações sobre a configuração de URLs de função, consulte URLs da função.

Pré-requisitos

Este tutorial presume que você tenha algum conhecimento de operações básicas do Lambda e do console do Lambda. Caso ainda não tenha feito isso, siga as instruções em Criar uma função do Lambda com o console para criar sua primeira função do Lambda.

Para concluir as etapas apresentadas a seguir, é necessário ter a versão 2 da AWS CLI. 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 uma função de execução

Crie a função de execução que dá à sua função do Lambda permissão para acessar recursos da AWS.

Para criar uma função de execução
  1. Abra a página Roles (Funções) no console do AWS Identity and Access Management (IAM).

  2. Selecione Criar função.

  3. Crie uma função com as seguintes propriedades:

    • Tipo de entidade confiável: serviço da AWS

    • Caso de uso: Lambda

    • Permissões: AWSLambdaBasicExecutionRole

    • Role name (Nome da função): response-streaming-role

A política AWSLambdaBasicExecutionRole tem as permissões de que a função necessita para gravar logs no Amazon CloudWatch Logs. Após criar o perfil, anote seu nome do recurso da Amazon (ARN). Você precisará dele na próxima etapa.

Crie uma função de streaming de respostas (AWS CLI)

Crie uma função do Lambda de streaming resposta com um endpoint de URL da função usando a AWS Command Line Interface (AWS CLI).

Para criar uma função que possa fazer o streaming de respostas
  1. Copie o exemplo de código a seguir em um arquivo com o nome index.mjs.

    import util from 'util'; import stream from 'stream'; const { Readable } = stream; const pipeline = util.promisify(stream.pipeline); /* global awslambda */ export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { const requestStream = Readable.from(Buffer.from(JSON.stringify(event))); await pipeline(requestStream, responseStream); });
  2. Crie um pacote de implantação.

    zip function.zip index.mjs
  3. Crie uma função do Lambda com o comando create-function. Substitua o valor de --role pelo ARN do perfil da etapa anterior.

    aws lambda create-function \ --function-name my-streaming-function \ --runtime nodejs16.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role arn:aws:iam::123456789012:role/response-streaming-role
Para criar um URL da função
  1. Adicione uma política baseada em recurso à sua função para permitir acesso público ao URL da função. Substitua o valor de --principal pela sua ID da Conta da AWS.

    aws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunctionUrl \ --statement-id 12345 \ --principal 123456789012 \ --function-url-auth-type AWS_IAM \ --statement-id url
  2. Crie um endpoint de URL para a função com o comando create-function-url-config.

    aws lambda create-function-url-config \ --function-name my-streaming-function \ --auth-type AWS_IAM \ --invoke-mode RESPONSE_STREAM

Testar o endpoint de URL de função

Teste sua integração invocando sua função. É possível abrir o URL da sua função em um navegador, ou usar o curl.

curl --request GET "<function_url>" --user "<key:token>" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer

A URL da nossa função usa o tipo de autenticação IAM_AUTH. Isso significa que você precisa assinar solicitações com sua chave de acesso e chave secreta da AWS. No comando anterior, substitua <key:token> pela ID da chave de acesso da AWS. Insira sua chave secreta da AWS, quando solicitada. Se você não tiver sua chave secreta da AWS, é possível usar credenciais da AWS temporárias em vez disso.

Limpe os recursos

Agora você pode excluir os recursos criados para este tutorial, a menos que queira mantê-los. Excluindo os recursos da AWS que você não está mais usando, você evita cobranças desnecessárias em sua Conta da AWS.

Para excluir a função de execução
  1. Abra a página Roles (Funções) no console do IAM.

  2. Selecione a função de execução que você criou.

  3. Escolha Excluir.

  4. Insira o nome do perfil no campo de entrada de texto e escolha Delete (Excluir).

Como excluir a função do Lambda
  1. Abra a página Functions (Funções) no console do Lambda.

  2. Selecione a função que você criou.

  3. Escolha Ações, Excluir.

  4. Digite delete no campo de entrada de texto e escolha Delete (Excluir).