の作成と管理 Amazon EMR Serverless Step Functions を使用する アプリケーション - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

の作成と管理 Amazon EMR Serverless Step Functions を使用する アプリケーション

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 with EMR Serverlessでは、次の 6 つの を使用できます。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

アプリケーションを削除します アプリケーションを削除するには、そのアプリケーションが STOPPED または CREATED 状態になっている必要があります。

DeleteApplication

- EMR Serverless API レスポンスにはデータは含まれませんが、EMR Serverless サービス統合APIレスポンスには、次のデータが含まれます。

{ "ApplicationId": "string" }

deleteApplication同期

アプリケーションを削除します アプリケーションを削除するには、そのアプリケーションが STOPPED または CREATED 状態になっている必要があります。

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 サービス統合では、1 つのアプリケーションを作成し、そのアプリケーションを使用して複数のジョブを実行することをお勧めします。例えば、1 台のステートマシンで複数のstartJobRunリクエストを含めることができ、そのすべてが同じアプリケーションを使用します。次のタスクワークフローの状態状態例は、統合のユースケースを示しています。EMR Serverless APIs で Step Functions。 のその他のユースケースについては、「」を参照してください。EMR Serverless、「 とは」を参照してください。Amazon EMR Serverless.

ヒント

と統合するステートマシンの例をデプロイするには EMR Serverless で複数のジョブを実行する場合 AWS アカウント「を実行する EMR Serverless ジョブ」を参照してください。

の設定について学ぶには 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:SourceARN および aws:SourceAccount のコンテキストキーを追加することをお勧めします。

IAM EMRサーバーレスと Step Functions の統合に関する ポリシーの例

IAM の ポリシーの例 CreateApplication

以下は、 状態のステートマシン CreateApplication タスクワークフローの状態のIAMポリシーの例です。

注記

アカウントで初めてアプリケーションを作成するときは、IAMポリシーで CreateServiceLinkedRole アクセス許可を指定する必要があります。それ以降、この許可を追加する必要はありません。の詳細については CreateServiceLinkedRole、 https://docs.aws.amazon.com/IAM/latest// のCreateServiceLinkedRoleAPIReference「」を参照してください。

以下のポリシーは、静的リソースと動的リソースで同じです。

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