AWS series XV: Lambda
Serie de artigos sobre Amazon Web Services.
Lab 13 - Amazon Lambda
Em este lab sobre Lambda aprenderemos alguns conceitos do modulo de Function as a Service (FaaS) / serverless da plataforma da AWS:
- Criação de funções Lambda
- Teste de funções
- Criação de triggers (via API Gateway)
Pre-reqs
- A seguinte tabela, com nome
Atmosfera
criada no DynamoDB:- sala: primary key, string
- temperatura: number
- humidade: number
Configuração do serviço
-
Acessar o serviço Lambda:
-
Criar uma nova função:
-
Criar uma primera função
getTemperatura
com Python como runtime: -
Nas contas da AWS Academy é necessário mudar o execution role por
LabRole
: - Configurar o seguinte código para a função:
import json import boto3 def lambda_handler(event, context): dynamodb = boto3.resource('dynamodb') tableTemperatures = dynamodb.Table('Atmosfera') response = tableTemperatures.scan() return { 'statusCode': 200, 'body': response['Items'][0]['temperatura'] }
O código lee o valor
temperatura
da tabelaAtmosfera
do DynamoDB. -
Fazer deploy do código:
-
Vamos testar o código:
-
Criamos um evento de testes. A entrada do evento (o arquivo
json
) é indeferente em este caso específico, pois a API não está lendo entrada: -
Executar o evento de testes recém criado
testeGetTemperatura
: -
Se tiver usando uma conta “normal” da AWS ir para o passo 22, se tiver usando uma conta do AWS Academy continuar normalmente.
-
Agora vamos configurar um trigger para a função:
-
O trigger será um endpoint em uma nova API do API Gateway chamada
api-lambda
: -
Conferir que o trigger foi criado e asociado à função:
-
Nos detalhes do trigger podemos ver a URL do endpoint:
- Testamos o endpoint (se aparecer a mensagem
{"message":"Missing Authentication Token"}
aguardar um minuto e repetir o teste):
Configuração do segundo endpoint usando a mesma API
-
Repetir os pasos 2 e 3 para criar uma segunda função
getHumidade
com Python como runtime: - Configurar o seguinte código para a função e fazer deploy do mesmo:
import json import boto3 def lambda_handler(event, context): dynamodb = boto3.resource('dynamodb') tableTemperatures = dynamodb.Table('Atmosfera') response = tableTemperatures.scan() return { 'statusCode': 200, 'body': response['Items'][0]['humidade'] }
O código lee o valor
humidade
da tabelaAtmosfera
do DynamoDB. -
Testar a nova função como mostrado nos passos 7, 8 e 9:
-
Criar um trigger para a função usando a mesma API que no passo 16:
-
Obter o endpoint nos detalhes do trigger:
- Conferir o novo endpoint da API (se aparecer a mensagem
{"message":"Missing Authentication Token"}
aguardar um minuto e repetir o teste):
Criação do IAM role em contas “normais” da AWS
-
O teste deve falhar, pois a função não tem permissão para acessar o DynamoDB:
-
No IAM, procurar o role da função:
-
Adicionar uma nova policy:
-
A policy
AmazonDynamoDBReadOnlyAccess
vai dar acesso de leitura ao DynamoDB: -
Estado final da role:
-
Ejecutar de novo o teste, agora deberia funcionar:
-
Continuar o laboratório normalmente a partir do passo 11
Comments