Neste módulo, você usará o AWS Lambda e o Amazon DynamoDB para criar um processo de back-end para lidar com as solicitações para seu aplicativo web. O aplicativo do navegador que você implantou no primeiro módulo permite que os usuários solicitem que um unicorn seja enviado para um local de sua escolha. Para cumprir essas solicitações, o JavaScript em execução no navegador precisará invocar um serviço em execução na nuvem.

Serverless_Web_App_LP_assets-04

Você implementará uma função do Lambda que será chamada cada vez que um usuário solicitar um unicorn. A função selecionará um unicorn da frota, registrará a solicitação em uma tabela do DynamoDB e, em seguida, responderá ao aplicativo front-end com detalhes sobre o envio do unicorn.

A função é chamada a partir 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 isoladamente.

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

Serviços utilizados: AWS Lambda e Amazon DynamoDB


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

  • Etapa 1. Criar uma tabela do Amazon DynamoDB

    Use o console do Amazon DynamoDB para criar uma nova tabela do DynamoDB. Ligue para sua tabela Rides e forneça uma chave de partição chamada RideId com tipo String. O nome da tabela e a chave de partição são sensíveis às maiúsculas/minúsculas. Certifique-se de usar exatamente as IDs fornecidas. Use os valores padrão para todas as outras configurações.

    Depois de criar a tabela, observe o ARN para uso na próxima etapa.


    1. No Console de Gerenciamento da AWS, escolha Services e, em seguida, selecione DynamoDB em bancos de dados.

    2. Escolha Create Table.

    3. Digite Rides para o nome da tabela. Esse campo diferencia maiúsculas de minúsculas.

    4. Digite RideId para a Partition key e selecione String para o tipo de chave. Esse campo diferencia maiúsculas de minúsculas.

    5. Marque a caixa Use default settings e escolha Create.

    6. Role até o final da seção Visão geral de sua nova tabela e observe o ARN. Você o usará na próxima seção.

  • Etapa 2. Criar 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 a função do Lambda permissão para gravar logs para o Amazon CloudWatch Logs e acesso para gravar itens na tabela do DynamoDB.

    Use o console do IAM para criar uma nova função. Chame-a de WildRydesLambda e selecione o 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 colocar 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 a sua função que permita a ação ddb:PutItem para a tabela que você criou na seção anterior.


    1. No Console de Gerenciamento da AWS, clique em Services e, em seguida, selecione IAM na seção de conformidade, identidade e segurança.

    2. Selecione Roles na barra de navegação à esquerda e, em seguida, escolha Create New Role.

    3. Selecione o AWS Lambda para o tipo de função.

      Observação: selecionar um tipo de função cria automaticamente uma política de confiança para sua função que permite que os serviços da AWS assumam essa função em seu nome. Se você estiver criando esta função usando a ILC, o AWS CloudFormation ou outro mecanismo, você pode especificar uma política de confiança diretamente.

    4. Comece digitando AWSLambdaBasicExecutionRole na caixa de texto Filtro e marque a caixa de seleção próxima a essa função.

    5. Escolha Next Step.

    6. Digite WildRydesLambda para o Role Name.

    7. Selecione Create Role.

    8. Digite WildRydesLambda na caixa de filtro na página Funções e escolha a função que você acabou de criar.

    9. Na guia Permissões, expanda a seção Inline Policies e escolha o link click here para criar uma nova política em linha.

    10. Certifique-se de que Policy Generator está selecionada e escolha Select.

    11. Selecione o Amazon DynamoDB na lista suspensa do Serviço da AWS.

    12. Selecione PutItem na lista ações.

    13. Cole o ARN da tabela que você criou na seção anterior no campo Amazon Resource Name (ARN).

    14. Escolha Add Statement.

    15. Escolha Next Step e, em seguida, Apply Policy.

  • Etapa 3. Criar uma função do Lambda para tratar de solicitações

    O AWS Lambda executará seu código em resposta a eventos, como uma solicitação HTTP. Nesta etapa, você criará a função central que processará as solicitações de API do aplicativo web para enviar um unicorn. No próximo módulo, você usará o Amazon API Gateway para criar uma RESTful API que exporá um terminal HTTP que pode ser chamado a partir dos navegadores dos seus usuários. Em seguida, você conectará a função do Lambda que criou nesta etapa à API para criar um back-end totalmente funcional para seu aplicativo web.

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

    Certifique-se de configurar sua função para usar a função do IAM WildRydesLambda que você criou na seção anterior.


    1. Escolha Services e, em seguida, selecione Lambda na seção Compute.

    2. Escolha Create function.

    3. Escolha Author from Scratch.

    4. Digite RequestUnicorn no campo Nome.

    5. Selecione WildRydesLambda na lista suspensa Existing Role.

    6. Selecione Create function.

    7. Copie e cole o código do requestUnicorn.js na área de entrada de código.

    8. Certifique-se de que o Node.js 6.10 está selecionado sob Runtime.

    9. Mantenha o padrão de index.handler para o campo Handler.

  • Etapa 4. Testar sua implementação

    Para este módulo, você testará a função que criou usando o console do AWS Lambda. No próximo módulo, você adicionará uma REST API com o API Gateway, de modo que você possa invocar sua função do aplicativo baseado em navegador que você implantou no primeiro módulo.


    1. Selecione o menu suspenso Select a test event e, em seguida, Configure test event.

    2. Copie e cole o seguinte evento 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. Insira um nome do evento, escolha Create, e, em seguida, test.

    2. Verifique se a execução foi concluída com sucesso e se a função resultante 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": "*"
        }
    }