Adicionando domínio customizado a uma Lambda com o API Gateway

ricmello

Ricardo Mello

Posted on March 27, 2024

Adicionando domínio customizado a uma Lambda com o API Gateway

Já tem tempos que eu não escrevo então me desculpa porque perdi um pouco o jeito, mas hoje eu vou compartilhar algo super simples que eu nunca tinha feito: adicionar um domínio customizado pra uma AWS Lambda.

Se você nunca criou uma lambda, te recomendo esse post aqui que eu acabei de criar.

Agora, nós vamos adicionar um domínio customizado pra ela.

Mas por que usar um domínio customizado?

E por que não usar? Parece que um gato sobe no teclado sempre que a gente gera um link de uma lambda. Links como https://dz4y7rvv2az4iopdqzvgneefhy0jdfii.lambda-url.us-east-1.on.aws ou https://lh4j4sdpmljdcrcr34gqc6ddni0qvugg.lambda-url.us-east-1.on.aws são gerados e ficam beeem feios quando usados no frontend.

Plus, se você precisar apontar o seu link pra qualquer outro lugar (outra lambda, uma API, outra cloud...) será muito mais tranquilo e você não vai ter que atualizar a url da lambda em milhares de lugares onde ela pode estar sendo utilizada.

API Gateway

Pra atingir o nosso objetivo, vamos usar o API Gateway. Esse cara consegue organizar todas as nossas lambdas e criar mapeamentos pra elas definindo paths específicos. Isso te permite usar a lambda nomesuperultragigante.lambda-url.us-east-1.on.aws como um endpoint comum api.meuwebsite.com/v1/lambda.

Criando a API no API Gateway

Pra começar, vamos criar a API que vai mapear a lambda em um endpoint no api gateway. Para isso, ainda na tela do API Gateway, vá em APIs > Create API > REST API. Eu vou usar o nome faker-api pra esse tutorial:

Screenshot da tela de criação de API

Com a API criada, você deve ver essa tela:

Screenshot da tela de edição/configuração da API

Resources

No API Gateway você pode realmente brincar de criação de API. Em create resources você pode ir definindo os paths por exemplo /v1, depois /v1/domain até chegar em /v1/domain/endpoint. É uma ferramenta muito poderosa que te permite mapear todas as rotas e integrar com lambdas, apis, ou qualquer outro serviço.

No nosso caso, eu vou tentar manter mais simples e criar um único resource chamado persons. Para isso, vá em Create Resource, dê o nome persons pra ele, selecione a opção de CORS e clique em Create Resource.

Screenshot da criação de Resource

Com o endpoint persons selecionado, vá em Create method e preencha as seguintes infos:

  • Method type: GET
  • Integration type: Lambda function
  • Em lambda function: Selecione a nossa lambda de teste

Screenshot da criação de api pra lambda

Depois de clicar em Create method, o resultado deve ser esse aqui:

Screenshot da página com o método de persons criado

Clique em Deploy API e crie um stage chamado development:

Screenshot da tela de criação de stage

Você deve ser redirecionado pra essa tela com o stage criado, e mais uma URL gigante:

Screenshot da página de stage development

Criando o domínio

Pra criar o nosso domínio, vamos no painel do API Gateway -> Custom domain names -> Create.

Create custom domain

Antes de começar, na configuração do endpoint, você vai precisar adicionar um certificado pro domínio que você deseja criar. Clique em Create a new ACM certificate e uma nova aba se abrirá.

Na tela do Certificate Manager, clique em Request a certificate -> Request a public certificate.

Na tela que vai se abrir, insira o domínio que você vai usar pra solicitar o certificado. No meu caso é o faker-api.ricmello.com, mas você pode adicionar mais de um domínio ou um wildcard como *.ricmello.com pra não precisar criar um certificado pra cada subdomínio.

O método de validação recomendado pela própria AWS é o de DNS.

Screenshot da tela de requisição de certificado

Clique em request e depois view certificate.

Caso você já use o Route53, basta clicar em Create records in Route 53 e os registros serão criados automaticamente pra validação do domínio. Ou caso você use outro serviço é só criar um novo registro do tipo CNAME e colar os valores que vão aparecer pra você como no print abaixo.

Screenshot da página com o CNAME a ser criado

Depois de configurar o DNS, o seu certificado vai estar disponível, mas isso pode demorar um pouco. Você pode usar a ferramenta whatsmydns pra ver se a sua configuração tá certa e aguardar até o certificado ser emitido como esse aqui:

Screenshot da tela de certificado com o status emitido

Agora podemos voltar na criação do domínio no API Gateway e selecionar o certificado criado. No nome do domínio eu preenchi o mesmo faker-api.ricmello.com que eu usei pro certificado:

Screenshot da tela de criação do API Gateway com o certificado selecionado

Clique em Create domain name para salvar e volte pra tela de configuração de domínio. Você deve criar um CNAME apontando o seu domínio pro API Gateway domain name, que no meu exemplo é o d-4ip5ycuy62.execute-api.us-east-1.amazonaws.com.

Screenshot da configuração do nome de domínio customizado

Associando o domínio

Na tela de Custom domain names, vá em API mappings > Configure API mappings > Add new mapping, e configure um mapeamento selecionando a sua API e o stage criado.

Screenshot da tela de configuração de API com a lambda e o stage development selecionados

Feito! O seu domínio vai apontar pro api gateway e você vai conseguir utilizar a lambda pelo mapeamento como na imagem abaixo.

Imagem da resposta da lambda utilizando o domínio criado


E aí, curtiu? Tem alguma dúvida? Se tiver qualquer coisa que eu possa fazer pra tornar esse artigo melhor, pode reclamar, elogiar ou sugerir outro artigo. Manda ver nos comentários porque feedbacks são sempre super bem vindos.

💖 💪 🙅 🚩
ricmello
Ricardo Mello

Posted on March 27, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related