Como alterar o fuso horário de um DAG no Amazon MWAA - Amazon Managed Workflows for Apache Airflow

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Como alterar o fuso horário de um DAG no Amazon MWAA

Por padrão, o Apache Airflow programa seu gráfico acíclico direcionado (DAG) em UTC+0. As etapas a seguir mostram como é possível alterar o fuso horário no qual o Amazon MWAA executa seus DAGs com o Pendulum. Como opção, este tópico demonstra como é possível criar um plug-in personalizado para alterar o fuso horário dos logs do Apache Airflow do seu ambiente.

Version (Versão)

  • É possível usar o exemplo de código nesta página com o Apache Airflow v2 no Python 3.10.

Pré-requisitos

Para usar o código de amostra nesta página, você precisará do seguinte:

Permissões

  • Nenhuma permissão adicional é necessária para usar o exemplo de código nesta página.

Crie um plug-in para alterar o fuso horário nos logs do Airflow

O Apache Airflow executará os arquivos Python no diretório plugins na inicialização. Com o plug-in a seguir, é possível substituir o fuso horário do executor, o que modifica o fuso horário no qual o Apache Airflow grava os logs.

  1. Crie um diretório com o nome plugins para seu plug-in personalizado e navegue até o diretório. Por exemplo:

    $ mkdir plugins $ cd plugins
  2. Copie o conteúdo do exemplo do código a seguir e salve localmente como dag-timezone-plugin.py no arquivo plugins.

    import time import os os.environ['TZ'] = 'America/Los_Angeles' time.tzset()
  3. No diretório plugins, crie um arquivo Python vazio chamado __init__.py. Seu diretório plugins deve ser semelhante ao seguinte:

    plugins/ |-- __init__.py |-- dag-timezone-plugin.py

Criar uma plugins.zip

As etapas a seguir mostram como criar plugins.zip. O conteúdo deste exemplo pode ser combinado com outros plug-ins e binários em um único arquivo plugins.zip.

  1. Em sua prompt linha de comando, navegue até o diretório plugins da etapa anterior. Por exemplo:

    cd plugins
  2. Compacte o conteúdo em seu diretório plugins.

    zip -r ../plugins.zip ./
  3. Faça upload de plugins.zip para o seu bucket S3.

    $ aws s3 cp plugins.zip s3://your-mwaa-bucket/

Exemplo de código

Para alterar o fuso horário padrão (UTC+0) no qual o DAG é executado, usaremos uma biblioteca chamada Pendulum, uma biblioteca Python para trabalhar com data e hora com reconhecimento de fuso horário.

  1. No prompt de comando, navegue até o diretório em que seus DAGs estão armazenados. Por exemplo:

    $ cd dags
  2. Copie o conteúdo do exemplo a seguir e salve como tz-aware-dag.py.

    from airflow import DAG from airflow.operators.bash_operator import BashOperator from datetime import datetime, timedelta # Import the Pendulum library. import pendulum # Instantiate Pendulum and set your timezone. local_tz = pendulum.timezone("America/Los_Angeles") with DAG( dag_id = "tz_test", schedule_interval="0 12 * * *", catchup=False, start_date=datetime(2022, 1, 1, tzinfo=local_tz) ) as dag: bash_operator_task = BashOperator( task_id="tz_aware_task", dag=dag, bash_command="date" )
  3. Execute o seguinte comando AWS CLI para copiar o DAG para o bucket do seu ambiente e, em seguida, acionar o DAG usando a IU do Apache Airflow.

    $ aws s3 cp your-dag.py s3://your-environment-bucket/dags/
  4. Se tiver êxito, você exibirá uma saída semelhante à seguinte nos logs de tarefas para tz_aware_task no DAG tz_test:

    [2022-08-01, 12:00:00 PDT] {{subprocess.py:74}} INFO - Running command: ['bash', '-c', 'date']
    [2022-08-01, 12:00:00 PDT] {{subprocess.py:85}} INFO - Output:
    [2022-08-01, 12:00:00 PDT] {{subprocess.py:89}} INFO - Mon Aug  1 12:00:00 PDT 2022
    [2022-08-01, 12:00:00 PDT] {{subprocess.py:93}} INFO - Command exited with return code 0
    [2022-08-01, 12:00:00 PDT] {{taskinstance.py:1280}} INFO - Marking task as SUCCESS. dag_id=tz_test, task_id=tz_aware_task, execution_date=20220801T190033, start_date=20220801T190035, end_date=20220801T190035
    [2022-08-01, 12:00:00 PDT] {{local_task_job.py:154}} INFO - Task exited with return code 0
    [2022-08-01, 12:00:00 PDT] {{local_task_job.py:264}} INFO - 0 downstream tasks scheduled from follow-on schedule check
                    

Próximas etapas