Conceitos básicos da AWS
Crie uma aplicação Web sem servidor
com o AWS Lambda, Amazon API Gateway, AWS Amplify, Amazon DynamoDB e Amazon Cognito
Módulo 4: Implantar uma API RESTful
Você usará o Amazon API Gateway para expor a função do Lambda criada no módulo anterior como uma API RESTful.
Visão geral
Neste módulo, você usará o Amazon API Gateway para expor a função do Lambda criada no módulo anterior como uma API RESTful. Essa API será acessível pela Internet pública. Ela será protegida usando o grupo de usuários do Amazon Cognito criado no módulo anterior. Ao usar essa configuração, você transformará seu site hospedado de maneira estática em uma aplicação Web dinâmica adicionando JavaScript do lado do cliente que faz chamadas AJAX para as APIs expostas.
Visão geral da arquitetura
O diagrama acima mostra como o componente do API Gateway que será criado neste módulo se integra aos componentes existentes criados anteriormente. Os itens desativados são as partes já implementadas em etapas anteriores.
O site estático implantado no primeiro módulo já tem uma página configurada para interagir com a API criada neste módulo. A página em /ride.html tem uma interface simples baseada em mapa para solicitar uma carona de unicórnio. Depois de fazer a autenticação usando a página /signin.html, os usuários poderão selecionar o local de partida clicando em um ponto do mapa e solicitando uma carona ao clicar no botão "Request Unicorn" (Solicitar unicórnio) no canto superior direito.
Este módulo se concentrará nas etapas necessárias para criar os componentes de nuvem da API, mas se estiver interessado em como o código do navegador funciona para chamar essa API, você poderá inspecionar o arquivo ride.js do site. Neste caso, a aplicação usa o método ajax() do jQuery para fazer a solicitação remota.
Tempo para a conclusão
15 minutos
Serviços usados
Implementação
-
Criar uma nova API REST
- No console do Amazon API Gateway, selecione APIs no painel de navegação esquerdo.
- Em API REST, escolha Compilar.
- Na seção Escolha o protocolo, selecione REST.
- Na seção Criar nova API, selecione API nova.
- Na seção Configurações, insira WildRydes como Nome da API e selecione Otimizado para a borda no menu suspenso Tipo de endpoint.
Observação: use os tipos de endpoint otimizado para borda para serviços públicos acessados da Internet. Normalmente, os endpoints regionais são usados para APIs acessadas principalmente de dentro da mesma região da AWS. - Escolha Criar API.
-
Criar autorizador
Você deve criar um Autorizador de grupos de usuários do Amazon Cognito. O Amazon API Gateway usa tokens Web JSON (JWT), que são retornados pelo grupo de usuários do Amazon Cognito (criado no Módulo 2) para autenticar as chamadas de API. Nesta seção, criaremos um Autorizador para a API, para que possamos usar o grupo de usuários.
Use as seguintes etapas para configurar o Autorizador no console do Amazon API Gateway:
- No painel de navegação esquerdo da API WildRydes que você acabou de criar, selecione Autorizadores.
- Selecione Criar novo autorizador.
- Insira WildRydes no campo Nome do Autorizador.
- Selecione Cognito como o Tipo.
- Em Grupo de usuários do Cognito, no menu suspenso Região, selecione a mesma região que você usou no restante do tutorial. Insira WildRydes no campo de nome do Grupo de usuários do Cognito.
- Insira Autorização para a Origem do token.
- Escolha Criar.
- Para verificar a configuração do autorizador, selecione Testar.
- Cole o Token de Autorização copiado da página da Web ride.html na seção Validar sua implementação do Módulo 2 no campo Autorização (cabeçalho) e verifique se o código de resposta do status HTTP é 200.
-
Criar um novo recurso e método
Nesta seção, você criará um novo recurso na sua API. Então, crie um método POST para esse recurso e configure-o para usar uma integração de proxy do Lambda baseada na função RequestUnicorn criada na primeira etapa deste módulo.
- No painel de navegação esquerdo da sua API WildRydes, selecione Recursos.
- No menu suspenso Ações, selecione Criar recurso.
- Insira ride como o Nome do recurso, que criará automaticamente o Caminho do recurso /ride.
- Marque a caixa de seleção Ativar CORS do API Gateway.
- Escolha Criar recurso.
- Com o recurso /ride recém-criado selecionado, na lista suspensa Ações, selecione Criar método.
- Selecione POST na nova lista suspensa que aparece em OPÇÕES e, em seguida, selecione o ícone de marca de seleção.
- Selecione Função Lambda como Tipo de integração.
- Marque a caixa de seleção Usar a integração do Lambda Proxy.
- Selecione a mesma região que você usou durante todo o tutorial para a Região do Lambda.
- Insira RequestUnicorn para a Função do Lambda.
- Escolha Salvar.
Observação: se você receber um erro informando que a função não existe, verifique se a região selecionada corresponde à que você usou no módulo anterior. - Quando for solicitado a conceder permissão para o Amazon API Gateway invocar sua função, selecione OK.
- Selecione o cartão Solicitação de método.
- Selecione o ícone de lápis ao lado de Autorização.
- Selecione o autorizador do grupo de usuários WildRydes do Cognito na lista vertical e clique no ícone de marca de seleção.
-
Implantar a API
Nesta seção, você implantará sua API pelo console do Amazon API Gateway.
- Na lista suspensa Ações, selecione Implantar API.
- Selecione [Novo estágio] na lista suspensa Estágio de implantação.
- Insira prod como o Nome do estágio.
- Escolha Implantar.
- Copie o URL de invocação. Você vai usá-lo na próxima seção.
-
Atualizar a configuração do site
Nesta etapa, você atualizará o arquivo /js/config.js na implantação do site para incluir o URL de invocação do estágio que você acabou de criar. Você copiará o URL de invocação diretamente da parte superior da página do editor de estágio no console do Amazon API Gateway e colá-lo no chave invokeUrl do arquivo config.js do seu site. Seu arquivo de configuração ainda conterá as atualizações feitas no módulo anterior para seu UserPoolID, UserPoolClientID e região do Amazon Cognito.
- Em sua máquina local, navegue até a pasta js e abra o arquivo config.js em um editor de texto de sua escolha
- Cole o URL de invocação que você copiou do console do Amazon API Gateway na seção anterior no valor invokeUrl do arquivo config.js.
- Salve o arquivo.
Veja o exemplo a seguir de um arquivo config.js completo. Os valores reais do seu arquivo serão diferentes.
window._config = { cognito: { userPoolId: 'us-west-2_uXboG5pAb', // e.g. us-east-2_uXboG5pAb userPoolClientId: '25ddkmj4v6hfsfvruhpfi7n4hv', // e.g. 25ddkmj4v6hfsfvruhpfi7n4hv region: 'us-west-2' // e.g. us-east-2 }, api: { invokeUrl: 'https://rc7nyt4tql.execute-api.us-west-2.amazonaws.com/prod' // e.g. https://rc7nyt4tql.execute-api.us-west-2.amazonaws.com/prod, } };
3. Adicione, confirme e envie o arquivo config.js atualizado para seu repositório Git para que ele seja implantado automaticamente no console do Amplify.
$ git add . $ git commit -m "new_configuration" $ git push
-
Validar sua implementação
Observação: é possível que você veja um atraso entre o momento em que é feita a atualização do arquivo config.js no bucket do S3 e o momento em que o conteúdo atualizado fica visível no navegador. Você também deve limpar o cache do navegador antes de executar as etapas a seguir.
- Atualize a versão do ArcGIS JS de 4.3 para 4.6 (as versões mais recentes não funcionarão neste tutorial) no arquivo ride.html como:
<script src="https://js.arcgis.com/4.6/"></script> <link rel="stylesheet" href="https://js.arcgis.com/4.6/esri/css/main.css">
Um exemplo de um arquivo ride.html concluído pode ser visto abaixo. Observe que alguns valores em seu arquivo podem ser diferentes.
<div id="noApiMessage" class="configMessage" style="display: none;"> <div class="backdrop"></div> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Successfully Authenticated!</h3> </div> <div class="panel-body"> <p>This page is not functional yet because there is no API invoke URL configured in <a href="/js/config.js">/js/config.js</a>. You'll configure this in Module 3.</p> <p>In the meantime, if you'd like to test the Amazon Cognito user pool authorizer for your API, use the auth token below:</p> <textarea class="authToken"></textarea> </div> </div> </div> <div id="noCognitoMessage" class="configMessage" style="display: none;"> <div class="backdrop"></div> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">No Cognito User Pool Configured</h3> </div> <div class="panel-body"> <p>There is no user pool configured in <a href="/js/config.js">/js/config.js</a>. You'll configure this in Module 2 of the workshop.</p> </div> </div> </div> <div id="main"> <div id="map"> </div> </div> <div id="authTokenModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="authToken"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">Your Auth Token</h4> </div> <div class="modal-body"> <textarea class="authToken"></textarea> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </div> </div> </div> <script src="js/vendor/jquery-3.1.0.js"></script> <script src="js/vendor/bootstrap.min.js"></script> <script src="js/vendor/aws-cognito-sdk.min.js"></script> <script src="js/vendor/amazon-cognito-identity.min.js"></script> <script src="https://js.arcgis.com/4.6/"></script> <script src="js/config.js"></script> <script src="js/cognito-auth.js"></script> <script src="js/esri-map.js"></script> <script src="js/ride.js"></script> </body> </html>
2. Salve o arquivo modificado. Adicione, confirme e envie por git para seu repositório Git para que seja implantado automaticamente no console do AWS Amplify.
3. Acesse /ride.html no domínio do seu site.
4. Se você for redirecionado para a página de entrada do ArcGIS, entre com as credenciais do usuário que você criou anteriormente na seção Introdução como um pré-requisito deste tutorial.
5. Depois que o mapa for carregado, clique em qualquer lugar dele para definir um local de partida.
6. Selecione Solicitar Unicorn. Você verá uma notificação na barra lateral direita informando que um unicórnio está a caminho e, então, verá o ícone de um unicórnio voando até o local de partida.
- Atualize a versão do ArcGIS JS de 4.3 para 4.6 (as versões mais recentes não funcionarão neste tutorial) no arquivo ride.html como: