AWS NodeJS App 09 – API Gateway e Lambda Functions

Nesse tutorial vamos utilizar o serviço FAAS da AWS chamado Lambda Functions para publicar um código que consulte nosso banco de dados DynamoDB na tabela de produtos e exporte os dados em formato JSON. Em seguida vamos utilizar a API Gateway para publicar o código da função Lambda no formato de uma API RESTfull.

Como primeiro passo vamos acessar o console da AWS e entrar na opção Lambda. E em seguida devemos clicar no botão Create Function.

Agora vamos iniciar o processo de criação da nossa função o primeiro passo será escolher o template, vamos selecionar a opção Author from Scratch.

Em seguida informe o nome da função Lambda, o runtime e selecione a opção para criação de uma ROLE no IAM com as permissões básicas para a execução do código, em seguida vamos precisar modificar essa nova Role criada para permitir acesso ao DynamoDB. Finalize o processo clicando no botão Create Function.

Em seguida será apresentada a seguinte tela, confirmando a criação da função lambda.

Se continuarmos rolando a tela para baixo vamos observar que o editor de código é apresentado na tela, permitindo a alteração online da função.

Modifique o código da função conforme o exemplo a seguir e clique no botão Save.

exports.handler = async (event, context, callback) => {
    // TODO implement
    var AWS = require('aws-sdk');
    AWS.config.update({region: 'us-east-2'});
    var ddb = new AWS.DynamoDB();
    
    var params = {
      TableName: 'product'
    };

    let result = await ddb.scan(params).promise();
    var list = new Array();
    result.Items.forEach(function(element, index, array) {
      list.push({name : element.name.S, price: element.price.N});
    });
    
    var response = {
        "statusCode": 200,
        "body": JSON.stringify(list),
    };
    callback(null, response);
};

Antes de tentar executar nossa função, precisamos dar permissão a ela para acessar o DynamoDB. Para isso vá até o console e acesse o IAM, clique em Role e busque pela Role que inicia com o nome da nossa função Lambda. Clique no nome dela para editar.

Em seguida clique no botão Attach Policies.

Na tela seguinte, clique no botão Create Policy.

Na tela de criação de uma nova Police, selecione o produto DynamoDB, e na opção de Actions: All DynamoDB Actions

Rolando a tela para baixo, clique em Resources, e selecione Any para todos os itens exceto a opção Table, clique em Add ARN.

Informe a região do seu DynamoDB e o nome da Tabela, você pode encontrar essas informações acessando o próprio DynamoDB em outra janela do console AWS no navegador. Confirme no botão ADD, e em seguida clique em Review Policy.

Informe o nome da policy, e confirme no botão Create Policy logo a baixo.

Agora que a nova policy foi criada, podemos retornar a tela anterior e utilizando o botão de atualização, e em seguida a busca, encontrar nossa nova policy e vinculá-la a role.

Retornando ao editor de funções Lambda, clique no botão Test.

Em seguida, informe um nome para o evento de teste e retire os parâmetros do template de teste, deixando apenas as chaves. Confirme no botão create.

Retornando para a tela do editor, clique no botão de Test, você terá o retorno de que a function foi executada mas que o tempo limite excedeu, vamos modificar esse limite.

Na mesma tela do editor, role a tela até as configurações e aumente o tempo máximo da execução par 10 segundos e clique no botão salvar.

Se reexecutarmos o teste, vamos verificar que agora nossa função Lambda é executada com sucesso retornando os dados do DynamoDB.

O próximo passo é externalizar o acesso a nossa API através do API Gateway, retorne até o menu principal procure pelo API Gateway e selecione a opção Get Started.

Na próxima tela selecione a opção REST, New API, informe o nome da API e clique na opção Create API.

Em seguida o console irá apresentar a tela de edição do API Gateway, vamos criar um novo recurso

Para isso clique no botão Actions, selecione Create Resource, informe o nome e selecione a opção para habilitar a opção CORS nesse endpoint. Confirme no botão Create Resource.

Agora que nosso recurso foi criado, vamos criar um novo método dentro do recurso.

Clique no menu Actions -> create Method.

Selecione o verbo GET e confirme no botão ao lado.

Agora selecione o verbo GET e configure para que uma função Lambda seja executada, e informe o nome da função, confirmando no botão Save.

Confirme a solicitação de autorização para o API Gateway executar a função lambda.

A próxima, tela será apresentada, confirmando a criação da relação entre a função Lambda e a API Gateway. Clique no link TEST para executar uma chamada de teste da API.

Como não temos nenhum parâmetro de entrada, deixe todos os campos em branco e clique no botão Test.

O resultado da chamada da API deverá ser apresentado em uma caixa ao lado.

Para que possamos testar o acesso externo a nossa API, precisamos realizar o processo de publicação de sua versão. Para isso selecione o recurso raiz da API e no menu Actions a opção Deploy API.

Informe o nome da versão Stage e confirme no botão deploy.

A URL final da API será apresentada, copie o endereço e adicione no final /products e o resultado será a chamada da API a partir de qualquer aplicação web.