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. Chame a sua tabela Rides 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 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. Insira Rides para Table name. Esse campo diferencia maiúsculas de minúsculas.

    4. Insira RideId para 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. Nomeie-o 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.

    Associe a política gerenciada 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 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 Lambda como tipo de função no grupo AWS service e clique em Next: Permissions.

      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. Insira AWSLambdaBasicExecutionRole na caixa de texto Filter e marque a caixa ao lado da função.

    5. Escolha Next Step.

    6. Insira WildRydesLambda para Role Name.

    7. Escolha Create Role.

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

    9. Na guia Permissions, escolha o link Add inline policy no canto inferior direito para criar uma nova política em linha.

    10. Selecione Choose a service.

    11. Insira DynamoDB na caixa de busca com o rótulo Find a service e selecione DynamoDB quando ele aparecer.

    12. Escolha Select actions.

    13. Insira PutItem na caixa de busca com o rótulo Filter actions e marque a caixa ao lado de PutItem quando ela aparecer.

    14. Selecione a seção Resources

    15. Com a opção Specific selecionada, escolha o link Add ARN na seção table.

    16. Cole o ARN da tabela criada na seção anterior no campo Specify ARN for table e escolha Add.

    17. Escolha Review Policy.

    18. Insira DynamoDBWriteAccess para o nome da política e escolha Create 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 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.

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


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

    2. Clique em Create function.

    3. Mantenha o cartão padrão Author from scratch selecionado.

    4. Insira RequestUnicorn no campo Name.

    5. Selecione Node.js 6.10 para Runtime.

    6. Verifique se a opção Choose an existing role está selecionada na lista suspensa Role.

    7. Selecione WildRydesLambda na lista suspensa Existing Role.

    8. Clique em Create function.

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

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

  • 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. Na tela principal de edição da função, selecione Configure test event na lista suspensa Select a test event....

    2. Mantenha Create new test event selecionado.

    3. Insira TestRequestEvent no campo Event name

    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.

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

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

    4. 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": "*"
        }
    }