

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

# 在任務中使用檔案
<a name="using-files-in-your-jobs"></a>

 您提交至 Deadline Cloud AWS 的許多任務都有輸入和輸出檔案。您的輸入檔案和輸出目錄可能位於共用檔案系統和本機磁碟機的組合上。任務需要在這些位置找到內容。Deadline Cloud 提供兩種功能：[任務附件](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/storage-job-attachments.html)和[儲存描述](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/storage-shared.html)檔，可共同協助您的任務找到所需的檔案。

任務附件提供數種優點
+ 使用 Amazon S3 在主機之間移動檔案
+ 將檔案從工作站傳輸到工作者主機，反之亦然
+ 適用於您啟用 功能的佇列中的任務
+ 主要與服務受管機群搭配使用，但也與客戶受管機群相容。

 使用儲存描述檔來映射工作站和工作者主機上共用檔案系統位置的配置。此映射可協助您的任務在工作站和工作者主機的位置不同時尋找共用檔案和目錄，例如使用 Windows型工作站和 Linux型工作者主機進行跨平台設定。任務附件也會使用儲存設定檔的檔案系統組態映射，來識別透過 Amazon S3 在主機之間來回傳輸所需的檔案。

 如果您不是使用任務附件，而且不需要在工作站和工作者主機之間重新對應檔案和目錄位置，則不需要使用儲存設定檔建立檔案共用的模型。

**Topics**
+ [

# 範例專案基礎設施
](sample-project-infrastructure.md)
+ [

# 儲存設定檔和路徑映射
](storage-profiles-and-path-mapping.md)

# 範例專案基礎設施
<a name="sample-project-infrastructure"></a>

若要示範如何使用任務附件和儲存描述檔，請使用兩個不同的專案來設定測試環境。您可以使用截止日期雲端主控台來建立測試資源。

1. 如果您尚未建立測試陣列，請建立測試陣列。若要建立陣列，請遵循[建立陣列](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/farms.html)中的程序。

1. 為兩個專案中的每個任務建立兩個佇列。若要建立佇列，請遵循[建立佇列](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/create-queue.html)中的程序。

   1. 建立第一個名為 的佇列**Q1**。使用下列組態，針對所有其他項目使用預設值。
      + 針對任務附件，選擇**建立新的 Amazon S3 儲存貯**體。
      + 選取**啟用與客戶受管機群的關聯**。
      + 對於以使用者身分執行的 ，請在 POSIX 使用者和群組**jobuser**中輸入 。
      + 針對佇列服務角色，建立名為 的新角色 **AssetDemoFarm-Q1-Role**
      + 清除預設 conda 佇列環境核取方塊。

   1. 建立第二個名為 的佇列**Q2**。使用下列組態，針對所有其他項目使用預設值。
      + 針對任務附件，選擇**建立新的 Amazon S3 儲存貯**體。
      + 選取**啟用與客戶受管機群的關聯**。
      + 對於以使用者身分執行的 ，請在 POSIX 使用者和群組**jobuser**中輸入 。
      + 針對佇列服務角色，建立名為 的新角色 **AssetDemoFarm-Q2-Role**
      + 清除預設 conda 佇列環境核取方塊。

1. 建立單一客戶受管機群，從兩個佇列執行任務。若要建立機群，請遵循[建立客戶受管機群](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/create-a-cmf.html)中的程序。使用下列組態：
   + 對於**名稱**，請使用 **DemoFleet**。
   + 對於**機群類型**，選擇**客戶受管**
   + 針對**機群服務角色**，建立名為 **AssetDemoFarm-Fleet-Role** 的新角色。
   + 請勿將機群與任何佇列建立關聯。

測試環境假設主機之間使用網路檔案共用共用三個檔案系統。在此範例中，位置具有下列名稱：
+ `FSCommon` - 包含兩個專案通用的輸入任務資產。
+ `FS1` - 包含專案 1 的輸入和輸出任務資產。
+ `FS2` - 包含專案 2 的輸入和輸出任務資產。

