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

Paloma Macetko
5 min readAug 5, 2023

--

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”:

https://github.com/cmacetko/lambda_url_to_pdf/releases

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! 👋

--

--

Paloma Macetko
Paloma Macetko

Written by Paloma Macetko

🏳️‍🌈 Mulher Trans 💻 Desenvolvedora Web

No responses yet