建立和管理 Amazon EMR Serverless 具有 Step Functions 的應用程式 - AWS Step Functions

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

建立和管理 Amazon EMR Serverless 具有 Step Functions 的應用程式

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

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

Optimized 的主要功能 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.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 APIs 使用 Step Functions。 如需 其他使用案例的相關資訊 EMR Serverless,請參閱什麼是 Amazon EMR Serverless.

提示

部署與 整合的狀態機器範例 EMR Serverless 如需執行多個任務到您的 AWS 帳戶,請參閱 執行 EMR Serverless job

了解設定 IAM 使用 時的 許可 Step Functions 搭配其他服務 AWS ,請參閱Step Functions 式如何為整合式服務產生IAM原則

在下列使用案例中顯示的範例中,將italicized文字取代為您的資源特定資訊。例如,將 取代yourApplicationId為 的 ID 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 內容金鑰。

IAM 與 Step Functions 無EMR伺服器整合的政策範例

IAM 的政策範例 CreateApplication

以下是 狀態機器IAM CreateApplication 任務工作流程狀態的政策範例。

注意

您需要在建立帳戶中第一個應用程式時,在IAM政策中指定 CreateServiceLinkedRole 許可。之後,您不需要新增此許可。如需詳細資訊 CreateServiceLinkedRole,請參閱 CreateServiceLinkedRole 中的 https://docs.aws.amazon.com/IAM/latest/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

靜態資源

以下是當您使用狀態機器搭配 StartApplication 任務工作流程狀態 狀態時靜態資源IAM的政策範例。

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]]" ] } ] }
動態資源

以下是當您使用 狀態機器搭配 StartApplication 任務工作流程狀態 狀態時,動態資源IAM的政策範例。

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

靜態資源

以下是當您使用狀態機器搭配 StopApplication 任務工作流程狀態 狀態時靜態資源IAM的政策範例。

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]]" ] } ] }
動態資源

以下是當您使用 狀態機器搭配 StopApplication 任務工作流程狀態 狀態時,動態資源IAM的政策範例。

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

靜態資源

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

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]]" ] } ] }
動態資源

以下是當您使用 狀態機器搭配 DeleteApplication 任務工作流程狀態 狀態時,動態資源IAM的政策範例。

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

靜態資源

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

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" } } } ] }
動態資源

以下是當您使用 狀態機器搭配 StartJobRun 任務工作流程狀態 狀態時,動態資源IAM的政策範例。

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

靜態資源

以下是當您使用狀態機器搭配 CancelJobRun 任務工作流程狀態 狀態時靜態資源IAM的政策範例。

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]]" ] } ] }
動態資源

以下是當您使用 狀態機器搭配 CancelJobRun 任務工作流程狀態 狀態時,動態資源IAM的政策範例。

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/*" ] } ] }