自動下載 - AWS 截止日期雲端

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

自動下載

截止日期 CLI 提供命令,以下載自上次執行相同命令後佇列中所有任務的輸出。您可以將此設定為 Cron 任務或排程任務,以重複執行。這會建立持續自動下載輸出。

在設定自動下載之前,請遵循任務附件的儲存設定檔中的步驟,設定資產資料的所有路徑以進行上傳和下載。如果任務使用不在其儲存設定檔中的輸出路徑,則自動下載會略過下載該輸出並列印警告訊息,以摘要其未下載的檔案。同樣地,如果提交的任務沒有儲存描述檔,則自動下載會略過該任務並列印警告訊息。根據預設,截止日期雲端提交者會顯示儲存設定檔外路徑的警告訊息,以協助確保正確的組態。

設定 AWS 登入資料

如果您想要手動執行輸出同步命令,或在將其設定為 Cron 任務之前了解其運作方式,您可以使用登入資料登入截止日期雲端監控桌面應用程式。

內部部署 AWS 登入資料

您的現場部署工作者會使用登入資料來存取截止日期雲端任務附件輸出。為了獲得最安全的存取,我們建議您使用 IAM Roles Anywhere 來驗證您的工作者。如需詳細資訊,請參閱 IAM Roles Anywhere

針對測試,您可以使用 IAM 使用者存取金鑰做為 AWS 登入資料。我們建議您透過包含限制性內嵌政策來設定 IAM 使用者的過期。

重要

已注意下列警告:

  • 請勿使用您帳戶的根登入資料來存取 AWS 資源。這些登入資料可讓未管制的帳戶存取和很難撤銷這些帳戶。

  • 請勿在應用程式檔案中放置常值存取金鑰或登入資料資訊。如果您不小心這麼做了,則會有暴露您登入資料的風險,例如,當您上傳專案到公有儲存庫時。

  • 請勿在您的專案區域中包含包含登入資料的檔案。

  • 保護您的存取金鑰。請勿將您的存取金鑰提供給未經授權的當事方,即便是協助尋找您的帳戶識別符也不妥。執行此作業,可能會讓他人能夠永久存取您的帳戶。

  • 請注意,存放在共用 AWS 登入資料檔案中的任何登入資料都會以純文字儲存。

如需詳細資訊,請參閱《 AWS 一般參考》中的管理 AWS 存取金鑰的最佳實務。

建立 IAM 使用者
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  2. 在導覽窗格中選取使用者,然後選取建立使用者

  3. 將使用者命名為 deadline-output-downloader。清除提供使用者存取權 AWS Management Console的核取方塊,然後選擇下一步

  4. 選擇直接連接政策

  5. 選擇建立政策以建立具有最低必要許可的自訂政策。

  6. 在 JSON 編輯器中,指定下列許可:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "DeadlineCloudOutputDownload", "Effect": "Allow", "Action": [ "deadline:AssumeQueueRoleForUser", "deadline:ListQueueEnvironments", "deadline:ListSessions", "deadline:ListSessionActions", "deadline:SearchJobs", "deadline:GetJob", "deadline:GetQueue", "deadline:GetStorageProfileForQueue" ], "Resource": "*" } ] }
  7. 命名政策DeadlineCloudOutputDownloadPolicy,然後選擇建立政策

  8. 返回使用者建立頁面,重新整理政策清單,然後選取您剛建立的 DeadlineCloudOutputDownloadPolicy,然後選擇下一步

  9. 檢閱使用者詳細資訊,然後選擇建立使用者

限制使用者對有限時段的存取

您建立的任何 IAM 使用者存取金鑰都是長期憑證。為了確保這些登入資料在處理不當時過期,您可以建立內嵌政策來指定金鑰不再有效的日期,讓這些登入資料有時間限制。

  1. 開啟您剛建立的 IAM 使用者。在許可索引標籤中,選擇新增許可,然後選擇建立內嵌政策

  2. 在 JSON 編輯器中,指定下列許可。若要使用此政策,請將範例政策中的aws:CurrentTime時間戳記值取代為您自己的時間和日期。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "DateGreaterThan": { "aws:CurrentTime": "2024-01-01T00:00:00Z" } } } ] }
