建立和管理 Amazon EMR Serverless 具有步進功能的應用 - AWS Step Functions

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

建立和管理 Amazon EMR Serverless 具有步進功能的應用

了解如何使用 Step Functions 在EMR無伺服器上建立、啟動、停止和刪除應用程式。此頁面列出支援的項目,APIs並提供執行常見使用案例的範例Task狀態。

若要瞭解如何整合 AWS 服務在 Step Functions 中,請參閱整合 服務和。將參數傳遞給 Step Functions 數API中的服務

最佳化的主要功能 EMR Serverless 整合
  • 最佳化 EMR Serverless 服務集成有一組自定義APIs的包裝底層 EMR Serverless APIs。由於這種定制,優化 EMR Serverless 集成顯著不同於 AWS SDK服務整合。

  • 此外,優化 EMR Serverless 集成支持執行任務 (.sync)集成模式。

  • 支援使用任務令牌等待回調整合模式。

EMR Serverless 服務整合 APIs

若要整合 AWS Step Functions 取代為 EMR Serverless,你可以使用以下六個 EMR Serverless 服務整合APIs。這些服務整APIs合類似於對應 EMR Serverless APIs,在傳遞的欄位和傳回的回應中存在一些差異。

下表說明兩者之間的差異 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. 同步

建立應用程式。

CreateApplication

請求和響應之間沒有區別 EMR Serverless API和 EMR Serverless 服務整合API。不過,createApplication.sync 會等待應用程式到達狀態CREATED

startApplication

啟動指定的應用程式,並初始化應用程式的初始容量 (若已設定)。

StartApplication

所以此 EMR Serverless API響應不包含任何數據,但 EMR Serverless 服務整合API回應包括下列資料。

{ "ApplicationId": "string" }

startApplication. 同步

啟動指定的應用程式並初始化初始容量 (如果已設定)。

StartApplication

所以此 EMR Serverless API響應不包含任何數據,但 EMR Serverless 服務整合API回應包括下列資料。

{ "ApplicationId": "string" }

此外,startApplication.sync 會等待應用程式到達狀態STARTED

stopApplication

停止指定的應用程式並釋放初始容量 (若已設定)。停止應用程式之前,必須完成或取消所有已排定和執行中的工作。

StopApplication

所以此 EMR Serverless API響應不包含任何數據,但 EMR Serverless 服務整合API回應包括下列資料。

{ "ApplicationId": "string" }

stopApplication. 同步

停止指定的應用程式並釋放初始容量 (若已設定)。停止應用程式之前,必須完成或取消所有已排定和執行中的工作。

StopApplication

所以此 EMR Serverless API響應不包含任何數據,但 EMR Serverless 服務整合API回應包括下列資料。

{ "ApplicationId": "string" }

此外,stopApplication.sync 會等待應用程式到達狀態STOPPED

deleteApplication

刪除應用程式。應用程式必須處於STOPPEDCREATED狀態,才能刪除。

DeleteApplication

所以此 EMR Serverless API響應不包含任何數據,但 EMR Serverless 服務整合API回應包括下列資料。

{ "ApplicationId": "string" }

deleteApplication. 同步

刪除應用程式。應用程式必須處於STOPPEDCREATED狀態,才能刪除。

DeleteApplication

所以此 EMR Serverless API響應不包含任何數據,但 EMR Serverless 服務整合API回應包括下列資料。

{ "ApplicationId": "string" }

此外,stopApplication.sync 會等待應用程式到達狀態TERMINATED

startJobRun

開始工作執行。

StartJobRun

startJobRun. 同步

開始工作執行。

StartJobRun

請求和響應之間沒有區別 EMR Serverless API和 EMR Serverless 服務整合API。不過,startJobRun.sync 會等待應用程式到達狀態SUCCESS

cancelJobRun

取消工作執行。

CancelJobRun

cancelJobRun. 同步

取消工作執行。

CancelJobRun

請求和響應之間沒有區別 EMR Serverless API和 EMR Serverless 服務整合API。不過,cancelJobRun.sync 會等待應用程式到達狀態CANCELLED

EMR無伺服器整合使用案例

針對最佳化 EMR Serverless 服務整合,建議您建立單一應用程式,然後使用該應用程式來執行多個作業。例如,在單一狀態機器中,您可以包含多個startJobRun要求,所有要求都使用相同的應用程式。下列工作流程狀態狀態範例顯示要整合的使用案例 EMR Serverless APIs與 Step Functions。 有關其他用例的信息 EMR Serverless,請參閱什麼是 Amazon EMR Serverless.

提示

若要部署整合的狀態機器範例 EMR Serverless 用於運行多個作業 AWS 帳戶,請參閱運行一個 EMR Serverless job

若要瞭解設定 IAM 使用時的權限 Step Functions 與其他 AWS 服務,請參閱Step Functions 式如何為整合式服務產生IAM原則

在下列使用案例所示的範例中,取代 italicized 包含資源特定資訊的文字。例如,取代 yourApplicationId 使用您的身份證 EMR Serverless 應用程式,例如00yv7iv71inak893

建立應用程式

下列工作狀態範例會使用 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 }

啟動應用程式

下列工作狀態範例會使用 startApplication.sync 服務整合API來啟動應用程式。

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

停止應用程式

下列工作狀態範例會停止使用 stopApplication.sync 服務整合API的應用程式。

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

刪除應用程式

下列工作狀態範例會刪除使用 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://<amzn-s3-demo-bucket>/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 }

