Skip to content

Exemplo de aplicação usando LocalStack, bucket S3 e uma lambda. Assim que um arquivo html é carregado no bucket a lambda é acionada e o arquivo e convertido para pdf.

Notifications You must be signed in to change notification settings

tadelle/convert_html_to_pdf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Conversão automática html para pdf

Aqui criamos um bucket S3 e uma lambda acionada por um trigger do bucket. Toda vez que um arquivo com característica específicas for criado ele acionará uma lambda que realizará a conversão do arquivo html para arquivo pdf. O novo arquivo será colocado no bucket com o prefixo pdf/.

Montando o ambiente de desenvolvimento

Pré-requisitos

Para esse projeto vamos precisar:

  • docker e docker-compose;
  • terraform 1.6+
  • python 3.11+
  • aws-cli-v2

1 - Clone o projeto:

git clone https://github.com/tadelle/convert_html_to_pdf.git
cd convert_html_to_pdf

2 - Monte um ambiente virtual:

cd src
python -m venv venv

3 - Ative o ambiente virtual

Linux

source venv/bin/activate

Windows - Powershell

& .\venv\Scripts\activate

4 - Instale a dependências

pip install -r requirements.txt

5 - Instale o terraform-local

pip install terraform-local

6 - Inicie o container do LocalStack usando docker-compose

cd ../localstack/
docker compose up -d

7 - Inicie o Terraform

cd ../infra
tflocal init

Publicando

8 - Prepare o pacote da lambda para ser publicado

Para preparar o pacote devemos montar todas as dependências da nossa lambda. Podemos fazer isso usando o comando abaixo, estando na pasta /src/.

pip3 install -r requirements.txt -t package --upgrade

As dependências serão montadas na pasta package. Devemos compactar todo o conteúdo dessa pasta incluindo o nosso código fonte usando o formato zip.

Podemos usar qualquer método para produzir o arquivo zip, mas o importante é que o arquivo main.py, assim como a pasta service estejam na raiz. As pastas da biblioteca ficam no mesmo nível que o arquivo main. Como mostrado na imagem abaixo.

Estrutura do arquivo zip

Para facilitar montei os arquivos de script publicar.sh e publicar.ps1 que fazem tudo que foi informado acima e ainda faz a publicação e apaga a pasta com as dependências, pois não precisaremos mais dela.

No caso do Windows é um pouco mais complicado, pois como a aplicação é executada em uma imagem Linux, precisamos instalar algumas bibliotecas da plataforma Linux. Você pode ver isso no arquivo publicar.ps1 na segunda e terceira linha.

8.1 - Monte o arquivo .zip e realize a publicação

Linux (é necessário ter o zip instalado)

cd ../src
./publicar.sh

Windows - Powershell

cd ..\src
.\publicar.ps1

9 - Verifique se o bucket e a lambda foram criados corretamente

aws s3 ls --endpoint-url=http://localhost:4566

Resultado esperado:

2024-01-31 21:59:52 my-bucket-test
aws lambda list-functions --endpoint-url=http://localhost:4566

Será exibida a lambda e suas propriedades. Para sair pressione q.

{
    "Functions": [
        {
            "FunctionName": "lambda_convert",
            "FunctionArn": "arn:aws:lambda:sa-east-1:000000000000:function:lambda_convert",
            "Runtime": "python3.11",

            ...

            "SnapStart": {
                "ApplyOn": "None",
                "OptimizationStatus": "Off"
            }
        }
    ]
}

Verifique que até o momento o bucket está vazio

aws s3 ls my-bucket-test --endpoint-url=http://localhost:4566

10 - Fazendo upload do arquivo html para o bucket

aws s3 cp exemplo.html s3://my-bucket-test/html/ --endpoint-url=http://localhost:4566

11 - Verificando o bucket

Se tudo deu certo você verá dois prefixos (como se fossem pastas): html e pdf.

aws s3 ls my-bucket-test --endpoint-url=http://localhost:4566
                   PRE html/
                   PRE pdf/

12 - Vamos fazer download do arquivo pdf gerado.

aws s3 cp s3://my-bucket-test/pdf/exemplo.pdf exemplo.pdf --endpoint-url=http://localhost:4566

About

Exemplo de aplicação usando LocalStack, bucket S3 e uma lambda. Assim que um arquivo html é carregado no bucket a lambda é acionada e o arquivo e convertido para pdf.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published