

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

# 使用 API 创建用于时间序列预测的 AutoML 作业
<a name="autopilot-create-experiment-timeseries-forecasting"></a>

在机器学习中，预测是指根据历史数据和模式预测未来结果或趋势的过程。通过分析过去的时间序列数据并识别潜在模式，机器学习算法可以进行预测并提供对未来行为的有价值见解。预测的目标是开发模型，使其能够准确地捕捉一段时间内输入变量与目标变量之间关系。这涉及到研究各种因素，例如数据中的趋势、季节性和其他相关模式。然后，使用收集的信息来训练机器学习模型。模型在经过训练后，应该能够通过获取新的输入数据并应用学到的模式和关系来生成预测。它可以为各种使用场景提供预测，例如销售预测、股票市场趋势、天气预报、需求预测等等。

以下说明说明如何使用 SageMaker [API](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-reference.html) 参考创建 Amazon A SageMaker utopilot 作业作为时间序列预测问题类型的试点实验。

**注意**  
文本和映像分类、时间序列预测和大型语言模型微调等任务都可以通过 [AutoML REST API](autopilot-reference.md) 的第 2 版独家实现。如果你选择的语言是 Python，你可以直接参考[适用于 Python (Boto3) 的 AWS SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_auto_ml_job_v2.html)或 Amazon Pyth SageMaker on 软件开发工具包的 A [utoLv2 对象](https://sagemaker.readthedocs.io/en/stable/api/training/automlv2.html#sagemaker.automl.automlv2.AutoMLV2)。  
喜欢用户界面便利性的用户可以使用 [Amazon SageMaker Canv](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas-getting-started.html) as 访问预训练模型和生成式 AI 基础模型，或者创建针对特定文本、图像分类、预测需求或生成式 AI 量身定制的自定义模型。

您可以使用 Amazon Autopilot 支持的任何语言调用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html)API 或者，以编程方式创建 SageMaker 自动驾驶时间序列预测实验。 AWS CLI

