Neste módulo, você usará o AWS Lambda e o Amazon DynamoDB para criar um processo de back-end para processar solicitações do seu aplicativo web. O aplicativo do navegador que você implantou no primeiro módulo permite que os usuários solicitem o envio de um unicórnio para um local escolhido por eles. Para processar essas solicitações, o JavaScript executado no navegador precisará invocar um serviço executado na nuvem.

Serverless_Web_App_LP_assets-04

Você implementará uma função do Lambda que será invocada sempre que um usuário solicitar um unicórnio. A função vai selecionar um unicórnio da frota, gravar a solicitação em uma tabela do DynamoDB e, então, responder ao aplicativo front-end com detalhes sobre o unicórnio que será despachado.

A função é invocada do navegador usando o Amazon API Gateway. Você implementará essa conexão no próximo módulo. Para este módulo, você apenas testará sua função em isolamento.

Tempo de conclusão do módulo: 30 minutos

Serviços usados: AWS Lambda, Amazon DynamoDB


Siga as instruções passo a passo abaixo para criar um processo de back-end sem servidor. Clique no número de cada etapa para expandir a seção.

  • Etapa 1. Criar uma tabela do Amazon DynamoDB

    Use o console do Amazon DynamoDB para criar uma tabela do DynamoDB. Chame a sua tabela de Rides (Caronas) e dê a ela uma chave de partição chamada RideId com o tipo String. O nome da tabela e a chave de partição diferenciam letras maiúsculas de minúsculas. Certifique-se de usar os IDs exatos fornecidos. Use o padrão para todas as outras configurações.

    Após criar a tabela, anote o ARN para usar na próxima etapa.


    1. No Console de Gerenciamento da AWS, selecione Services (Serviços) e selecione DynamoDB em Databases (Bancos de dados).

    2. Selecione Create table (Criar tabela).

    3. Insira Rides (Caronas) para o Table name (Nome da tabela). Este campo diferencia letras maiúsculas de minúsculas.

    4. Insira RideId para a Partition key (Chave de partição) e selecione String para o tipo de chave. Este campo diferencia letras maiúsculas de minúsculas.

    5. Marque a caixa de seleção Use default settings (Usar configurações padrão) e selecione Create (Criar).

    6. Role até o final da seção Overview (Visão geral) da nova tabela e anote o ARN. Ele será usado na próxima seção.

  • Etapa 2. Crie uma função do IAM para a função do Lambda

    Cada função do Lambda tem uma função do IAM associada a ela. Essa função define com quais outros serviços da AWS a função tem permissão para interagir. Para os fins deste workshop, você precisará criar uma função do IAM que conceda permissão à função do Lambda para gravar logs no Amazon CloudWatch Logs e acesso para gravar itens na tabela do DynamoDB.

    Use o console do IAM para criar uma função. Nomeie-a como WildRydesLambda e selecione AWS Lambda para o tipo de função. Você precisará anexar políticas que concedam à sua função permissões para gravar no Amazon CloudWatch Logs e para inserir itens na tabela do DynamoDB.

    Anexe a política gerenciada chamada AWSLambdaBasicExecutionRole a essa função para conceder as permissões necessárias do CloudWatch Logs. Além disso, crie uma política em linha personalizada para sua função que permita a ação ddb:PutItem para a tabela criada na seção anterior.


    1. No Console de Gerenciamento da AWS, clique em Services (Serviços) e selecione IAM na seção Security, Identity & Compliance (Segurança, identidade e conformidade).

    2. Selecione Roles (Funções) na barra de navegação à esquerda e, então, Create New Role (Criar função).

    3. Selecione Lambda como tipo de função no grupo AWS service (Serviço da AWS) e clique em Next: Permissions (Próximo: permissões).

      Observação: selecionar um tipo de função automaticamente cria uma política de confiança para a função que permite que os serviços da AWS assumam essa função em seu nome. Se estiver criando essa função a partir da CLI, do AWS CloudFormation ou de outro mecanismo, especifique diretamente uma política de confiança.

    4. Comece digitando AWSLambdaBasicExecutionRole na caixa de texto Filter (Filtro) e marque a caixa ao lado da função.

    5. Selecione Next Step (Próxima etapa).

    6. Insira WildRydesLambda para Role Name (Nome da função).

    7. Selecione Create Role (Criar função).

    8. Insira WildRydesLambda na caixa de filtros na página Roles (Funções) e escolha a função que você acabou de criar.

    9. Na guia Permissions (Permissões), selecione o link Add inline policy (Adicionar política em linha) no canto inferior direito para criar uma política em linha.

    10. Selecione Choose a service (Escolher um serviço).

    11. Comece digitando DynamoDB na caixa de busca com o rótulo Find a service (Encontrar um serviço) e selecione DynamoDB quando ele aparecer.

    12. Selecione Select actions (Selecionar ações).

    13. Insira PutItem na caixa de busca com o rótulo Filter actions (Filtrar ações) e marque a caixa ao lado de PutItem quando ela aparecer.

    14. Selecione a seção Resources (Recursos)

    15. Com a opção Specific (Específico) selecionada, selecione o link Add ARN (Adicionar ARN) na seção table (tabela).

    16. Cole o ARN da tabela criada na seção anterior no campo Specify ARN for table (Especificar ARN para a tabela) e selecione Add (Adicionar).

    17. Escolha Review Policy (Revisar política).

    18. Insira DynamoDBWriteAccess para o nome da política e selecione Create policy (Criar política).

  • Etapa 3. Selecionar uma função do lambda para processar solicitações

    O AWS Lambda executará seu código como resposta a eventos como uma solicitação HTTP. Nesta etapa, você criará a função básica que processará solicitações de API a partir do aplicativo web para despachar um unicórnio. No próximo módulo, você usará o Amazon API Gateway para criar uma API RESTful que vai expor um endpoint HTTP que pode ser invocado a partir dos navegadores dos usuários. Então, você vai conectar a função do Lambda criada nesta etapa a essa API para criar um back-end totalmente funcional para seu aplicativo web.

    Use o console do AWS Lambda para criar uma função do Lambda chamada RequestUnicorn, que processará as solicitações de API. Use a implementação de exemplo do requestUnicorn.js para o código da função. Basta copiar e colar daquele arquivo para o editor do console do AWS Lambda.

    Certifique-se de configurar sua função para usar a função do IAM WildRydesLambda criada na seção anterior.


    1. Selecione Services (Serviços) e selecione Lambda na seção Compute (Computação).

    2. Clique em Create function (Criar função).

    3. Mantenha o cartão padrão Author from scratch (Criar do zero) selecionado.

    4. Insira RequestUnicorn no campo Name (Nome).

    5. Selecione Node.js 6.10 para Runtime (Tempo de execução).

    6. Certifique-se de que a opção Choose an existing role (Escolher uma função existente) esteja selecionada na lista vertical Role (Função).

    7. Selecione WildRydesLambda na lista vertical Existing Role (Função existente).

    8. Clique em Create function (Criar função).

    9. Role para baixo até a seção Function code (Código da função) e substitua o código existente no editor de código de index.js pelo conteúdo de requestUnicorn.js.

    10. Clique em "Save" (Salvar) no canto superior direito da página.

  • Etapa 4. Testar sua implantação

    Para este módulo, você testará a função criada usando o console do AWS Lambda. No próximo módulo, você adicionará uma API REST com o API Gateway para poder invocar sua função a partir do aplicativo baseado em navegador implantado no primeiro módulo.


    1. Na tela principal de edição da função, selecione Configure test event (Configurar evento de teste) na lista vertical Select a test event... (Selecionar um evento de teste...).

    2. Mantenha Create new test event (Criar evento de teste) selecionado.

    3. Insira TestRequestEvent no campo Event name (Nome do evento)

    4. Copie e cole o seguinte evento de teste no editor:

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }
    1. Clique em Create (Criar).

    2. Na tela principal de edição de função, clique em Test (Testar) com TestRequestEvent selecionado na lista vertical.

    3. Role até a parte superior da página e expanda a seção Details (Detalhes) da seção Execution result (Resultado da execução).

    4. Verifique se a execução foi bem-sucedida e se o resultado da função se parece com o seguinte:

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }