Recursos utilizados:
- prefect orion
- prefect agent
- postgres -> BD usado pelo server do prefect
- minio -> simula repositório remoto s3 da AWS
Etapas:
make docker
para construir imagem do server prefect orion- Utiliza o arquivo
Dockerfile
- Utiliza o arquivo
make docker-agent
para construir imagem do prefect agent- Utiliza o arquivo
Dockerfile-agent
- Nele podem ser instalados os requisitos, copiando o
requirements.txt
para o container
- Utiliza o arquivo
podman-compose up orion minio
para subir container do servidor e do minio- Acessar
http://<IP>:9000
. Entrar comminioadmin
como usuário e senha.- Criar um bucket chamado
prefect-flows
para armazenar os workflows - Clicar em Access Keys para criar chaves de acesso
- Copiar chave e segredo
- Acessar
http://<IP>:42000
- Clicar em Blocks, e adicionar um bloco de Remote File System. Dar um nome a ele e lembrar que esse nome é usado na hora de criar um deployment
- No campo Basepath, colocar
s3://prefect-flows
- O campo de Settings deve seguir a estrutura:
{ "key": "CHAVE", "secret": "SEGREDO", "client_kwargs": { "endpoint_url": "http://minio:9000" } }
- Criar um bucket chamado
podman-compose up agent
para subir o agente que cuida das queues- No docker-compose é possível alterar o nome da queue no entrypoint
podman-compose run cli
para gerar o deployment- Navegar até o diretório do workflow
- Rodar
python workflow.py
. Esse código deve conter uma estrutura parecida com:if __name__ == "__main__": ... remote_file_system_block = RemoteFileSystem.load("block-name") deployment = Deployment.build_from_flow(flow=flow_name, name=deployment_name, work_queue_name=queue_name, parameters={"param1": value1}, storage=remote_file_system_block) deployment.apply()
- Acessar
http://<IP>:42000
e verificar o deployment- Pode-se então rodar, agendar e configurar os deployments gerados
Estrutura:
- flows: pasta contendo códigos dos workflows
- files: pasta onde são salvos os arquivos gerados pelos workflows.
- Importante que nos códigos os arquivos estejam sendo salvos no diretório
/files
- Importante que nos códigos os arquivos estejam sendo salvos no diretório
OBS:
- É possível modificar a imagem do agente (Dockerfile-agent) para que o código rode com todos os requisitos instalados
- Ela é usada tanto no agent como no cli usado para gerar os deployments
- Para códigos que utilizam virtual_env com python 2, para rodar deve-se instalar o python 2 no container do agente e criar também nele um venv para a aplicação. Para isso, inserir no docker-compose.yaml, ou criar no Dockerfile do agente um venv e instalar os requisitos.
- No docker-compose.yaml:
command: bash -c "apt-get install -y python2.7 && pip install prefect_shell && virtualenv venv --python=2.7 && prefect agent start -q default"
- No Dockerfile:
RUN virtualenv venv --python=2.7 && venv/bin/activate && pip install -r requirements.txt
- O código python do flow deve seguir a seguinte estrutura para rodar a aplicação:
@flow def example_shell_loop(): cmd = "python arquivo.py" shell_run_command(command=cmd, return_all=True, helper_command = ". /opt/prefect/venv/bin/activate")
Mais infos: https://github.com/rpeden/prefect-docker-compose