AWS — Criando função Lambda que converte uma Url em PDF

Aprenda a criar uma API Gateway na AWS para realizar conversões de URLs para PDFs de forma externa

AWS — Criando função Lambda que converte uma Url em PDF

Olá Gente!

Existem muitos sites que convertem sites em PDF, porem, ou são pagos ou não funcionam bem.

Então iremos criar uma função Lambda na AWS que faz a conversão e iremos configurar a API Gateway para fazermos as conversões externamente.

Função Lambda

Acesse o painel de funções lambda:

https://us-east-1.console.aws.amazon.com/lambda/home?region=us-east-1#/functions

Clique em “Criar Função” e na janela exibida selecione “Node.js 16.x”:

Após isto, clique em “Criar Função”:

Após a função ser criada clique em “Configuração”:

Em “Configurações Gerais” clique em “Editar”:

Altere o campo “Memória” para 512 mb e o campo “Tempo Limite” para 1 minuto, e após clique em “Salvar”:

Em “Variáveis de ambiente” clique em “Editar”:

Clique em “Adicionar variáveis de ambiente” e preencha com:

  • Chave: FONTCONFIG_PATH
  • Valor: /opt/etc/fonts

Após clique em “Salvar”.

Volte para “Código”:

Desça a janela até “Camadas” e clique em “Adicionar Camada”:

Na janela seguinte, selecione “Especifique um ARN” e preencha com:

arn:aws:lambda:us-east-1:347599033421:layer:wkhtmltopdf-0_12_6:1

Após clique em “Verificar” e depois em “Adicionar”:

Agora precisamos subir o repositório.

Para isto, acesse o repositório abaixo e faça o download do arquivo “lambda_url_to_pdf.zip”:

Releases · cmacetko/lambda_url_to_pdf
Contribute to cmacetko/lambda_url_to_pdf development by creating an account on GitHub.

Volte ao Lambda e clique em “Fazer upload de” e selecione “Arquivo .zip”:

Agora iremos configurar um teste, para isto, clique no botão “Test”.

Na janela, preencha o “Nome do Evento” como “Teste” e preencha o Json abaixo e clique em “Salvar”:

{ 
 "url": "https://pt.lipsum.com/feed/html", 
 "options": { 
   "page-size": "A4", 
   "margin-bottom": 10, 
   "margin-left": 10, 
   "margin-top": 10, 
   "margin-right": 10, 
   "viewport-size": "1280x1024", 
   "image-quality": 100 
 } 
}

E agora clique em “Test” novamente, isto ira iniciar a execução do código:

Será exibido o arquivo gerado indicando que teve sucesso:

API Gateway

Agora iremos criar uma API para permitir a comunicação externa com a função lambda.

Acesse o módulo de API Gateway:

https://us-east-1.console.aws.amazon.com/apigateway/home?region=us-east-1#/apis

Clique em “Criar API” e depois clique em “Compilar” em “API REST”:

Nesta janela, preencha um nome para sua API e mantenha os outros campos sem alteração, e depois clique em “Criar API”:

Em “Recursos” clique em “Ações” e depois em “Criar Recurso”:

Preencha o “Nome do recurso” e o “Caminho do recurso” com “url_to_pdf” e clique em “Criar Recurso”:

Clique em “Ações” e depois em “Criar Método”, selecione “POST” e clique no “OK”:

Agora iremos configurar o que será feito ao fazer um “POST” para “url_to_pdf”.

Selecione “Função Lambda” e preencha o nome da função que criamos no campo “Função Lambda”, e depois clique em “Salvar”:

Será exibido um alerta de permissão, clique em “OK”:

Agora precisamos publicar a API, clique em “Ações” e depois em “Implantar API”:

No campo “Estágio de implantação” selecione “Nome Estágio”, preencha com o nome “prod” e clique em “Implante”:

Será exibido uma janela com o campo “Invocar URL”, esta é a URL da API:

Agora basta fazermos um POST para “Invocar URL” + “Método”, como neste exemplo:

https://oidx9cyjac.execute-api.us-east-1.amazonaws.com/prod/url_to_pdf

E no corpo da requisição, preenchamos com:

{ 
 "url": "https://pt.lipsum.com/feed/html", 
 "options": { 
 "page-size": "A4", 
 "margin-bottom": 10, 
 "margin-left": 10, 
 "margin-top": 10, 
 "margin-right": 10, 
 "viewport-size": "1280x1024", 
 "image-quality": 100 
 } 
}

Aqui precisamos configurar o campo “url“ com a url pública do PDF.

No objeto “options” podemos aplicar algumas configurações que mudam a forma como o PDF será gerado.

Em caso de Sucesso, iremos receber de resposta um Json semelhante ao abaixo:

{ 
"statusCode": 200, 
"body":{ 
"Nome": "d025d412–86ca-4c2b-b7d9–3edfc58f15fd.pdf", 
"Pdf": "XXXXX" 
} 
}

Em caso de Falha, iremos receber de resposta um Json semelhante ao abaixo:

{ 
"statusCode": 500, 
"body":{ 
"Msg": "Url nao informada" 
} 
}

Onde o PDF é retornado em Base64 no campo “body/Pdf”.

Finalizando este artigo, pessoal! 🛑

Até mais! 👋