Tutorial: criar uma função do Lambda com um URL de função
Neste tutorial, você criará uma função do Lambda definida como um arquivo .zip com um endpoint de URL de função público que retorna o produto de dois números. 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
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
-
Abra a página Roles
(Funções) no console do AWS Identity and Access Management (IAM). -
Selecione Criar função.
-
Em Tipo de entidade confiável, selecione serviço da AWS e, em Caso de uso, selecione Lambda.
-
Escolha Próximo.
-
No painel Políticas de permissões, insira
AWSLambdaBasicExecutionRole
na caixa de pesquisa. -
Marque a caixa de seleção ao lado da política gerenciada pela AWS
AWSLambdaBasicExecutionRole
e escolha Avançar. -
Insira
lambda-url-role
em Nome do perfil e depois escolha Criar perfil.
A política AWSLambdaBasicExecutionRole
tem as permissões de que a função precisa para gravar logs no Amazon CloudWatch Logs. Mais adiante neste tutorial, você precisará do nome do recurso da Amazon (ARN) do perfil para criar a função do Lambda.
Para localizar o ARN do seu perfil de execução
-
Abra a página Roles
(Funções) no console do AWS Identity and Access Management (IAM). -
Escolha o perfil que você acabou de criar (
lambda-url-role
). -
No painel Resumo, copie o ARN.
Criar uma função do Lambda com um URL de função (arquivo .zip)
Crie uma função do Lambda com um endpoint de URL de função usando um arquivo .zip.
Para criar a função
-
Copie o exemplo de código a seguir em um arquivo com o nome
index.js
.exemplo index.js
exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; };
-
Crie um pacote de implantação.
zip function.zip index.js
-
Crie uma função do Lambda com o comando
create-function
. Certifique-se de substituir o ARN do perfil pelo ARN do seu próprio perfil de execução que você copiou anteriormente no tutorial.aws lambda create-function \ --function-name my-url-function \ --runtime nodejs18.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role
arn:aws:iam::123456789012:role/lambda-url-role
-
Adicione uma política baseada em recurso à função concedendo permissões para acesso público ao URL da função.
aws lambda add-permission \ --function-name my-url-function \ --action lambda:InvokeFunctionUrl \ --principal "*" \ --function-url-auth-type "NONE" \ --statement-id url
-
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-url-function \ --auth-type NONE
Testar o endpoint de URL de função
Invoque a função do Lambda chamando o endpoint do URL de função usando um cliente HTTP, como curl ou Postman.
curl
'https://abcdefg.lambda-url.us-east-1.on.aws/'
\ -H 'Content-Type: application/json' \ -d '{"num1": "10", "num2": "10"}'
A seguinte saída deverá ser mostrada:
The product of 10 and 10 is 100
Criar uma função do Lambda com um URL de função (CloudFormation)
Você também pode criar uma função do Lambda com um endpoint de URL de função usando o tipo de AWS CloudFormation AWS::Lambda::Url
.
Resources: MyUrlFunction: Type: AWS::Lambda::Function Properties: Handler: index.handler Runtime: nodejs18.x Role: arn:aws:iam::123456789012:role/lambda-url-role Code: ZipFile: | exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; }; Description: Create a function with a URL. MyUrlFunctionPermissions: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref MyUrlFunction Action: lambda:InvokeFunctionUrl Principal: "*" FunctionUrlAuthType: NONE MyFunctionUrl: Type: AWS::Lambda::Url Properties: TargetFunctionArn: !Ref MyUrlFunction AuthType: NONE
Criar uma função do Lambda com um URL de função (AWS SAM)
Você também pode criar uma função do Lambda configurada com um endpoint de URL de função usando o AWS Serverless Application Model (AWS SAM).
ProductFunction: Type: AWS::Serverless::Function Properties: CodeUri: function/. Handler: index.handler Runtime: nodejs18.x AutoPublishAlias: live FunctionUrlConfig: AuthType: NONE
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
-
Abra a página Roles
(Funções) no console do IAM. -
Selecione a função de execução que você criou.
-
Escolha Excluir.
-
Insira o nome do perfil no campo de entrada de texto e escolha Delete (Excluir).
Como excluir a função do Lambda
-
Abra a página Functions
(Funções) no console do Lambda. -
Selecione a função que você criou.
-
Escolha Ações, Excluir.
-
Digite
delete
no campo de entrada de texto e escolha Delete (Excluir).