IAM呼叫的原則 Amazon EMR Serverless

當您使用控制台建立狀態機時,Step Functions 以所需的最少權限自動為狀態機建立執行角色。這些自動生成 IAM 角色適用於 AWS 區域 您可以在其中建立狀態機器。

下面的示例模板顯示如何 AWS Step Functions 根據狀態機器定義中的資源產生IAM策略。如需詳細資訊,請參閱 Step Functions 式如何為整合式服務產生IAM原則探索 Step Functions 中的服務整合模式

我們建議您在創建時 IAM 策略中,不要在策略中包含萬用字元。作為安全性最佳做法,您應該盡可能縮小原則的範圍。只有在執行階段期間不知道某些輸入參數時,才應使用動態原則。

此外,管理員使用者在授與執行狀態機器的非系統管理員使用者執行角色時,應該小心。如果您要自行建立 passRole 原則,建議您在執行角色中包含原則。我們也建議您在執行角色中新增aws:SourceARNaws:SourceAccount內容索引鍵。

IAMEMR無伺服器與 Step Functions 數整合的原則範例

IAM政策範例 CreateApplication

以下是具有狀態之狀態機器的IAM原則範例。 CreateApplication 工作流程狀態

注意

在帳戶中建立第一個應用程式時,您必須在IAM原則中指定 CreateServiceLinkedRole 權限。此後,您無需添加此權限。若要取得有關的資訊 CreateServiceLinkedRole,請參閱CreateServiceLinkedRole最新的 https://docs.aws.amazon.com/IAM///APIReference中的。

下列原則的靜態和動態資源是相同的。

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CreateApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/*" ] }, { "Effect": "Allow", "Action": [ "emr-serverless:GetApplication", "emr-serverless:DeleteApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule" ] }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::{{accountId}}:role/aws-service-role/ops.emr-serverless.amazonaws.com/AWS ServiceRoleForAmazonEMRServerless*", "Condition": { "StringLike": { "iam:AWSServiceName": "ops.emr-serverless.amazonaws.com" } } } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CreateApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/*" ] }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::{{accountId}}:role/aws-service-role/ops.emr-serverless.amazonaws.com/AWS ServiceRoleForAmazonEMRServerless*", "Condition": { "StringLike": { "iam:AWSServiceName": "ops.emr-serverless.amazonaws.com" } } } ] }

IAM政策範例 StartApplication

靜態資源

以下是當您使用具有狀態的狀態機器時,靜態資源的IAM StartApplication 工作流程狀態政策範例。

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartApplication", "emr-serverless:GetApplication", "emr-serverless:StopApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] } ] }
動態資源

以下是使用具有狀態的狀態機器時,動態資源的IAM政策範例。 StartApplication 工作流程狀態

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartApplication", "emr-serverless:GetApplication", "emr-serverless:StopApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] } ] }

IAM政策範例 StopApplication

靜態資源

以下是當您使用具有狀態的狀態機器時,靜態資源的IAM StopApplication 工作流程狀態政策範例。

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StopApplication", "emr-serverless:GetApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StopApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] } ] }
動態資源

以下是使用具有狀態的狀態機器時,動態資源的IAM政策範例。 StopApplication 工作流程狀態

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StopApplication", "emr-serverless:GetApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StopApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] } ] }

IAM政策範例 DeleteApplication

靜態資源

以下是當您使用具有狀態的狀態機器時,靜態資源的IAM DeleteApplication 工作流程狀態政策範例。

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:DeleteApplication", "emr-serverless:GetApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:DeleteApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] } ] }
動態資源

以下是使用具有狀態的狀態機器時,動態資源的IAM政策範例。 DeleteApplication 工作流程狀態

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:DeleteApplication", "emr-serverless:GetApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:DeleteApplication" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] } ] }

IAM政策範例 StartJobRun

靜態資源

以下是當您使用具有狀態的狀態機器時,靜態資源的IAM StartJobRun 工作流程狀態政策範例。

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "[[jobExecutionRoleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "emr-serverless:GetJobRun", "emr-serverless:CancelJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]/jobruns/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessJobRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "[[jobExecutionRoleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } } ] }
動態資源

以下是使用具有狀態的狀態機器時,動態資源的IAM政策範例。 StartJobRun 工作流程狀態

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartJobRun", "emr-serverless:GetJobRun", "emr-serverless:CancelJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "[[jobExecutionRoleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessJobRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "[[jobExecutionRoleArn]]" ], "Condition": { "StringEquals": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } } ] }

IAM政策範例 CancelJobRun

靜態資源

以下是當您使用具有狀態的狀態機器時,靜態資源的IAM CancelJobRun 工作流程狀態政策範例。

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CancelJobRun", "emr-serverless:GetJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]/jobruns/[[jobRunId]]" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessJobRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CancelJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/[[applicationId]]/jobruns/[[jobRunId]]" ] } ] }
動態資源

以下是使用具有狀態的狀態機器時,動態資源的IAM政策範例。 CancelJobRun 工作流程狀態

Run a Job (.sync)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CancelJobRun", "emr-serverless:GetJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:{{region}}:{{accountId}}:rule/StepFunctionsGetEventsForEMRServerlessJobRule" ] } ] }
Request Response
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CancelJobRun" ], "Resource": [ "arn:aws:emr-serverless:{{region}}:{{accountId}}:/applications/*" ] } ] }