建立存取金鑰
  1. 從使用者詳細資訊頁面,選取安全登入資料索引標籤。在 Access keys (存取金鑰) 區段中,選擇 Create access key (建立存取金鑰)

  2. 表示您想要使用其他金鑰,然後選擇下一步,然後選擇建立存取金鑰

  3. 擷取存取金鑰頁面上,選擇顯示以顯示使用者私密存取金鑰的值。您可以複製登入資料或下載 .csv 檔案。

存放使用者存取金鑰
  1. 將使用者存取金鑰存放在系統中的 AWS 登入資料檔案中:

    • 在 上Linux,檔案位於 ~/.aws/credentials

    • 在 上Windows,檔案位於 %USERPROFILE\.aws\credentials

    取代下列金鑰:

    [deadline-downloader] aws_access_key_id=ACCESS_KEY_ID aws_secret_access_key=SECRET_ACCESS_KEY region=YOUR_AWS_REGION
  2. 若要隨時使用這些登入資料,請將 env 變數AWS_PROFILE設定為 deadline-downloader

重要

當您不再需要此 IAM 使用者時,建議您將其移除,以符合AWS 安全最佳實務。我們建議您要求人類使用者在存取AWS IAM Identity Center時透過 使用暫時登入資料 AWS。

先決條件

在建立 cron 任務或排程任務以進行自動下載之前,請完成下列步驟。

  1. 如果您尚未安裝 Python,請安裝 Python。

  2. 執行下列動作來安裝截止日期 CLI:

    python -m pip install deadline
  3. 使用以下命令確認截止日期 CLI 的版本為 0.52.1 或更新版本。

    $ deadline --version deadline, version 0.52.1

測試輸出下載命令

驗證命令是否可在您的環境中運作
  1. 取得截止日期的路徑

    Linux and macOS
    $ which deadline
    Windows
    C:\> where deadline
    PowerShell
    PS C:\> Get-Command deadline
  2. 執行 sync-output 命令以引導。

    /path/to/deadline queue sync-output \ --farm-id YOUR_FARM_ID \ --queue-id YOUR_QUEUE_ID \ --storage-profile-id YOUR_PROFILE_ID \ --checkpoint-dir /path/to/checkpoint/directory \
  3. 只有在您的下載機器與提交機器相同時,才需要執行此步驟。將--storage-profile-id YOUR_PROFILE_ID \上述 取代為 --ignore-storage-profiles

  4. 提交測試任務。

    1. 從 GitHub 下載 .zip 檔案。

      1. 開啟 deadline-cloud-samples GitHub 儲存庫

      2. 選擇程式碼,然後從下拉式功能表中選取下載 ZIP

      3. 將下載的封存解壓縮至本機目錄。

    2. 執行

      cd /path/to/unzipped/deadline-cloud-samples-mainline/job_bundles/job_attachments_devguide_output
    3. 執行

      deadline bundle submit .
      1. 如果您沒有預設的截止日期組態設定,您可能需要在命令列中提供下列項目。

        --farm-id YOUR-FARM-ID --queue-id YOUR-QUEUE-ID
    4. 等待任務完成,再前往下一個步驟。

  5. 再次執行 sync-output 命令。

    /path/to/deadline queue sync-output \ --farm-id YOUR_FARM_ID \ --queue-id YOUR_QUEUE_ID \ --storage-profile-id YOUR_PROFILE_ID \ --checkpoint-dir /path/to/checkpoint/directory
  6. 請確認下列內容:

    • 測試任務的輸出會出現在目的地目錄中。

    • 檢查點檔案會在您指定的檢查點目錄中建立。

設定排定的下載

選取作業系統的索引標籤,了解如何設定每 5 分鐘自動下載一次。