測試環境也會假設有三個工作站，如下所示：
+ `WSAll` - 開發人員用於所有專案的 Linux型工作站。共用檔案系統位置為：
  + `FSCommon`: `/shared/common`
  + `FS1`: `/shared/projects/project1`
  + `FS2`: `/shared/projects/project2`
+ `WS1` - 用於專案 1 Windows的 型工作站。共用檔案系統位置為：
  + `FSCommon`: `S:\`
  + `FS1`: `Z:\`
  + `FS2`：無法使用
+ `WS1` - 用於專案 2 的 macOS型工作站。共用檔案系統位置為：
  + `FSCommon`: `/Volumes/common`
  + `FS1`：無法使用
  + `FS2`: `/Volumes/projects/project2`

最後，定義機群中工作者的共用檔案系統位置。以下範例會將此組態稱為 `WorkerConfig`。共用位置為：
+ `FSCommon`: `/mnt/common`
+ `FS1`: `/mnt/projects/project1`
+ `FS2`: `/mnt/projects/project2`

 您不需要設定任何符合此組態的共用檔案系統、工作站或工作者。示範不需要有共用的位置。

# 儲存設定檔和路徑映射
<a name="storage-profiles-and-path-mapping"></a>

使用儲存描述檔來建立工作站和工作者主機上的檔案系統模型。每個儲存設定檔都會描述其中一個系統組態的作業系統和檔案系統配置。本主題說明如何使用儲存描述檔來建立主機的檔案系統組態模型，讓 Deadline Cloud 可以為您的任務產生路徑映射規則，以及如何從您的儲存描述檔產生這些路徑映射規則。

當您將任務提交至截止日期雲端時，您可以為任務提供選用的儲存設定檔 ID。此儲存設定檔說明提交工作站的檔案系統。它描述任務範本中檔案路徑使用的原始檔案系統組態。

您也可以將儲存描述檔與機群建立關聯。儲存設定檔說明機群中所有工作者主機的檔案系統組態。如果您有具有不同檔案系統組態的工作者，則必須將這些工作者指派給您陣列中的不同機群。

 路徑映射規則描述路徑應如何從任務中指定的路徑重新映射到工作者主機上路徑的實際位置。Deadline Cloud 會將任務儲存描述檔中所述的檔案系統組態與執行任務之機群的儲存描述檔進行比較，以衍生這些路徑映射規則。

**Topics**
+ [

# 具有儲存設定檔的模型共用檔案系統位置
](modeling-your-shared-filesystem-locations-with-storage-profiles.md)
+ [

# 設定機群的儲存設定檔
](configuring-storage-profiles-for-fleets.md)
+ [

# 設定佇列的儲存設定檔
](storage-profiles-for-queues.md)
+ [

# 從儲存體設定檔衍生路徑映射規則
](deriving-path-mapping-rules-from-storage-profiles.md)

# 具有儲存設定檔的模型共用檔案系統位置
<a name="modeling-your-shared-filesystem-locations-with-storage-profiles"></a>

 儲存設定檔會將其中一個主機組態的檔案系統組態建模。[範例專案基礎設施]()中有四種不同的主機組態。在此範例中，您會為每個 建立個別的儲存設定檔。您可以使用下列任一項來建立儲存設定檔：
+ [CreateStorageProfile API](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateStorageProfile.html)
+ [AWS::Deadline::StorageProfile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-deadline-storageprofile.html) CloudFormation 資源
+ [AWS 主控台](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/storage-shared.html#storage-profile)

 儲存設定檔是由檔案系統位置清單組成，每個檔案系統位置清單都會將與從主機提交或在主機上執行之任務相關的檔案系統位置和類型告知 Deadline Cloud。儲存描述檔應該只建立與任務相關的位置模型。例如，共用`FSCommon`位置位於 `WS1` 的工作站上`S:\`，因此對應的檔案系統位置為：

```
{
    "name": "FSCommon",
    "path": "S:\\",
    "type": "SHARED"
}
```

 使用下列命令，在 `WorkerConfig`[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)中使用 建立工作站組態 `WS1`、 `WS2`和 的儲存設定檔，`WS3`以及工作者組態[AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)：

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff

aws deadline create-storage-profile --farm-id $FARM_ID \
  --display-name WSAll \
  --os-family LINUX \
  --file-system-locations \
  '[
      {"name": "FSCommon", "type":"SHARED", "path":"/shared/common"},
      {"name": "FS1", "type":"SHARED", "path":"/shared/projects/project1"},
      {"name": "FS2", "type":"SHARED", "path":"/shared/projects/project2"}
  ]'

aws deadline create-storage-profile --farm-id $FARM_ID \
  --display-name WS1 \
  --os-family WINDOWS \
  --file-system-locations \
  '[
      {"name": "FSCommon", "type":"SHARED", "path":"S:\\"},
      {"name": "FS1", "type":"SHARED", "path":"Z:\\"}
   ]'

aws deadline create-storage-profile --farm-id $FARM_ID \
  --display-name WS2 \
  --os-family MACOS \
  --file-system-locations \
  '[
      {"name": "FSCommon", "type":"SHARED", "path":"/Volumes/common"},
      {"name": "FS2", "type":"SHARED", "path":"/Volumes/projects/project2"}
  ]'

aws deadline create-storage-profile --farm-id $FARM_ID \
  --display-name WorkerCfg \
  --os-family LINUX \
  --file-system-locations \
  '[
      {"name": "FSCommon", "type":"SHARED", "path":"/mnt/common"},
      {"name": "FS1", "type":"SHARED", "path":"/mnt/projects/project1"},
      {"name": "FS2", "type":"SHARED", "path":"/mnt/projects/project2"}
  ]'
```

