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:
Com a API criada, você deve ver essa tela:
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.
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
Depois de clicar em Create method, o resultado deve ser esse aqui:
Clique em Deploy API e crie um stage chamado development
:
Você deve ser redirecionado pra essa tela com o stage criado, e mais uma URL gigante:
Criando o domínio
Pra criar o nosso domínio, vamos no painel do API Gateway -> Custom domain names -> Create.
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.
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.
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:
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:
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
.
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.
Feito! O seu domínio vai apontar pro api gateway e você vai conseguir utilizar a lambda pelo mapeamento como na imagem abaixo.
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.
Top comments (1)
O meu quando faco uma chamada post pelo endpoint da api esta dando certo, mas como tento pelo dominio personalizado nao esta dando certo, esta dando 403, oq pode ser?