Linux
  1. 驗證截止日期 CLI 安裝

    取得截止日期可執行檔的確切路徑:

    $ which deadline

    請注意此路徑 (例如 /opt/homebrew/bin/deadline) 可用於 plist 檔案。

  2. 建立檢查點目錄

    建立存放檢查點檔案的目錄。確保您的使用者執行 命令的適當許可。

    $ mkdir -p /path/to/checkpoint/directory
  3. 建立日誌目錄

    建立 cron 任務日誌的目錄:

    $ mkdir -p /path/to/logs

    考慮使用 https://www.redhat.com/en/blog/setting-logrotate 在日誌檔案上設定日誌輪換

  4. 檢查目前的 Crontab

    檢視您目前的 crontab 以查看現有的任務:

    $ crontab -l
  5. 編輯 Crontab

    開啟您的 crontab 檔案以進行編輯:

    $ crontab -e

    如果這是您第一次使用,系統可能會提示您選擇編輯器 (nano、vim 等)。

  6. 新增 Cron 任務項目

    每 5 分鐘新增以下行來執行任務 (將路徑取代為步驟 1 和步驟 2 的實際值):

    */5 * * * * AWS_PROFILE=deadline-downloader /path/to/deadline queue sync-output --farm-id YOUR_FARM_ID --queue-id YOUR_QUEUE_ID --storage-profile-id YOUR_PROFILE_ID --checkpoint-dir /path/to/checkpoint/directory >> /path/to/logs/deadline_sync.log 2>&1
  7. 驗證 Cron 任務安裝

    儲存並結束編輯器之後,請確認已新增 cron 任務:

    $ crontab -l

    您應該會看到您的新任務已列出。

  8. 檢查 Cron Service 狀態

    確保 cron 服務正在執行:

    # For systemd systems (most modern Linux distributions) $ sudo systemctl status cron # or $ sudo systemctl status crond # For older systems $ sudo service cron status

    如果未執行,請啟動它:

    $ sudo systemctl start cron $ sudo systemctl enable cron # Enable auto-start on boot
macOS
  1. 驗證截止日期 CLI 安裝

    取得截止日期可執行檔的確切路徑:

    $ which deadline

    請注意此路徑 (例如 /opt/homebrew/bin/deadline) 可用於 plist 檔案。

  2. 建立檢查點目錄和日誌目錄

    建立存放檢查點檔案的目錄:

    $ mkdir -p /path/to/checkpoint/directory $ mkdir -p /path/to/logs

    考慮使用 https://formulae.brew.sh/formula/logrotate 在日誌檔案上設定日誌輪換

  3. 建立 Plist 檔案

    使用~/Library/LaunchAgents/com.user.deadlinesync.plist下列內容在 建立組態檔案 (/path/to/deadline以步驟 1 的實際路徑取代):

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.user.deadlinesync</string> <key>ProgramArguments</key> <array> <string>/path/to/deadline</string> <string>queue</string> <string>sync-output</string> <string>--farm-id</string> <string>YOUR_FARM_ID</string> <string>--queue-id</string> <string>YOUR_QUEUE_ID</string> <string>--storage-profile-id</string> <string>YOUR STORAGE PROFILE ID</string> <string>--checkpoint-dir</string> <string>/path/to/checkpoint/dir</string> </array> <key>EnvironmentVariables</key> <dict> <key>AWS_PROFILE</key> <string>deadline-downloader</string> </dict> <key>RunAtLoad</key> <true/> <key>UserName</key> <string>YOUR_USER_NAME</string> <key>StandardOutPath</key> <string>/path/to/logs/deadline_sync.log</string> <key>StartInterval</key> <integer>300</integer> </dict> </plist>

    --ignore-storage-profiles 如果您的下載機器與提交機器相同,請將--storage-profile-id YOUR_PROFILE_ID上述 取代為

  4. 驗證清單檔案

    驗證 plist 檔案的 XML 語法:

    $ plutil -lint ~/Library/LaunchAgents/com.user.deadlinesync.plist

    如果檔案有效,這應該會傳回 "OK"。

  5. 檢查現有的啟動代理程式或啟動協助程式

    檢查啟動代理程式是否已載入:

    $ launchctl list | grep deadlinesync OR $ sudo launchctl list | grep deadlinesync

    如果存在,請先卸載:

    $ launchctl bootout gui/$(id -u)/com.user.deadlinesync OR $ sudo launchctl bootout system/com.user.deadlinesync
  6. 建立和引導

    若要在使用者登入時執行此任務,請以 LaunchAgent 身分執行。若要執行此任務,而不讓使用者在每次執行機器時登入,請以 LaunchDaemon 執行它。

    1. 若要以 LaunchAgent 身分執行:

      1. 使用在 下建立的組態 ~/Library/LaunchAgents/com.user.deadlinesync.plist

      2. 然後使用引導命令載入組態:

        $ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.user.deadlinesync.plist
    2. 若要以 LaunchDaemon 身分執行:

      1. 執行下列動作以移動 Pilst 檔案並變更許可:

        $ sudo mv ~/Library/LaunchAgents/com.user.deadlinesync.plist /Library/LaunchDaemons/ $ sudo chown root:wheel /Library/LaunchDaemons/com.user.deadlinesync.plist $ sudo chmod 644 /Library/LaunchDaemons/com.user.deadlinesync.plist
      2. 使用現代引導命令載入啟動代理程式:

        $ sudo launchctl bootstrap system /Library/LaunchDaemons/com.user.deadlinesync.plist
  7. 驗證狀態

    如果您啟動 LaunchAgent,請執行下列動作以確認已載入:

    $ launchctl list | grep deadlinesync

    如果您啟動 LaunchDaemon,請執行下列動作來確認已載入:

    $ sudo launchctl list | grep deadlinesync

    輸出看起來應該像

    SOME_PID_NUMBER 0 com.user.deadlinesync

    如需詳細狀態資訊:

    $ launchctl print gui/$(id -u)/com.user.deadlinesync

    這會顯示目前狀態、程式引數、環境變數、執行間隔和執行歷史記錄。

