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:
- Criar role da função
- Criar função
- Definir o acesso como público
- Criar URL (endpoint) da função
- 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.