

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

# 在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板
<a name="studio-notebooks-set-up-emr-templates"></a>

本主题假设管理员熟悉[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) AWS Service Catalog、[中的产品组合和产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)以及 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)。

为了简化从 Studio 创建 Amazon EMR 集群的过程，管理员可以将亚马逊 [EMR CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)注册为产品组合中的产品。[AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)要将模板提供给数据科学家，他们必须将产品组合与 Studio 或 Studio Classic 中使用的 SageMaker AI 执行角色相关联。最后，要允许用户从 Studio 或 Studio Classic 发现模板、配置集群并连接到 Amazon EMR 集群，管理员需要设置适当的访问权限。

Amazon EMR CloudFormation 模板允许最终用户自定义集群的各个方面。例如，管理员可以定义已批准的实例类型列表，供用户在创建集群时选择。

以下说明使用 end-to-end[CloudFormation 堆栈](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started)来设置 Studio 或 Studio Classic 域名、用户个人资料、Service Catalog 产品组合，以及填充 Amazon EMR 启动模板。以下步骤重点介绍了管理员必须在其 end-to-end堆栈中应用的特定设置，才能让 Studio 或 Studio Classic 访问服务目录产品和配置 Amazon EMR 集群。

**注意**  
 GitHub 存储库 [aws-samples/ sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) 包含示例 end-to-end CloudFormation堆栈，用于部署必要的 IAM 角色、网络、 SageMaker 域、用户个人资料、Service Catalog 产品组合，并添加亚马逊 EMR 启动模板。 CloudFormation 这些模板在 Studio 或 Studio Classic 与 Amazon EMR 集群之间提供不同的身份验证选项。在这些示例模板中，父 CloudFormation 堆栈将 SageMaker AI VPC、安全组和子网参数传递给 Amazon EMR 集群模板。  
[sagemaker-studio-emr/cloudformation/emr\$1servicecatalog\$1templates 存储库包含各种亚马逊 CloudFormation EMR 启动模板](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/emr_servicecatalog_templates)示例，包括用于单账户和跨账户部署的选项。  
有关可用于连接 Amazon EMR 集群的身份验证方法的详细信息，请参阅 [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)。

要让数据科学家发现 Amazon EMR CloudFormation 模板并配置来自 Studio 或 Studio Classic 的集群，请按照以下步骤操作。

## 第 0 步：检查您的网络并准备 CloudFormation 堆栈
<a name="studio-set-up-emr-prereq"></a>

