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
Atmosferacriada 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
getTemperaturacom 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
temperaturada tabelaAtmosferado 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
getHumidadecom 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
humidadeda tabelaAtmosferado 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
AmazonDynamoDBReadOnlyAccessvai 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