Step Functions で Amazon EMR Serverless アプリケーションを作成および管理する
Step Functions を使用して EMR Serverless でアプリケーションを作成、開始、停止、削除する方法について説明します。このページでは、サポートされている API を一覧表示し、一般的なユースケースを実行するための Task
状態の例を示します。
Step Functions で AWS サービスと統合することについては、「 サービスとの統合」および「Step Functions でサービス API にパラメータを渡す」を参照してください。
最適化された EMR Serverless 統合の主な機能
-
最適化された EMR Serverless サービス統合には、基になる EMR Serverless API をラップする API のカスタマイズされたセットがあります。このカスタマイズにより、最適化された EMR Serverless 統合は AWS SDK サービス統合とは大きく異なるものになります。
-
さらに、最適化された EMR Serverless 統合は ジョブの実行 (.sync) 統合パターンをサポートします。
-
タスクトークンのコールバックまで待機する 統合パターンはサポートされていません。
EMR Serverless サービス統合 API
AWS Step Functions を EMR Serverless と統合するために、以下の 6 つの EMR Serverless サービス統合 API を使用できます。これらのサービス統合 API は、対応する EMR Serverless API に似ていますが、渡されるフィールドと返される応答にいくつかの違いがあります。
各 EMR Serverless サービス統合 API と対応する EMR Serverless API の違いを次の表に示します。
EMR Serverless サービス統合 API | 対応する EMR Serverless API | 差異 |
---|---|---|
createApplication アプリケーションを作成します。 EMR Serverless はサービスリンクロールとして知られる IAM ロールの一意のタイプにリンクされています。 |
CreateApplication | なし |
createApplication.sync アプリケーションを作成します。 |
CreateApplication |
EMR Serverless API と EMR Serverless サービス統合 API のリクエストとレスポンスには違いはありません。ただし、createApplication.sync はアプリケーションが |
startApplication 指定されたアプリケーションを起動し、設定されている場合はアプリケーションの初期容量を初期化します。 |
StartApplication |
EMR Serverless API レスポンスにはデータは含まれませんが、EMR Serverless サービス統合 API レスポンスには以下のデータが含まれます。
|
startApplication.sync 指定されたアプリケーションを起動し、設定されている場合は初期容量を初期化します。 |
StartApplication |
EMR Serverless API レスポンスにはデータは含まれませんが、EMR Serverless サービス統合 API レスポンスには以下のデータが含まれます。
また、startApplication.sync はアプリケーションが |
stopApplication 指定されたアプリケーションを停止し、設定されている場合は初期容量を解放します。アプリケーションを停止する前に、スケジュールされたジョブと実行中のジョブをすべて完了またはキャンセルする必要があります。 |
StopApplication |
EMR Serverless API レスポンスにはデータは含まれませんが、EMR Serverless サービス統合 API レスポンスには以下のデータが含まれます。
|
stopApplication.sync 指定されたアプリケーションを停止し、設定されている場合は初期容量を解放します。アプリケーションを停止する前に、スケジュールされたジョブと実行中のジョブをすべて完了またはキャンセルする必要があります。 |
StopApplication |
EMR Serverless API レスポンスにはデータは含まれませんが、EMR Serverless サービス統合 API レスポンスには以下のデータが含まれます。
また、stopApplication.sync はアプリケーションが |
DeleteApplication アプリケーションを削除します アプリケーションを削除するには、そのアプリケーションが |
DeleteApplication |
EMR Serverless API レスポンスにはデータは含まれませんが、EMR Serverless サービス統合 API レスポンスには以下のデータが含まれます。
|
deleteApplication.sync アプリケーションを削除します アプリケーションを削除するには、そのアプリケーションが |
DeleteApplication |
EMR Serverless API レスポンスにはデータは含まれませんが、EMR Serverless サービス統合 API レスポンスには以下のデータが含まれます。
また、stopApplication.sync はアプリケーションが |
startJobRun ジョブ実行を開始します。 |
StartJobRun | なし |
startJobRun.sync ジョブ実行を開始します。 |
StartJobRun |
EMR Serverless API と EMR Serverless サービス統合 API のリクエストとレスポンスには違いはありません。ただし、startJobRun.sync はアプリケーションが |
cancelJobRun ジョブ実行をキャンセルします。 |
CancelJobRun | なし |
cancelJobRun.sync ジョブ実行をキャンセルします。 |
CancelJobRun |
EMR Serverless API と EMR Serverless サービス統合 API のリクエストとレスポンスには違いはありません。ただし、cancelJobRun.sync はアプリケーションが |
EMR サーバーレス統合のユースケース
最適化された EMR Serverless サービス統合では、アプリケーションを 1 つ作成して、そのアプリケーションを使用して複数のジョブを実行することをお勧めします。例えば、1 つのステートマシンに、同じアプリケーションを使用する複数の startJobRun リクエストを含めることができます。以下の Task ワークフロー状態 状態の例は、API EMR Serverless を Step Functions と統合するユースケースを示しています。EMR Serverless のその他のユースケースの情報については、「Amazon EMR Serverless とは」を参照してください。
ヒント
EMR Serverless と統合して複数のジョブを実行するステートマシンの例を AWS アカウント にデプロイするには、「EMR Serverless ジョブを実行する」を参照してください。
他の AWS のサービスで Step Functions を使用して IAM アクセス許可を設定する方法については、「Step Functions が統合サービスの IAM ポリシーを生成する方法」を参照してください。
以下のユースケースの例で斜体で示されている
テキストを、リソース固有の情報に置き換えてください。例えば、yourApplicationId
を EMR Serverless アプリケーションの ID (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 }
Amazon EMR Serverless を呼び出すための IAM ポリシー
コンソールを使用してステートマシンを作成すると、必要な最小特権を持つステートマシンの実行ロールがStep Functions によって自動的に作成されます。自動生成されたこれらの IAM ロールは、ステートマシンを作成する AWS リージョン で有効です。
以下のテンプレート例では、ステートマシンの定義におけるリソースに基づき、AWS Step Functions による IAM ポリシーの生成方法を示しています。詳細については、Step Functions が統合サービスの IAM ポリシーを生成する方法およびStep Functions でサービス統合パターンを検出するを参照してください。
IAM ポリシーを作成するときは、ポリシーにワイルドカードを含めないことをお勧めします。セキュリティのベストプラクティスとして、ポリシーの範囲をできるだけ絞り込む必要があります。動的ポリシーは、ランタイム中に特定の入力パラメータが不明な場合にのみ使用してください。
さらに、管理者ユーザーが非管理者ユーザーに、ステートマシンを実行するための実行ロールを付与する場合には注意が必要です。自分でポリシーを作成する場合は、実行ロールに PassRole ポリシーを含めることをお勧めします。また、実行ロールには aws:SourceARN
および aws:SourceAccount
のコンテキストキーを追加することをお勧めします。
EMR Serverless と Step Functions の統合の場合の IAM ポリシーの例
CreateApplication の IAM ポリシーの例
以下は、CreateApplication が Task ワークフロー状態 状態でのステートマシンの IAM ポリシーの例です。
注記
アカウントで初めてアプリケーションを作成するときには、IAM ポリシーで CreateServiceLinkedRole 許可を指定する必要があります。それ以降、この許可を追加する必要はありません。CreateServiceLinkedRole の詳細については、https://docs.aws.amazon.com/IAM/latest/APIReference/ の「CreateServiceLinkedRole」を参照してください。
以下のポリシーは、静的リソースと動的リソースで同じです。
StartApplication の IAM ポリシーの例
静的リソース
以下は、StartApplication が Task ワークフロー状態 状態で、ステートマシンを使用する場合の静的リソースの IAM ポリシーの例です。
動的リソース
以下は、StartApplication がTask ワークフロー状態 状態で、ステートマシンを使用する場合の動的リソースの IAM ポリシーの例です。
StopApplication の IAM ポリシーの例
静的リソース
以下は、StopApplication が Task ワークフロー状態 状態で、ステートマシンを使用する場合の静的リソースの IAM ポリシーの例です。
動的リソース
以下は、StopApplication が Task ワークフロー状態 状態で、ステートマシンを使用する場合の動的リソースの IAM ポリシーの例です。
DeleteApplication の IAM ポリシーの例
静的リソース
以下は、DeleteApplication が Task ワークフロー状態 状態で、ステートマシンを使用する場合の静的リソースの IAM ポリシーの例です。
動的リソース
以下は、DeleteApplication が Task ワークフロー状態 状態でステートマシンを使用する場合の動的リソースの IAM ポリシーの例です。
StartJobRun の IAM ポリシーの例
静的リソース
以下は、StartJobRun が Task ワークフロー状態 状態で、ステートマシンを使用する場合の静的リソースの IAM ポリシーの例です。
動的リソース
以下は、StartJobRun がTask ワークフロー状態 状態で、ステートマシンを使用する場合の動的リソースの IAM ポリシーの例です。
CancelJobRun の IAM ポリシーの例
静的リソース
以下は、CancelJobRun が Task ワークフロー状態 状態で、ステートマシンを使用する場合の静的リソースの IAM ポリシーの例です。
動的リソース
以下は、CancelJobRun が Task ワークフロー状態 状態で、ステートマシンを使用する場合の動的リソースの IAM ポリシーの例です。