4 minute read

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

  1. Acessar o serviço Lambda:

  2. Criar uma nova função:

  3. Criar uma primera função getTemperatura com Python como runtime:

  4. Nas contas da AWS Academy é necessário mudar o execution role por LabRole:

  5. 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 tabela Atmosfera do DynamoDB.

  6. Fazer deploy do código:

  7. Vamos testar o código:

  8. 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:

  9. Executar o evento de testes recém criado testeGetTemperatura:

  10. Se tiver usando uma conta “normal” da AWS ir para o passo 22, se tiver usando uma conta do AWS Academy continuar normalmente.

  11. Agora vamos configurar um trigger para a função:

  12. O trigger será um endpoint em uma nova API do API Gateway chamada api-lambda:

  13. Conferir que o trigger foi criado e asociado à função:

  14. Nos detalhes do trigger podemos ver a URL do endpoint:

  15. 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

  1. Repetir os pasos 2 e 3 para criar uma segunda função getHumidade com Python como runtime:

  2. 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 tabela Atmosfera do DynamoDB.

  3. Testar a nova função como mostrado nos passos 7, 8 e 9:

  4. Criar um trigger para a função usando a mesma API que no passo 16:

  5. Obter o endpoint nos detalhes do trigger:

  6. 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

  1. O teste deve falhar, pois a função não tem permissão para acessar o DynamoDB:

  2. No IAM, procurar o role da função:

  3. Adicionar uma nova policy:

  4. A policy AmazonDynamoDBReadOnlyAccess vai dar acesso de leitura ao DynamoDB:

  5. Estado final da role:

  6. Ejecutar de novo o teste, agora deberia funcionar:

  7. Continuar o laboratório normalmente a partir do passo 11

Comments