Criando uma função no AWS Lambda com AWS CLI

AWS Lambda é um serviço serverless que permite executar códigos sem a necessidade de se preocupar com servidor. É possível acionar funções lambdas a partir de outros serviços da AWS ou ainda através de URLs (endpoints) que podem ser públicos ou restritos.

Neste post vamos criar uma função simples utilizando Python, mas há suporte nativo também para Java, Go, PowerShell, Node.js, C# e Ruby.

Código Python

Primera coisa que faremos é criar nosso código. Ele irá apenas exibir a data atual quando o endpoint da Lambda for acionada.

Crie um arquivo chamado lambda_function.py com o conteúdo abaixo:

import json
from datetime import date

def lambda_handler(event, context):
    today = date.today()
    result = {'data': today.strftime("%d/%m/%Y")}
    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

Em seguida coloque este arquivo num arquivo zip chamado lambda_function.zip.

Próximos passos

Agora partimos para as configurações na AWS. Basicamente iremos:

  1. Criar role da função
  2. Criar função
  3. Definir o acesso como público
  4. Criar URL (endpoint) da função
  5. Fazer deploy de uma nova versão da função

Criação da role

Primeiro passo é fazer a criação da role que será usada na função. Aqui vamos usar um padrão, mas ele precisa ser adequado a realidade de cada situação. Crie o arquivo role.json com o seguinte conteúdo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
    "Action": "sts:AssumeRole"
    }
  ]
}

Em seguida execute o comando abaixo para criar:

aws iam create-role --role-name python-lambda --assume-role-policy-document file://role.json

Cria função

Próximo passo é criar a função. Veja que no parâmetro —role devemos usar o arn da role criada no comando anterior.

aws lambda create-function --function-name python-lambda --runtime python3.9 --role "arn:aws:iam::817587002462:role/python-lambda" --zip-file fileb://lambda_function.zip --handler lambda_function.lambda_handler

Onde:

  • —function-name: É o nome da função
  • —runtime: Linguagem e versão utilizada
  • —role: A role da função, neste caso estamos apontando para aquela que criamos
  • —zip-file: O código zipado
  • —handler: O método que será invocado quando a função for chamada. No python é nome do arquivo mais o método, ou seja, lambda_function.lambda_handler

Permitir acesso público

Neste passo vamos definir que nossa função possui acesso público, portanto não teremos autenticação para invoca-la.

aws lambda add-permission --function-name python-lambda --action lambda:InvokeFunctionUrl --statement-id FunctionURLAllowPublicAccess --principal "*" --function-url-auth-type NONE

Criar URL Function

Por último vamos criar uma URL/endpoint da função recém criada para que seja possível invoca-lá via https.

No comando abaixo estamos indicando o nome da função lambda.

aws lambda create-function-url-config --function-name python-lambda --auth-type NONE

A saída desse comando mostrará a FunctionUrl, que é a URL no qual acessaremos nosso endpoint.

Testando o acesso

Se todos os comandos foram executados com sucesso, neste ponto já somos capazes de acessar na Lambda Function via navegador, por exemplo.

Atualizar versão do código

Para enviar uma atualização de código basta zipar o(s) arquivo(s) e executar o comando abaixo.

aws lambda update-function-code --function-name python-lambda --zip-file fileb://lambda_function.zip --publish

Conclusão

Neste post criamos a função lambda e também a URL para acesso, essa é apenas a porta de entrada para este mundo serverless. Para mais conteúdo sobre AWS acesse aqui.

Deixe um comentário

O seu endereço de e-mail não será publicado.