**注意**  
您必須針對陣列中所有儲存設定檔的 `name` 屬性，使用相同的值來參考儲存設定檔中的檔案系統位置。Deadline Cloud 會比較名稱，以在產生路徑映射規則時，判斷來自不同儲存設定檔的檔案系統位置是否參照相同的位置。

# 設定機群的儲存設定檔
<a name="configuring-storage-profiles-for-fleets"></a>

您可以設定機群，以包含儲存設定檔，在機群中的所有工作者上建立檔案系統位置的模型。機群中所有工作者的主機檔案系統組態必須符合其機群的儲存設定檔。具有不同檔案系統組態的工作者必須位於不同的機群中。

若要設定機群的組態以使用 `WorkerConfig` 中的 儲存設定檔[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)[AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)：

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of FLEET_ID to your fleet's identifier
FLEET_ID=fleet-00112233445566778899aabbccddeeff
# Change the value of WORKER_CFG_ID to your storage profile named WorkerConfig
WORKER_CFG_ID=sp-00112233445566778899aabbccddeeff

FLEET_WORKER_MODE=$( \
  aws deadline get-fleet --farm-id $FARM_ID --fleet-id $FLEET_ID \
   --query '.configuration.customerManaged.mode' \
)
FLEET_WORKER_CAPABILITIES=$( \
  aws deadline get-fleet --farm-id $FARM_ID --fleet-id $FLEET_ID \
   --query '.configuration.customerManaged.workerCapabilities' \
)

aws deadline update-fleet --farm-id $FARM_ID --fleet-id $FLEET_ID \
  --configuration \
  "{
    \"customerManaged\": {
      \"storageProfileId\": \"$WORKER_CFG_ID\",
      \"mode\": $FLEET_WORKER_MODE,
      \"workerCapabilities\": $FLEET_WORKER_CAPABILITIES
    }
  }"
```

# 設定佇列的儲存設定檔
<a name="storage-profiles-for-queues"></a>

 佇列的組態包含提交至佇列之任務需要存取之共用檔案系統位置的區分大小寫名稱清單。例如，提交至佇列的任務`Q1`需要檔案系統位置`FSCommon`和 `FS1`。提交至佇列的任務`Q2`需要檔案系統位置 `FSCommon`和 `FS2`。

若要將佇列的組態設定為需要這些檔案系統位置，請使用下列指令碼：

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of QUEUE1_ID to queue Q1's identifier
QUEUE1_ID=queue-00112233445566778899aabbccddeeff
# Change the value of QUEUE2_ID to queue Q2's identifier
QUEUE2_ID=queue-00112233445566778899aabbccddeeff

aws deadline update-queue --farm-id $FARM_ID --queue-id $QUEUE1_ID \
  --required-file-system-location-names-to-add FSComm FS1

aws deadline update-queue --farm-id $FARM_ID --queue-id $QUEUE2_ID \
  --required-file-system-location-names-to-add FSComm FS2
```

 佇列的組態也包含允許儲存設定檔的清單，這些設定檔適用於提交到 的任務，以及與該佇列相關聯的機群。只有定義佇列所有必要檔案系統位置的檔案系統位置的儲存設定檔，才允許在佇列的允許儲存設定檔清單中。