Windows
注意

使用這些指示建立的排程任務只有在使用者登入時才有效。

若要在系統啟動時設定它,而不需要使用者登入,請參閱官方Windows文件

對於以下所有步驟,請使用命令提示 - 以管理員身分執行:

  1. 驗證截止日期 CLI 安裝

    尋找截止日期可執行檔:

    C:\> where deadline

    記下用於任務的完整路徑 (例如 C:\Program Files\Amazon\DeadlineCloud\deadline.exe)。

  2. 建立檢查點目錄

    建立存放檢查點檔案的目錄:

    C:\> mkdir "path\to\checkpoint\directory"
  3. 建立日誌目錄

    建立任務日誌的目錄:

    C:\> mkdir "path\to\logs"
  4. 建立批次檔案包裝函式

    使用下列內容建立批次檔案:

    C:\> notepad C:\path\to\deadline_sync.bat
    YOUR_PATH_TO_DEADLINE.EXE queue sync-output --farm-id YOUR_FARM_ID --queue-id YOUR_QUEUE_ID --storage-profile-id YOUR_PROFILE_ID --checkpoint-dir path\to\checkpoint\checkpoints > path\to\logs\deadline.log 2>&1
  5. 測試批次檔案

    手動測試批次檔案:

    C:\> .\path\to\deadline_sync.bat

    檢查日誌檔案是否已建立:

    C:\> notepad path\to\logs\deadline_sync.log
  6. 檢查任務排程器服務

    確保任務排程器服務正在執行:

    C:\> sc query "Schedule"

    如果服務不存在,請嘗試其他名稱:

    C:\> sc query "TaskScheduler" C:\> sc query "Task Scheduler"

    如果未執行,請啟動它:

    C:\> sc start "Schedule"
  7. 建立排程任務

    建立任務以每 5 分鐘執行一次。

    C:\> schtasks /create /tn "DeadlineOutputSync" /tr "C:\path\to\deadline_sync.bat" /sc minute /mo 5

    命令明細:

    • /tn - 任務名稱

    • /tr - 要執行的任務 (您的批次檔案)

    • /sc minute /mo 5 - 排程:每 5 分鐘

  8. 驗證任務建立

    檢查任務是否已成功建立:

    schtasks /query /tn "DeadlineOutputSync" /v /fo LIST

    尋找:

    • 要執行的任務: 應該顯示您的批次檔案路徑

    • 下次執行時間:應該會在 5 分鐘內顯示時間

  9. 測試任務執行

    手動執行任務以測試:

    schtasks /run /tn "DeadlineOutputSync"

    檢查任務狀態:

    schtasks /query /tn "DeadlineOutputSync"
