

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在作业中使用文件
<a name="using-files-in-your-jobs"></a>

 您提交给 De AWS adline Cloud 的许多作业都有输入和输出文件。您的输入文件和输出目录可能位于共享文件系统和本地驱动器的组合上。工作需要在这些位置找到内容。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)文件，它们可以协同工作，帮助您的作业找到所需的文件。

Job 附件有多项好处
+ 使用 Amazon S3 在主机之间移动文件
+ 将文件从工作站传输到工作主机，反之亦然
+ 适用于已启用该功能的队列中的作业
+ 主要用于服务管理的车队，但也与客户管理的车队兼容。

 使用存储配置文件映射工作站和工作主机上共享文件系统位置的布局。当您的工作站和工作主机的位置不同时，此映射可以帮助您的作业找到共享文件和目录，例如使用Windows基于工作站和Linux基于工作主机的跨平台设置。任务附件还使用存储配置文件中的文件系统配置映射来识别通过 Amazon S3 在主机之间穿梭所需的文件。

 如果您不使用作业附件，并且不需要在工作站和工作主机之间重新映射文件和目录位置，则无需使用存储配置文件对文件共享进行建模。

**Topics**
+ [示例项目基础架构](sample-project-infrastructure.md)
+ [存储配置文件和路径映射](storage-profiles-and-path-mapping.md)

# 示例项目基础架构
<a name="sample-project-infrastructure"></a>

要演示如何使用作业附件和存储配置文件，请设置一个包含两个独立项目的测试环境。您可以使用 Deadline Cloud 控制台来创建测试资源。

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 存储桶**。
      + 选择 “**启用与客户管理的车队的关联**”。
      + 对于以用户身份运行，请同时输入 **jobuser** POSIX 用户和群组。
      + 对于队列服务角色，创建一个名为的新角色 **AssetDemoFarm-Q1-Role**
      + 清除默认 conda 队列环境复选框。

   1. 创建第二个名为的队列**Q2**。使用以下配置，对所有其他项目使用默认配置。
      + 对于任务附件，请选择**创建新的 Amazon S3 存储桶**。
      + 选择 “**启用与客户管理的车队的关联**”。
      + 对于以用户身份运行，请同时输入 **jobuser** POSIX 用户和群组。
      + 对于队列服务角色，创建一个名为的新角色 **AssetDemoFarm-Q2-Role**
      + 清除默认 conda 队列环境复选框。

1. 创建一个由客户管理的队列来运行两个队列中的作业。要创建队列，请按照[创建客户管理的队列中的步骤进行](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/create-a-cmf.html)操作。使用以下配置：
   + 对于 **“名称”**，使用**DemoFleet**。
   + 对于**舰队类型**，请选择**客户管理**
   + 对于**舰队服务角色**，创建一个名为 **AssetDemoFarm-Fleet-R** ole 的新角色。
   + 请勿将队列与任何队列关联。

测试环境假设主机之间使用网络文件共享共享三个文件系统。在此示例中，这些地点的名称如下：
+ `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 可以为您的作业生成路径映射规则，以及如何根据存储配置文件生成这些路径映射规则。

当你向 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"
}
```

 使用以下命令为工作站配置`WS1`、和工作器配置创建存储配置文件`WS2`，`WS3`并`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

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`存储配置文件不包含该队列`Q1`所需的文件系统位置`FS1`的定义。

 将配置的队列与不在队列允许的存储配置文件列表中的存储配置文件关联也会失败。例如：

```
$ 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>

 路径映射规则描述了如何将路径从作业重新映射到工作主机上路径的实际位置。当任务在工作程序上运行时，会将该作业的存储配置文件与工作人员队列的存储配置文件进行比较，以得出该任务的路径映射规则。

 Deadline Cloud 为队列配置中每个必需的文件系统位置创建映射规则。例如，使用`WSAll`存储配置文件提交到队列的作业`Q1`具有路径映射规则：
+  `FSComm`: `/shared/common -> /mnt/common` 
+  `FS1`: `/shared/projects/project1 -> /mnt/projects/project1` 

 Deadline Cloud 会为`FSComm`和`FS1`文件系统位置创建规则，但不会为`FS2`文件系统位置创建规则，即使`WSAll`和`WorkerConfig`存储配置文件都定义了也是如此`FS2`。这是因为队列`Q1`的所需文件系统位置列表是`["FSComm", "FS1"]`。

 您可以通过提交打印出 Ope [n 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}}" ]
            }
          }
        }
      }
    ]
  }'
```

 如果您使用 De [adline Cloud CLI](https://pypi.org/project/deadline/) 提交作业，则其配置`settings.storage_profile_id`设置将设置通过 CLI 提交的作业将具有的存储配置文件。要使用`WSAll`存储配置文件提交作业，请设置：

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

 要像在示例基础架构中运行一样运行客户管理的工作器，请按照《De *adline Cloud 用户指南》*中的 “[运行工作器代理](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"
        }
    ]
```

 您可以提交具有不同存储配置文件的作业，以查看路径映射规则是如何变化的。