如果您提交的儲存描述檔不在佇列允許的儲存描述檔清單中，則任務會失敗。您可以隨時將沒有儲存設定檔的任務提交至佇列。標記為 `WSAll`和 的工作站組態`WS1`都有佇列 所需的檔案系統位置 (`FSCommon` 和 `FS1`)`Q1`。他們需要被允許將任務提交到佇列。同樣地，工作站會設定 `WSAll`並`WS2`符合佇列 的要求`Q2`。必須允許他們提交任務至該佇列。更新兩個佇列組態，以允許使用下列指令碼搭配這些儲存設定檔提交任務：

```
# Change the value of WSALL_ID to the identifier of the WSAll storage profile
WSALL_ID=sp-00112233445566778899aabbccddeeff
# Change the value of WS1 to the identifier of the WS1 storage profile
WS1_ID=sp-00112233445566778899aabbccddeeff
# Change the value of WS2 to the identifier of the WS2 storage profile
WS2_ID=sp-00112233445566778899aabbccddeeff

aws deadline update-queue --farm-id $FARM_ID --queue-id $QUEUE1_ID \
  --allowed-storage-profile-ids-to-add $WSALL_ID $WS1_ID

aws deadline update-queue --farm-id $FARM_ID --queue-id $QUEUE2_ID \
  --allowed-storage-profile-ids-to-add $WSALL_ID $WS2_ID
```

 如果您將`WS2`儲存描述檔新增至佇列允許的儲存描述檔清單`Q1`，則會失敗：

```
$ aws deadline update-queue --farm-id $FARM_ID --queue-id $QUEUE1_ID \
  --allowed-storage-profile-ids-to-add $WS2_ID

An error occurred (ValidationException) when calling the UpdateQueue operation: Storage profile id: sp-00112233445566778899aabbccddeeff does not have required file system location: FS1
```

 這是因為`WS2`儲存描述檔不包含`FS1`佇列`Q1`所需檔案系統位置的定義。

 將已設定的機群與不在佇列允許儲存設定檔清單中的儲存設定檔建立關聯也會失敗。例如：

```
$ aws deadline create-queue-fleet-association --farm-id $FARM_ID \
   --fleet-id $FLEET_ID \
   --queue-id $QUEUE1_ID

An error occurred (ValidationException) when calling the CreateQueueFleetAssociation operation: Mismatch between storage profile ids.
```

若要修正錯誤，請將名為 `WorkerConfig` 的儲存設定檔新增至佇列 `Q1`和佇列 的允許儲存設定檔清單`Q2`。然後，將機群與這些佇列建立關聯，以便機群中的工作者可以從兩個佇列執行任務。

```
# Change the value of FLEET_ID to your fleet's identifier
FLEET_ID=fleet-00112233445566778899aabbccddeeff
# Change the value of WORKER_CFG_ID to your storage profile named WorkerCfg
WORKER_CFG_ID=sp-00112233445566778899aabbccddeeff

aws deadline update-queue --farm-id $FARM_ID --queue-id $QUEUE1_ID \
  --allowed-storage-profile-ids-to-add $WORKER_CFG_ID

aws deadline update-queue --farm-id $FARM_ID --queue-id $QUEUE2_ID \
  --allowed-storage-profile-ids-to-add $WORKER_CFG_ID

aws deadline create-queue-fleet-association --farm-id $FARM_ID \
  --fleet-id $FLEET_ID \
  --queue-id $QUEUE1_ID

aws deadline create-queue-fleet-association --farm-id $FARM_ID \
  --fleet-id $FLEET_ID \
  --queue-id $QUEUE2_ID
```

