使用 Step Functions 调用 Amazon EMR Serverless - AWS Step Functions

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

使用 Step Functions 调用 Amazon EMR Serverless

Step Functions 可以直接从 Amazon States Language (ASL) 控制某些 AWS 服务。要了解更多信息,请参阅使用其他服务将参数传递给服务 API

优化的 EMR Serverless 集成与 EMR Serverless AWS 开发工具包集成有何不同
  • 优化的 EMR Serverless 服务集成有一组自定义的 API,用于封装底层的 EMR Serverless API。由于这种自定义,优化的EMR Serverless集成与 EMR Serverless AWS SDK 服务集成有很大不同。此外,优化的 EMR Serverless 集成支持运行作业 (.sync) 集成模式。

  • 不支持等待具有任务令牌的回调集成模式。

EMR Serverless 服务集成 API

要将 AWS Step Functions 与 EMR Serverless 集成,您可以以下六个服务集成 API。这些服务集成 API 与相应的 EMR Serverless API 相似,但在传递的字段和返回的响应方面有所不同。

下表描述了每个服务集成 API 及其相应 EMR Serverless API 之间的差异。

EMR Serverless 服务集成 API 和相应的 EMR Serverless API
EMR Serverless 服务集成 API 相应的 EMR Serverless API 差异

createApplication

创建应用程序。

EMR Serverless 与一种独特类型的 IAM 角色(称为服务相关角色)关联。要使 createApplicationcreateApplication.sync 起作用,您必须配置必要的权限以创建与服务关联的角色 AWS ServiceRoleForAmazonEMRServerless。有关此问题的更多信息,包括您可以添加到 IAM 权限策略的语句,请参阅使用 EMR Serverless 的服务关联角色

CreateApplication

createApplication.sync

创建应用程序。

CreateApplication

EMR Serverless API 和 EMR Serverless 服务集成 API 的请求和响应之间没有区别。但是,createApplication.sync 会等待应用程序进入 CREATED 状态。

startApplication

启动指定的应用程序并初始化该应用程序的初始容量(如果已配置)。

StartApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

startApplication.sync

启动指定的应用程序并初始化初始容量(如果已配置)。

StartApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

此外,startApplication.sync 会等待应用程序进入 STARTED 状态。

stopApplication

停止指定的应用程序并释放初始容量(如果已配置)。在停止应用程序之前,必须完成或取消所有已计划和正在运行的作业。

StopApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

stopApplication.sync

停止指定的应用程序并释放初始容量(如果已配置)。在停止应用程序之前,必须完成或取消所有已计划和正在运行的作业。

StopApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

此外,stopApplication.sync 会等待应用程序进入 STOPPED 状态。

deleteApplication

删除应用程序 应用程序必须处于 STOPPEDCREATED 状态才能被删除。

DeleteApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

deleteApplication.sync

删除应用程序 应用程序必须处于 STOPPEDCREATED 状态才能被删除。

DeleteApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

此外,stopApplication.sync 会等待应用程序进入 TERMINATED 状态。

startJobRun

启动作业运行。

StartJobRun

startJobRun.sync

启动作业运行。

StartJobRun

EMR Serverless API 和 EMR Serverless 服务集成 API 的请求和响应之间没有区别。但是,startJobRun.sync 会等待应用程序进入状态。SUCCESS

cancelJobRun

取消作业运行。

CancelJobRun

cancelJobRun.sync

取消作业运行。

CancelJobRun

EMR Serverless API 和 EMR Serverless 服务集成 API 的请求和响应之间没有区别。但是,cancelJobRun.sync 会等待应用程序进入状态。CANCELLED

EMR 无服务器集成用例

对于优化的 EMR Serverless 服务集成,我们建议您创建单个应用程序,然后使用该应用程序运行多个作业。例如,在单个状态机中,您可以包含多个startJobRun请求,所有这些请求都使用同一个应用程序。以下 任务状态 状态示例显示了将 EMR Serverless API 与 Step Functions 集成的用例。有关 EMR Serverless 其他用例的信息,请参阅什么是 Amazon EMR Serverless

提示

要将与集成EMR Serverless用于运行多个作业的状态机示例部署到您的中 AWS 账户,请参阅运行 EMR Serverless 作业

有关在与其他 AWS 服务Step Functions一起使用时如何配置IAM权限的信息,请参阅集成服务的 IAM 策略

在以下用例所示的示例中,请将斜体文本 替换为特定于资源的信息。例如,yourApplicationId替换为EMR Serverless应用程序的 ID,例如00yv7iv71inak893

创建应用程序

以下 Task 状态示例使用 createApplication.sync 服务集成 API 创建了一个应用程序。

"Create_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:createApplication.sync", "Parameters": { "Name": "MyApplication", "ReleaseLabel": "emr-6.9.0", "Type": "SPARK" }, "End": true }

启动应用程序

以下 Task 状态示例使用 startApplication.sync 服务集成 API 启动应用程序。

"Start_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:startApplication.sync", "Parameters": { "ApplicationId": "yourApplicationId" }, "End": true }

停止应用程序

以下 Task 状态示例使用 stopApplication.sync 服务集成 API 停止应用程序。

"Stop_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:stopApplication.sync", "Parameters": { "ApplicationId": "yourApplicationId" }, "End": true }

删除应用程序

以下 Task 状态示例使用 deleteApplication.sync 服务集成 API 删除应用程序。

"Delete_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:deleteApplication.sync", "Parameters": { "ApplicationId": "yourApplicationId" }, "End": true }

启动应用程序中的作业

以下任务状态示例使用 startJobRun.sync 服务集成 API 在应用程序中启动作业。

"Start_Job": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:startJobRun.sync", "Parameters": { "ApplicationId": "yourApplicationId", "ExecutionRoleArn": "arn:aws:iam::123456789012:role/myEMRServerless-execution-role", "JobDriver": { "SparkSubmit": { "EntryPoint": "s3://<mybucket>/sample.py", "EntryPointArguments": ["1"], "SparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=4g --conf spark.driver.cores=2 --conf spark.driver.memory=4g --conf spark.executor.instances=1" } } }, "End": true }

取消应用程序中的作业

以下任务状态示例使用 cancelJobRun.sync 服务集成 API 取消应用程序中的作业。

"Cancel_Job": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:cancelJobRun.sync", "Parameters": { "ApplicationId.$": "$.ApplicationId", "JobRunId.$": "$.JobRunId" }, "End": true }