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
Tópicos
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.
-
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
-
Copie o conteúdo do exemplo do código a seguir e salve localmente como
dag-timezone-plugin.py
no arquivoplugins
.import time import os os.environ['TZ'] = 'America/Los_Angeles' time.tzset()
-
No diretório
plugins
, crie um arquivo Python vazio chamado__init__.py
. Seu diretórioplugins
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
.
-
Em sua prompt linha de comando, navegue até o diretório
plugins
da etapa anterior. Por exemplo:cd plugins
-
Compacte o conteúdo em seu diretório
plugins
.zip -r ../plugins.zip ./
-
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
-
No prompt de comando, navegue até o diretório em que seus DAGs estão armazenados. Por exemplo:
$
cd dags
-
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" )
-
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/ -
Se tiver êxito, você exibirá uma saída semelhante à seguinte nos logs de tarefas para
tz_aware_task
no DAGtz_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
-
Saiba mais sobre como fazer o upload do
plugins.zip
arquivo neste exemplo para seu bucket do Amazon S3 em Como instalar plug-ins personalizados.