在 Amazon 上更改 a DAG 的時區 MWAA - Amazon Managed Workflows for Apache Airflow

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon 上更改 a DAG 的時區 MWAA

Apache 氣流默認情況下,將定向無環圖(DAG)安排在 UTC +0 中。以下步驟顯示了如何更改 Amazon MWAA 運行鐘擺DAGs的時區。或者,本主題示範如何建立自訂外掛程式,以變更環境 Apache Airflow 記錄的時區。

版本

  • 您可以使用此頁面上的代碼示例與 Python 3.10 中的阿帕奇氣流 V2

必要條件

若要使用此頁面上的範例程式碼,您需要下列項目:

許可

  • 使用此頁面上的程式碼範例不需要其他權限。

建立外掛程式以變更氣流記錄中的時區

阿帕奇氣流將在啟動時運行plugins目錄中的 Python 文件。使用以下插件,您可以覆蓋執行程序的時區,該時區修改 Apache Airflow 寫入日誌的時區。

  1. 創建一個plugins為您的自定義插件命名的目錄,然後導航到該目錄。例如:

    $ mkdir plugins $ cd plugins
  2. 複製下列程式碼範例的內容,並在本機儲存為plugins資料夾dag-timezone-plugin.py中。

    import time import os os.environ['TZ'] = 'America/Los_Angeles' time.tzset()
  3. plugins目錄中,創建一個名為的空 Python 文件__init__.py。您的plugins目錄應該類似於以下內容:

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

建立 plugins.zip

以下步驟顯示如何創建plugins.zip。這個例子的內容可以與其他插件和二進製文件組合成一個plugins.zip文件。

  1. 在命令提示符中,導航到上一步中的plugins目錄。例如:

    cd plugins
  2. 壓縮目plugins錄中的內容。

    zip -r ../plugins.zip ./
  3. 上傳plugins.zip到您的 S3 儲存貯體

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

範例程式碼

要更改DAG運行的默認時區(UTC+0),我們將使用一個名為擺錘的庫,用於處理時區感知日期時間的 Python 庫。

  1. 在命令提示符中,導航到存儲的DAGs目錄。例如:

    $ cd dags
  2. 複製下列範例的內容並另存新檔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. 執行下列 AWS CLI 命令以複製DAG到您環境的值區,然後DAG使用 Apache Airflow UI 觸發。

    $ aws s3 cp your-dag.py s3://your-environment-bucket/dags/
  4. 如果成功,您將在中的任務日誌中輸出類似以下tz_aware_task內容 tz_testDAG:

    [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 儲存貯體安裝自定義插件