# 從儲存體設定檔衍生路徑映射規則
<a name="deriving-path-mapping-rules-from-storage-profiles"></a>

 路徑映射規則描述路徑應如何從任務重新映射到工作者主機上路徑的實際位置。當任務在工作者上執行時，任務的儲存設定檔會與工作者機群的儲存設定檔進行比較，以衍生任務的路徑映射規則。

 截止日期 雲端會為佇列組態中的每個必要檔案系統位置建立映射規則。例如，使用`WSAll`儲存描述檔提交到佇列的任務`Q1`具有路徑映射規則：
+  `FSComm`: `/shared/common -> /mnt/common` 
+  `FS1`: `/shared/projects/project1 -> /mnt/projects/project1` 

 Deadline Cloud 會建立 `FSComm`和 `FS1` 檔案系統位置的規則，但即使 `WSAll`和 `WorkerConfig`儲存設定檔都定義 ，也無法建立`FS2`檔案系統位置`FS2`。這是因為佇列 `Q1`的必要檔案系統位置清單為 `["FSComm", "FS1"]`。

 您可以提交列印 [Open Job Description 路徑映射規則檔案的任務，然後在任務完成後讀取工作階段日誌，以確認使用特定儲存設定檔提交的任務可用的路徑映射規則](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Run#path-mapping)：

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of QUEUE1_ID to queue Q1's identifier
QUEUE1_ID=queue-00112233445566778899aabbccddeeff
# Change the value of WSALL_ID to the identifier of the WSALL storage profile
WSALL_ID=sp-00112233445566778899aabbccddeeff

aws deadline create-job --farm-id $FARM_ID --queue-id $QUEUE1_ID \
  --priority 50 \
  --storage-profile-id $WSALL_ID \
  --template-type JSON --template \
  '{
    "specificationVersion": "jobtemplate-2023-09",
    "name": "DemoPathMapping",
    "steps": [
      {
        "name": "ShowPathMappingRules",
        "script": {
          "actions": {
            "onRun": {
              "command": "/bin/cat",
              "args": [ "{{Session.PathMappingRulesFile}}" ]
            }
          }
        }
      }
    ]
  }'
```

 如果您使用[截止日期雲端 CLI](https://pypi.org/project/deadline/) 提交任務，其`settings.storage_profile_id`組態設定會設定使用 CLI 提交的任務將擁有的儲存設定檔。若要使用`WSAll`儲存描述檔提交任務，請設定：

```
deadline config set settings.storage_profile_id $WSALL_ID
```

 若要像在範例基礎設施中執行一樣執行客戶受管工作者，請遵循*在截止日期雲端使用者指南*中[執行工作者代理](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/run-worker.html)程式中的程序來執行工作者 AWS CloudShell。如果您之前遵循這些指示，請先刪除 `~/demoenv-logs`和 `~/demoenv-persist`目錄。此外，設定方向參考的 `DEV_FARM_ID`和 `DEV_CMF_ID`環境變數值，如下所示，然後再執行此操作：

```
DEV_FARM_ID=$FARM_ID
DEV_CMF_ID=$FLEET_ID
```

 任務執行後，您可以在任務的日誌檔案中看到路徑映射規則：

```
cat demoenv-logs/${QUEUE1_ID}/*.log
...
JJSON log results (see below)
...
```

日誌包含 `FS1`和 `FSComm` 檔案系統的映射。重新格式化可讀性，日誌項目如下所示：

```
{
    "version": "pathmapping-1.0",
    "path_mapping_rules": [
        {
            "source_path_format": "POSIX",
            "source_path": "/shared/projects/project1",
            "destination_path": "/mnt/projects/project1"
        },
        {
            "source_path_format": "POSIX",
            "source_path": "/shared/common",
            "destination_path": "/mnt/common"
        }
    ]
```

 您可以提交具有不同儲存設定檔的任務，以查看路徑映射規則如何變更。