本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon MWAA 上變更 DAG 的時區
Apache Airflow 預設會以 UTC+0 排程您的導向無環圖 (DAG)。下列步驟說明如何變更 Amazon MWAA 使用 Pendulum
版本
您可以使用此頁面上的程式碼範例搭配 Python 3.10 中的 Apache Airflow v2 和 Python 3.11 中的 Apache Airflow v3。 https://peps.python.org/pep-0619/
先決條件
若要使用此頁面上的範例程式碼,您需要下列項目:
許可
使用此頁面上的程式碼範例不需要額外的許可。
建立外掛程式以變更 Airflow 日誌中的時區
Apache Airflow 會在啟動時在 plugins目錄中執行 Python 檔案。使用下列外掛程式,您可以覆寫執行器的時區,以修改 Apache Airflow 寫入日誌的時區。
-
plugins為您的自訂外掛程式建立名為 的目錄,然後導覽至 目錄。例如:$ mkdir plugins $ cd plugins -
複製下列程式碼範例的內容,並在本機儲存為
dag-timezone-plugin.py資料夾中的plugins。import time import os os.environ['TZ'] = 'America/Los_Angeles' time.tzset() -
在
plugins目錄中,建立名為 的空白 Python 檔案__init__.py。您的plugins目錄應該類似於以下內容:plugins/ |-- __init__.py |-- dag-timezone-plugin.py
建立 plugins.zip
下列步驟說明如何建立 plugins.zip。此範例的內容可以與其他外掛程式和二進位檔合併為單一plugins.zip檔案。
-
在您的命令提示字元中,導覽至上一個步驟的
plugins目錄。例如:cd plugins -
壓縮
plugins目錄中的內容。zip -r ../plugins.zip ./ -
plugins.zip上傳至您的 S3 儲存貯體aws s3 cp plugins.zip s3://your-mwaa-bucket/
範例程式碼
若要變更 DAG 執行的預設時區 (UTC+0),我們將使用名為 Pendulum
-
在命令提示中,導覽至存放 DAGs目錄。例如:
cd dags -
複製下列範例的內容並儲存為
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" ) -
執行下列 AWS CLI 命令,將 DAG 複製到您環境的儲存貯體,然後使用 Apache Airflow UI 觸發 DAG。
aws s3 cpyour-dag.py s3://your-environment-bucket/dags/ -
如果成功,您將輸出類似
tz_testDAG 中 的任務日誌tz_aware_task中的以下內容:[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
後續步驟?
-
進一步了解如何在此範例中將
plugins.zip檔案上傳至 中的 Amazon S3 儲存貯體安裝自訂外掛程式。