有关此 API 操作如何转换为所选语言中函数的信息，请参阅 `CreateAutoMLJobV2` 中的[另请参阅](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#API_CreateAutoMLJobV2_SeeAlso)部分并选择 SDK。例如，对于 Python 用户，请参阅 适用于 Python (Boto3) 的 AWS SDK中 `[create\_auto\_ml\_job\_v2](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_auto_ml_job_v2)` 的完整请求语法。

Autopilot 使用您的目标时间序列数据训练多个候选模型，然后为给定的目标指标选择最佳预测模型。当您的候选模型接受过训练后，您可以在对 `[DescribeAutoMLJobV2](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html)` 的回复中的 `[BestCandidate](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CandidateProperties.html#sagemaker-Type-CandidateProperties-CandidateMetrics)` 位置找到最佳候选指标。

以下各节定义了对于在时间序列预测中使用的 `CreateAutoMLJobV2` API，所必需和可选输入请求参数。

**注意**  
有关实用的时间序[Time-Series 列预测示例，请参阅笔记本使用 SageMaker Amazon Autopilot](https://github.com/aws/amazon-sagemaker-examples/blob/main/autopilot/autopilot_time_series.ipynb) 进行预测。在本笔记本中，您可以使用 Amazon A SageMaker utopilot 来训练时间序列模型，并使用经过训练的模型进行预测。笔记本提供了在 Amazon S3 上检索现成的表格历史数据集的说明。

## 先决条件
<a name="autopilot-timeseries-forecasting-prerequisites"></a>

在使用 Autopilot 在 A SageMaker I 中创建时间序列预测实验之前，请确保：
+ 准备您的时间序列数据集。数据集的准备涉及到从各种来源收集相关数据，清理和筛选数据以消除噪音和不一致的内容，然后将其整理为结构化的格式。要详细了解 Autopilot 中的时间序列格式要求，请参阅[Time-series 数据集格式和缺失值填充方法](timeseries-forecasting-data-format.md)。或者，您可以使用所选国家/地区的公共假日日历来补充数据集，以便捕获相关的模式。有关假日日历的更多信息，请参阅[国家法定假日日历](autopilot-timeseries-forecasting-holiday-calendars.md)。
**注意**  
我们建议，每预测 1 个未来数据点，至少提供 3-5 个历史数据点。例如，若要根据每日数据提前 7 天（1 周）进行预测，则至少要根据 21-35 天的历史数据对模型进行训练。确保提供足够的数据，以捕捉季节性和经常性规律。
+ 将您的时间序列数据放入 Amazon S3 存储桶中。
+ 授予对包含用于运行实验的 Amazon S3 执行角色的输入数据的 SageMaker Amazon S3 存储桶的完全访问权限。完成此操作后，您可以在 Autopilot API 请求中使用此执行角色的 ARN。
  + 有关检索 SageMaker AI 执行角色的信息，请参阅[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。
  + 有关向您的 SageMaker AI 执行角色授予访问 Amazon S3 中一个或多个特定存储桶的权限的信息，请参阅中的向 A * SageMaker I 执行角色添加其他 Amazon S3 权限*。[创建执行角色](sagemaker-roles.md#sagemaker-roles-create-execution-role)

## 必填参数
<a name="timeseries-forecasting-api-required-params"></a>

在调用 `[CreateAutoMLJobV2](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html)` 以创建 Autopilot 实验进行时间序列预测时，您必须提供以下值：
+ `[AutoMLJobName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#API_CreateAutoMLJobV2_RequestSyntax)`，用于指定您作业的名称。名称应为 `string` 类型，最小长度为 1 个字符，最大长度为 32 个字符。
+ `[AutoMLJobInputDataConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLJobInputDataConfig)` 中的至少一个 `[AutoMLJobChannel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLJobChannel.html)`，在其中指定包含数据的 Amazon S3 存储桶的名称。或者，您可以指定内容（CSV 或 Parquet 文件）和压缩 (GZip) 类型。
+ 类型为 `[TimeSeriesForecastingJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesForecastingJobConfig.html)` 的 `[AutoMLProblemTypeConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLProblemTypeConfig)`，用于配置时间序列预测作业的设置。具体而言，您必须指定：
  + 预测的**频率**，这是指预测的所需粒度（每小时、每天、每月等）。

    有效间隔是一个整数，后跟 `Y`（年）、`M`（月）、`W`（周）、`D`（日）、`H`（小时）和 `min`（分钟）。例如，`1D` 表示每天，`15min` 表示每 15 分钟。频率的值不得与下一个更大频率重叠。例如，您必须使用频率 `1H` 而不是 `60min`。

    每个频率的有效值如下所示：
    + 分钟 - 1-59
    + 小时 - 1-23
    + 天 - 1-6
    + 周 - 1-4
    + 月 - 1-11
    + 年 - 1
  + 预测中的预测**范围**，指的是模型预测的时间步长。预测范围也称为预测长度。最大预测范围是 500 个时间步长或数据集中的时间步 1/4 长中较小的一个。
  + 其中 [TimeSeriesConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesConfig.html)，您可以通过指定以下内容来定义数据集的架构，以将列标题映射到您的预测：
    + `TargetAttributeName`：该列包含要预测目标字段的历史数据。
    + `TimestampAttributeName`：该列包含记录给定项目的目标值的时间点。
    + `ItemIdentifierAttributeName`：该列包含要预测目标值的项目标识符。

  以下是指定请求参数的示例。在此示例中，您设置的是在 20 天的时段中，对特定项目的预期数量或需求水平进行每日预测。

  ```
  "AutoMLProblemTypeConfig": { 
          "ForecastFrequency": "D",
          "ForecastHorizon": 20,
          "TimeSeriesConfig": {
              "TargetAttributeName": "demand",
              "TimestampAttributeName": "timestamp",
              "ItemIdentifierAttributeName": "item_id"
          },
  ```
+ `[OutputDataConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLOutputDataConfig.html)`，指定用于存储 AutoML 作业构件的 Amazon S3 输出路径。
+ `[RoleArn](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJob.html#sagemaker-CreateAutoMLJob-request-RoleArn)`，指定用于访问您的数据的角色的 ARN。您可以使用已授予对数据访问权限的执行角色的 ARN。

所有其他参数都是可选的。例如，您可以设置特定的预测分位数，为数据集中的缺失值选择填充方法，或者定义如何聚合与预测频率不一致的数据。要了解如何设置这些附加参数，请参阅[可选参数](#timeseries-forecasting-api-optional-params)。

## 可选参数
<a name="timeseries-forecasting-api-optional-params"></a>

以下各节提供了一些可以传递给时间序列预测 AutoML 作业的可选参数的详细信息。

### 如何指定算法
<a name="timeseries-forecasting-algorithms-selection"></a>

默认情况下，Autopilot 作业会在数据集上训练预先定义的算法列表。不过，您可以提供默认算法选择的子集。

对于时间序列预测，必须选择 `[TimeSeriesForecastingJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesForecastingJobConfig.html)` 作为 `[AutoMLProblemTypeConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLProblemTypeConfig)` 的类型。

然后，可以在的`AlgorithmsConfig`属性`AutoMLAlgorithms`中指定选定的数组[CandidateGenerationConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CandidateGenerationConfig.html)。

下面是一个 `AlgorithmsConfig` 属性的示例，在其 `AutoMLAlgorithms` 字段中正好列出了三种算法（“cnn-qr”、“prophet”和“arima”）。

```
{
   "[AutoMLProblemTypeConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLProblemTypeConfig)": {
        "[TimeSeriesForecastingJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesForecastingJobConfig.html)": {
          "[CandidateGenerationConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CandidateGenerationConfig.html)": {
            "[AlgorithmsConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CandidateGenerationConfig.html#sagemaker-Type-CandidateGenerationConfig-AlgorithmsConfig)":[
               {"[AutoMLAlgorithms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLAlgorithmConfig.html)":["cnn-qr", "prophet", "arima"]}
            ]
         },
       },
     },
  }
```

有关可用的时间序列预测算法列表，请参见 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLAlgorithmConfig.html#sagemaker-Type-AutoMLAlgorithmConfig-AutoMLAlgorithms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLAlgorithmConfig.html#sagemaker-Type-AutoMLAlgorithmConfig-AutoMLAlgorithms)。有关每种算法的详细信息，请参阅[时间序列预测支持的算法](timeseries-forecasting-algorithms.md)。

### 如何指定自定义分位数
<a name="timeseries-forecasting-custom-quantiles"></a>

Autopilot 使用您的目标时间序列数据训练 6 个候选模型，然后使用堆叠组合方法将这些模型结合起来，针对给定目标指标创建最佳的预测模型。每个 Autopilot 预测模型都通过生成分位数在 P1 和 P99 之间的预测来生成概率预测。这些分位数用于解释预测的不确定性。默认情况下，将为 0.1 (`p10`)、0.5 (`p50`) 和 0.9 (`p90`) 生成预测。您可以选择指定自己的分位数。

在 Autopilot 中，您最多可以在 0.01 (`p1`) 到 0.99 (`p99`) 之间指定五个预测分位数，增量为 0.01 或更高。`ForecastQuantiles` [TimeSeriesForecastingJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesForecastingJobConfig.html)

在以下示例中，您设置的是在 20 天的时段中，对特定项目的预期数量或需求水平的每日第 10 个、第 25 个、第 50 个、第 75 个和第 90 个分位数进行预测。

```
"AutoMLProblemTypeConfig": { 
        "ForecastFrequency": "D",
        "ForecastHorizon": 20,
        "ForecastQuantiles": ["p10", "p25", "p50", "p75", "p90"],
        "TimeSeriesConfig": {
            "TargetAttributeName": "demand",
            "TimestampAttributeName": "timestamp",
            "ItemIdentifierAttributeName": "item_id"
        },
```

### 如何聚合不同预测频率的数据
<a name="timeseries-forecasting-aggregation"></a>

要创建预测模型（也称为实验中的最佳候选模型），您必须指定预测频率。在您的预测中，预测频率决定了进行预测的频率。例如，每月销售预测。Autopilot 最佳模型为数据生成预测的频率，可以大于所记录数据的频率。

在训练期间，Autopilot 会聚合与您指定的预测频率不一致的所有数据。例如，您可能有一些每日数据，但指定了每周预测频率。Autopilot 会根据每日数据所属的周来调整每日数据。然后，Autopilot 将其合并为每周的单个记录。

在聚合期间，默认的转换方法是对数据求和。您可以在的`Transformations`属性中创建 AutoML 作业时配置聚合。[TimeSeriesForecastingJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesForecastingJobConfig.html)支持的聚合方法包括 `sum`（默认）、`avg`、`first`、`min`、`max`。只有目标列支持聚合。

在以下示例中，您将配置聚合来计算单个促销预测的平均值，从而提供最终的聚合预测值。

```
"Transformations": {
            "Aggregation": {
                "promo": "avg"
            }
        }
```

### 如何处理输入数据集中的缺失值
<a name="timeseries-forecasting-fill-missing-values"></a>

Autopilot 提供了多种填充方法，用于处理时间序列数据集的目标列和其他数字列中的缺失值。有关支持的填充方法列表及其可用填充逻辑的信息，请参阅[处理缺失值](timeseries-forecasting-data-format.md#timeseries-missing-values)。

创建 AutoML 作业[TimeSeriesForecastingJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesForecastingJobConfig.html)时，可以在的`Transformations`属性中配置填充策略。

要设置填充方法，您需要提供一个键/值对：
+ 键是要为其指定填充方法的列的名称。
+ 与键关联的值是一个对象，它定义该列的填充策略。

您可以为单个列指定多种填充方法。

要为填充方法设置特定值，您应将填充参数设置为所需的填充方法值（例如 `"backfill" : "value"`），并在带有“\_value”后缀的其他参数中定义实际填充值。例如，要将 `backfill` 设置为值 `2`，您必须包括两个参数：`"backfill": "value"` 和 `"backfill_value":"2"`。

在以下示例中，您可以为不完整的数据列“price”指定填充策略，如下所示：项目第一个数据点和最后一个数据点之间的所有缺失值都设置为 `0`，之后所有缺失值都将填充值 `2`，直至数据集的结束日期值。

```
"Transformations": {
            "Filling": {
                "price": {
                        "middlefill" : "zero",
                        "backfill" : "value",
                        "backfill_value": "2"
                }
            }
        }
```

### 如何指定目标指标
<a name="timeseries-forecasting-set-objective-metric"></a>

Autopilot 会生成准确性指标来评估候选模型，帮助您选择使用哪个模型来生成预测。运行时间序列预测实验时，您可以选择 AutoML，让 Autopilot 为您优化预测变量，也可以手动为预测变量选择算法。

默认情况下，Autopilot 使用平均加权分位数损失。但是，您可以在的`MetricName`属性中创建 AutoML 作业时配置目标指标。[AutoMLJobObjective](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLJobObjective.html)

有关可用算法的列表，请参阅[时间序列预测支持的算法](timeseries-forecasting-algorithms.md)。

### 如何将国家法定假日信息整合到数据集中
<a name="timeseries-forecasting-add-holiday-calendar"></a>

在 Autopilot 中，您可以将经过特征工程处理的国家法定假日信息数据集整合到您的时间序列中。Autopilot 原生提供了对 250 多个国家/地区的假日日历的支持。选择国家/地区后，Autopilot 会在训练期间，将该国家/地区的假日日历应用于数据集中的每个项目。这使模型能够识别与特定假日关联的模式。

在创建 AutoML 作业时，您可以通过将[HolidayConfigAttributes](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HolidayConfigAttributes.html)对象传递给的属性来启用假日功能。`HolidayConfig` [TimeSeriesForecastingJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TimeSeriesForecastingJobConfig.html)`HolidayConfigAttributes` 对象包含两个字母的 `CountryCode` 属性，确定扩充时间序列数据集时，使用哪个国家/地区的国家法定公共假日日历。

有关支持的日历及其相应的国家/地区代码的列表，请参阅[国家/地区代码](autopilot-timeseries-forecasting-holiday-calendars.md#holiday-country-codes)。

### 如何启用自动部署
<a name="timeseries-forecasting-auto-model-deployment"></a>

使用 Autopilot，您可以将预测模型自动部署到端点。要为 AutoML 作业的最佳候选模型启用自动部署，请在 AutoML 任务请求中包括 `[ModelDeployConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-ModelDeployConfig)`。这允许将最佳模型部署到 A SageMaker I 端点。以下是可供自定义的配置。
+ 要让 Autopilot 生成端点名称，请将 `[AutoGenerateEndpointName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelDeployConfig.html#API_ModelDeployConfig_Contents)` 设置为 `True`。
+ 要为端点提供自己的名称，请设置 `[AutoGenerateEndpointName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelDeployConfig.html#API_ModelDeployConfig_Contents) to False and provide a name of your choice in [EndpointName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelDeployConfig.html#API_ModelDeployConfig_Contents)`。

### 如何配置 AutoML 以在 EMR Serverless 上为大型数据集启动远程作业
<a name="autopilot-set-emr-serverless-api-forecasting"></a>

您可以配置 AutoML 作业 V2，以便在处理大型数据集需要额外计算资源时，自动启动 Amazon EMR Serverless 上的远程作业。通过在需要时无缝过渡到 EMR Serverless，AutoML 作业可以处理超出初始资源配置的数据集，而无需您进行任何人工干预。EMR Serverless 可用于表格和时间序列问题类型。我们建议为大于 30 GB 的时间序列数据集设置此选项。

要让 AutoML 作业 V2 自动过渡到针对大型数据集的 EMR Serverless，您需要向 AutoML 作业 V2 输入请求的 `AutoMLComputeConfig` 提供一个 `EmrServerlessComputeConfig` 对象，其中包括一个 `ExecutionRoleARN` 字段。

`ExecutionRoleARN` 是 IAM 角色的 ARN，授予 AutoML 作业 V2 运行 EMR Serverless 作业所需的权限。

该角色应具有以下信任关系：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "emr-serverless.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

并授予权限进行：
+ 创建、列出和更新 EMR Serverless 应用程序。
+ 在 EMR Serverless 应用程序上启动、列出、获取或取消作业运行。
+ 标记 EMR Serverless 资源。
+ 将 IAM 角色传递给 EMR Serverless 服务以执行。

  通过授予 `iam:PassRole` 权限，AutoML 作业 V2 可以临时承担 `EMRServerlessRuntimeRole-*` 角色，并将其传递给 EMR Serverless 服务。EMR Serverless 任务执行环境使用这些 IAM 角色来访问运行时所需的其他 AWS 服务和资源，例如 Amazon S3，用于访问数据、记录、访问 AWS Glue 数据目录或其他基于您的工作负载 CloudWatch 要求的服务。

  有关此角色权限的详细信息，请参阅 [Amazon EMR Serverless 的作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。

所提供 JSON 文档中定义的 IAM 策略会授予这些权限：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
           "Sid": "EMRServerlessCreateApplicationOperation",
           "Effect": "Allow",
           "Action": "emr-serverless:CreateApplication",
           "Resource": "arn:aws:emr-serverless:*:*:/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/sagemaker:is-canvas-resource": "True",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "EMRServerlessListApplicationOperation",
            "Effect": "Allow",
            "Action": "emr-serverless:ListApplications",
            "Resource": "arn:aws:emr-serverless:*:*:/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "EMRServerlessApplicationOperations",
            "Effect": "Allow",
            "Action": [
                "emr-serverless:UpdateApplication",
                "emr-serverless:GetApplication"
            ],
            "Resource": "arn:aws:emr-serverless:*:*:/applications/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sagemaker:is-canvas-resource": "True",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "EMRServerlessStartJobRunOperation",
            "Effect": "Allow",
            "Action": "emr-serverless:StartJobRun",
            "Resource": "arn:aws:emr-serverless:*:*:/applications/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/sagemaker:is-canvas-resource": "True",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "EMRServerlessListJobRunOperation",
            "Effect": "Allow",
            "Action": "emr-serverless:ListJobRuns",
            "Resource": "arn:aws:emr-serverless:*:*:/applications/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sagemaker:is-canvas-resource": "True",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "EMRServerlessJobRunOperations",
            "Effect": "Allow",
            "Action": [
                "emr-serverless:GetJobRun",
                "emr-serverless:CancelJobRun"
            ],
            "Resource": "arn:aws:emr-serverless:*:*:/applications/*/jobruns/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sagemaker:is-canvas-resource": "True",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "EMRServerlessTagResourceOperation",
            "Effect": "Allow",
            "Action": "emr-serverless:TagResource",
            "Resource": "arn:aws:emr-serverless:*:*:/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/sagemaker:is-canvas-resource": "True",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "IAMPassOperationForEMRServerless",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/EMRServerlessRuntimeRole-*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
         }
    ]
}
```

------