开始之前：
+ 确保已查看 [为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md) 中的联网和安全要求。
+ 您必须有一个支持您选择的身份验证方法的现有 end-to-end CloudFormation 堆栈。您可以在 [aws-sam sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub p CloudFormation les/ 存储库中找到此类模板的示例。以下步骤重点介绍了 end-to-end堆栈中的特定配置，以允许在 Studio 或 Studio Classic 中使用 Amazon EMR 模板。

## 步骤 1：将你的 Service Catalog 产品组合与 SageMaker AI 关联起来
<a name="studio-set-up-emr-service-catalog-portfolio"></a>

**在您的 Service Catalog** 产品组合中，将您的产品组合 ID 与访问您的集群的 SageMaker AI 执行角色相关联。

为此，请在堆栈中添加以下部分（此处为 YAML 格式）。这授予 SageMaker AI 执行角色访问包含亚马逊 EMR 模板等产品的指定 Service Catalog 产品组合的权限。它允许 SageMaker AI 扮演的角色发布这些产品。

 *SageMakerStudioEMRProductPortfolio.ID*用它们的实际值替换*SageMakerExecutionRole.Arn*和。

```
SageMakerStudioEMRProductPortfolioPrincipalAssociation:
    Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation
    Properties:
      PrincipalARN: SageMakerExecutionRole.Arn
      PortfolioId: SageMakerStudioEMRProductPortfolio.ID
      PrincipalType: IAM
```

有关所需的 IAM 权限集的详细信息，请参阅[权限](#studio-emr-permissions)部分。

## 步骤 2：在服务目录产品中引用 Amazon EMR 模板
<a name="studio-set-up-emr-service-catalog-product"></a>

**在产品组合的服务目录产品**中，引用 Amazon EMR 模板资源并确保其在 Studio 或 Studio Classic 中可见。

为此，请在服务目录产品定义中引用 Amazon EMR 模板资源，然后添加以下设置为 `"true"` 值的标签键 `"sagemaker:studio-visibility:emr"`（请参阅 YAML 格式的示例）。

在 Service Catalog 产品定义中，集群的 CloudFormation 模板是通过 URL 引用的。将附加标记设置为 true 可确保 Amazon EMR 模板在 Studio 或 Studio Classic 中的可见性。

**注意**  
示例中提供的 URL 所引用的 Amazon EMR 模板在启动时不会强制执行任何身份验证要求。该选项用于演示和学习。不建议在生产环境中使用。

```
SMStudioEMRNoAuthProduct:
    Type: AWS::ServiceCatalog::CloudFormationProduct
    Properties:
      Owner: AWS
      Name: SageMaker Studio Domain No Auth EMR
      ProvisioningArtifactParameters:
        - Name: SageMaker Studio Domain No Auth EMR
          Description: Provisions a SageMaker domain and No Auth EMR Cluster
          Info:
            LoadTemplateFromURL: Link to your CloudFormation template. For example, https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/astra-m4-sagemaker/end-to-end/CFN-EMR-NoStudioNoAuthTemplate-v3.yaml
      Tags:
        - Key: "sagemaker:studio-visibility:emr"
          Value: "true"
```

## 第 3 步：参数化 Amazon EMR 模板 CloudFormation
<a name="studio-set-up-emr-cfn-template"></a>

**用于在 Service Catalog 产品中定义 Amazon EMR 集群的 CloudFormation 模板**允许管理员指定可配置的参数。管理员可在模板的 `Parameters` 部分为这些参数定义 `Default` 值和 `AllowedValues` 范围。在集群启动过程中，数据科学家可以提供自定义输入或从这些预定义选项中进行选择，以自定义其 Amazon EMR 集群的某些方面。

以下示例说明了管理员在创建 Amazon EMR 模板时可以设置的其他输入参数。

```
"Parameters": {
    "EmrClusterName": {
      "Type": "String",
      "Description": "EMR cluster Name."
    },
    "MasterInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR master node.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge"
      ]
    },
    "CoreInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR core nodes.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m3.medium",
        "m3.large",
        "m3.xlarge",
        "m3.2xlarge"
      ]
    },
    "CoreInstanceCount": {
      "Type": "String",
      "Description": "Number of core instances in the EMR cluster.",
      "Default": "2",
      "AllowedValues": [
        "2",
        "5",
        "10"
      ]
    },
    "EmrReleaseVersion": {
      "Type": "String",
      "Description": "The release version of EMR to launch.",
      "Default": "emr-5.33.1",
      "AllowedValues": [
        "emr-5.33.1",
        "emr-6.4.0"
      ]
    }
  }
```

管理员在 Studio 中提供 Amazon EMR CloudFormation 模板后，数据科学家可以使用这些模板自行配置 Amazon EMR 集群。模板中定义的 `Parameters` 部分将转化为 Studio 或 Studio Classic 中集群创建表单上的输入字段。对于每个参数，数据科学家既可以在输入框中输入自定义值，也可以从下拉菜单中列出的预定义选项中进行选择，这些选项与模板中指定的 `AllowedValues` 相对应。

下图显示了根据 CloudFormation亚马逊 EMR 模板组装而成的动态表单，用于在 Studio 或 Studio Classic 中创建亚马逊 EMR 集群。

![\[从 CloudFormation 亚马逊 EMR 模板组装而成的动态表单的插图，用于从 Studio 或 Studio Classic 创建亚马逊 EMR 集群。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)


访问 [从 Studio 或 Studio Classic 启动 Amazon EMR 集群](studio-notebooks-launch-emr-cluster-from-template.md) 了解如何使用这些 Amazon EMR 模板从 Studio 或 Studio Classic 启动集群。

## 步骤 4：设置权限以启用从 Studio 列出和启动 Amazon EMR 集群
<a name="studio-emr-permissions"></a>

最后，附加所需的 IAM 权限，以启用从 Studio 或 Studio Classic 列出现有正在运行的 Amazon EMR 集群和自配置新集群。

您必须添加这些权限的角色取决于 Studio 或 Studio Classic 和 Amazon EMR 是部署在同一账户（选择*单账户*）还是不同账户（选择*跨账户*）中。

**重要**  
您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。

### 单一账户
<a name="studio-set-up-emr-permissions-singleaccount"></a>

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中，请向访问您的集群的 SageMaker AI 执行角色授予以下权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 CloudFormation 模板配置新 Amazon EMR 集群的权限。有关政策文档的详细信息，请参阅中的*创建 Amazon EMRclusters 政策*[参考策略](studio-set-up-emr-permissions-reference.md)。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

### 跨账户
<a name="studio-set-up-emr-permissions-crossaccount"></a>

在开始之前，请检索私有空间使用的 SageMaker AI 执行角色的 ARN。

有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在不同的 AWS 账户中，则需要为两个账户配置权限。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

#### 在 Amazon EMR 集群账户上
<a name="studio-set-up-emr-permissions-crossaccount-emraccount"></a>

请按照以下步骤在部署 Amazon EMR 的账户（也称为*信任账户*）上创建必要的角色和策略：

1. **步骤 1**：读取 [Amazon EMR 集群服务角色的 ARN](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)。

   要了解如何查找集群服务角色的 ARN，请参阅[为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步骤 2**：使用以下配置创建名为 `AssumableRole` 的自定义 IAM 角色：
   + 权限：向 `AssumableRole` 授予必要的权限，以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下，该角色也称为*访问角色*。
   + 信任关系：为 `AssumableRole` 配置信任策略，以允许从需要访问的 Studio 账户承担执行角色（跨账户图中的 `SageMakerExecutionRole`）。

   通过担任该角色，Studio 或 Studio Classic 可以临时访问 Amazon EMR 中所需的权限。

   有关如何在您的 Amazon EMR AWS 账户`AssumableRole`中创建新账户的详细说明，请按照以下步骤操作：

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      `studio-account`替换为 Studio 帐户 ID 和`AmazonSageMaker-ExecutionRole`您的 JupyterLab空间使用的执行角色。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      将 `studio-account` 替换为 Studio Classic 帐户 ID。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**添加权限**页面上，添加刚刚创建的权限，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `AssumableRole`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有关在 AWS 账户上创建角色的更多信息，请参阅[创建 IAM 角色（管理控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

#### Studio 账户
<a name="studio-set-up-emr-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的账户（也称为*可信账户*）上，更新访问集群的 SageMaker AI 执行角色，使其具有访问信任账户中资源所需的权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `AssumableRole` 的权限，然后执行角色访问策略允许的操作。将 `emr-account` 替换为 Amazon EMR 帐户 ID，将 `AssumableRole` 替换为 Amazon EMR 帐户中创建的可承担角色的名称。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 CloudFormation 模板配置新 Amazon EMR 集群的权限。有关政策文档的详细信息，请参阅中的*创建 Amazon EMRclusters 政策*[参考策略](studio-set-up-emr-permissions-reference.md)。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. （可选）要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群，请按照 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*中的定义，在 Studio 执行角色中添加额外的内联策略。

1. **步骤 3**：将您的假设角色（访问角色）与您的域名或用户个人资料相关联。 JupyterLab Studio 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

    选择与您的使用场景相对应的选项卡。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   要使用 SageMaker AI 控制台将您的假设角色与您的用户个人资料或域关联起来，请执行以下操作：

   1. 导航到 SageMaker AI 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

   1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

   1. 
      + 要将您的假设角色（访问角色）添加到您的域中：在域名**详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
      + 要将您的假设角色（访问角色）添加到您的用户配置文件中：在**域详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

   1. 选择 **“编辑”**， ARNs 然后添加您的假设角色（访问角色）。

   1. 选择**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole`（[RBAC 运行时角色]()的 `EMRServiceRole`）。此代码段更新了 SageMaker AI 域中特定用户配置文件（使用`client.update_userprofile`）或网域设置（使用`client.update_domain`）的用户配置文件设置。具体而言，它允许 JupyterLab 应用程序担任特定的 IAM 角色 (`AssumableRole`)，以便在亚马逊 EMR 账户中运行 Amazon EMR 集群。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   为您的 Studio Classic 执行角色提供 `AssumableRole` 的 ARN。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色，以发现并连接到*信任账户*中的 Amazon EMR 集群。

   您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息，请参阅[在 Studio Classic 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   以下为示例 LCC 脚本。要修改脚本，请将 `AssumableRole` 和 `emr-account` 替换为各自的值。跨账户的数量限制为五个。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    在 LCC 运行并且文件写入之后，服务器读取文件 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 并存储跨账户 ARN。

------