驗證設定

若要驗證自動下載設定是否成功,請完成下列步驟。

  1. 提交新的測試任務。

  2. 等待一個排程器間隔完成,在此情況下為 5 分鐘。

  3. 確認已自動下載新的輸出。

如果輸出未下載,請檢查程序日誌的故障診斷區段。

對自動下載進行故障診斷

如果您遇到自動下載的問題,請檢查下列項目:

儲存設定檔問題

目錄許可

  • 確保排程器服務使用者具有:

    • 對檢查點目錄的讀取/寫入存取權

    • 輸出目的地目錄的寫入存取權

  • 對於 Linux和 macOS,使用 ls -la 檢查許可。

  • 對於 Windows,請檢閱 屬性資料夾中的安全性設定。

檢查排程器日誌

Linux
  1. 檢查 cron 服務是否正在執行:

    # For systemd systems $ sudo systemctl status cron # or $ sudo systemctl status crond # Check if your user has cron job correctly configured $ crontab -l
  2. 檢視 Cron 執行日誌:

    # Check system logs for cron activity (most common locations) $ sudo tail -f /var/log/syslog | grep CRON $ sudo tail -f /var/log/cron.log | grep deadline # View recent cron logs $ sudo journalctl -u cron -f $ sudo journalctl -u crond -f # On some systems
  3. 檢查您的特定 Cron 任務日誌:

    # View the log file specified in your cron job $ tail -100f /path/to/logs/deadline_sync.log
  4. 在系統日誌中搜尋 Cron 任務執行:

    # Look for your specific cron job executions $ sudo grep "deadline.*incremental-output-download" /var/log/syslog # Check for cron job starts and completions $ sudo grep "$(whoami).*CMD.*deadline" /var/log/syslog
  5. 檢查檢查點檔案更新:

    # List checkpoint files with timestamps $ ls -la /path/to/checkpoint/directory/ # Check when checkpoint was last modified $ stat /path/to/checkpoint/directory/queue-*_download_checkpoint.json
  6. 檢查日誌檔案:

    $ ls -la /path/to/log/deadline_sync.log
macOS

檢視啟動代理程式執行日誌:

  1. 檢查啟動代理程式是否正在執行:

    $ sudo launchctl list | grep deadlinesync

    輸出顯示:PID Status Label(PID 將在目前未執行-時,這是間隔任務的正常情況)

  2. 檢視詳細的啟動代理程式狀態:

    $ sudo launchctl print system/com.user.deadlinesync

    這會顯示執行歷史記錄、上次結束程式碼、執行次數和目前狀態。

  3. 檢視啟動代理程式執行日誌:

    # View recent logs (last hour) log show --predicate 'subsystem contains "com.user.deadlinesync"' --last 1h # View logs from a specific time period log show --predicate 'subsystem contains "com.user.deadlinesync"' --start '2024-08-27 09:00:00'
  4. 強制執行啟動代理程式以進行立即測試:

    $ sudo launchctl kickstart gui/$(id -u)/com.user.deadlinesync

    無論排程為何,這都會立即觸發任務,這對於測試很有用。

  5. 檢查檢查點檔案更新:

    # List checkpoint files with timestamps $ ls -la /path/to/checkpoint/directory/
  6. 檢查日誌檔案:

    $ ls -la /path/to/log/deadline_sync.log
Windows
  1. 檢查任務排程器服務是否正在執行:

    C:\> sc query "Schedule"

    如果服務不存在,請嘗試其他名稱:

    C:\> sc query "TaskScheduler" C:\> sc query "Task Scheduler"
  2. 檢視您的排程任務:

    C:> schtasks /query /tn "DeadlineOutputSync"
  3. 檢查任務的日誌檔案:

    # View the log file created by your batch script C:> notepad C:\path\to\logs\deadline_sync.log
  4. 檢查檢查點檔案更新:

    # List checkpoint files with timestamps C:> dir "C:\path\to\checkpoint\directory" /od