Friday, February 21, 2020

AWS: API Gateway e Lambda: parte 2

Na primeira parte deste artigo conhecemos o serviço Lambda da AWS. Com o AWS Lambda podemos criar funções que são disparadas por eventos diversos, sendo que toda a implementação de infraestrutura fica a cargo do cloud provider (neste caso AWS), assim podemos focar totalmente no código ao inves de questões relacionadas a servidores, etc. Também criamos uma função simples por linha de comando.


Neste artigo vamos explorar um caso de uso muito comum que é expor a função Lambda através de um recurso REST, para tanto, utilizaremos o serviço AWS API Gateway.


AWS API Gateway

Esse serviço permite criar recursos acessíveis via HTTP que aderem ao prtocolo REST, habilitando comunicação client-server usando os métodos padrões GET, PUT, POST, DELETE e PATCH.

O diagrama abaixo ilustra como a API Gateway pode integrar diversos clientes aos diversos serviços de back-end em um ambiente totalmente serverless:



Chamando a função Lambda via API Gateway

Passo 1: no console da API Gateway, encontre a seção REST API e clique em build:



Passo 2: na página seguinte:
  • embaixo de Choose the Protocol, escolha REST
  • embaixo de Create New API, escolha New API
  • em Settings, dê um nome a sua API (neste caso my-api)



Passso 3: na página seguinte, no botão menu Action, clique em Create Method:



Passo 4: na seção Resources, clique na combo box e escolha GET:



Passo 5: clique no método GET e na seção à direita:
  • em integration type, marque Lambda Function, o que significa que esse recurso irá chamar uma função Lambda
  • marque o check-box Use Lambda Proxy integration. Quando essa opção é marcada, todo envolope HTTP que chega à API Gateway é repassado integralmente à função Lambda sob a forma de um JSON. (Se esta opção não for marcada, o desenvolvedor então deve fazer o mapeamento customizado entre o input da API Gateway e o input da função Lambda)
  • em lambda function, digite o nome da função que será chamada e clique em Save.


Vai aparecer uma pop-up dizendo que será criada uma permissão para este recurso invocar a função Lambda, clique OK.


Passo 6: no botão menu Action clique na opção Deploy API. Vai aparecer uma pop up requisitando um stage para esse deployment (coloque stage ou test):


Em stages, clique no nome do stage que você criou. O metodo já está publicado, repare na invoke url:


Copie e cole essa url em uma nova aba do browser, ele vai chamar a função Lambda e exibir o valor que ela retornar:


Integração entre API Gateway e a função Lambda

Existem duas formas de configurar como a API Gateway vai repassar os dados do request para a função Lambda:


  1. Lambda Proxy Integration: é a opção mais simples, todo envelope HTTP recebido pela API Gateway é convertido em um stream de JSON e repassado integralmente ao Lambda
  2. Lambda Proxy Non-Integration (ou AWS): a função Lambda recebe um input diferente do envelope HTTP (geralmente um objeto do modelo de negócios), neste caso antes de chamar a função lambda, deve-se fazer um mapeamento entre o envelope HTTP e o modelo de dados requerido pela função Lmabda.
Exemplo de uma requisição HTTP no formato JSON repassada integralmente pela API Gateway à função Lambda quando se usa a opção Lambda Proxy Integration:

{
 "resource": "Resource path",
 "path": "Path parameter",
 "httpMethod": "Incoming request's method name"
 "headers": {String containing incoming request headers}
 "multiValueHeaders": {List of strings containing incoming request headers}
 "queryStringParameters": {query string parameters }
 "multiValueQueryStringParameters": {List of query string parameters}
 "pathParameters": {path parameters}
 "stageVariables": {Applicable stage variables}
 "requestContext": {Request context, including authorizer-returned key-value pairs}
 "body": "A JSON string of the request payload."
 "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
}

"Quem bebe dessa água vai ter sede de novo. Mas aquele que beber da água que eu vou dar, esse nunca mais terá sede. E a água que eu lhe darei, vai se tornar dentro dele uma fonte de água que jorra para a vida eterna."

Jo 4:13-14

       


No comments:

Post a Comment