1
resposta

Erro ao criar pasta

Bom dia, Estou utilizando o Airflow via Docker e surge o erro : OSError while attempting to symlink the latest log directory Alguma ideia do que pode ser? Com o python usando o os.mkdir funciona perfeitamente, mas via DAG não há a criação da pasta.

1 resposta

Olá, tudo bem com você?

Desculpe pela demora em dar um retorno.

Vou partir do pressuposto de que você instalou o Airflow no Docker de acordo com o Alura+ em "Instalando o Airflow no Docker". Está tudo bem?

Para solucionar isso, precisamos nos lembrar do seguinte detalhe: o Docker não persiste dados a menos que você crie um volume, conforme demonstrado na documentação e também explicado no curso "Docker: criando e gerenciando containers".

Portanto, é necessário criar esse volume para a pasta que você deseja dentro do Docker, utilizando o Airflow.

Por exemplo, suponhamos que eu precise criar uma pasta chamada "duvida_forum" dentro de uma pasta chamada "teste" no meu container. Quais passos deveriam ser adotados?

  • Modificar o docker-compose.yaml, relacionando os volumes. Vamos ao nosso arquivo e adicionamos a seguinte linha:
volumes:
    - ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
    - ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
    - ${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config
    - ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
    - ${AIRFLOW_PROJ_DIR:-.}/teste:/opt/airflow/teste  # Aqui estamos criando a relação entre a pasta "teste" do nosso computador e a pasta dentro do container.
  • Criar a pasta "teste" em nosso computador.

Se você seguiu o Alura+ mencionado acima, basta executar mkdir teste no mesmo local onde estão as pastas "dags", "logs", "config" e "plugins".

  • Subir novamente o container utilizando o comando docker compose up.

  • Criar o DAG dentro da pasta "dags" do nosso computador para realizar a criação da pasta. Vou deixar como exemplo o DAG que eu criei:

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2023, 9, 7),  # COLOQUE SUA DATA CORRESPONDENTE.
}

dag = DAG(
    'create_test_folder',
    default_args=default_args,
    description='A simple tutorial DAG',
    schedule_interval=timedelta(days=1),
)

t1 = BashOperator(
    task_id='create_folder',
    bash_command='mkdir -p /opt/airflow/teste/duvida_forum',
    dag=dag,
)

Pronto. Após a execução do DAG acima, a interface do Airflow criará uma pasta chamada "duvida_forum" dentro da pasta "teste" do seu computador.

Qualquer dúvida só chamar.

Bons estudos.