Amazon EMRジョブを管理する - AWS Step Functions

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

Amazon EMRジョブを管理する

このサンプルプロジェクトでは、Amazon EMRと AWS Step Functions 統合。プロジェクトは Amazon EMRクラスターを作成し、複数のステップを追加して実行し、クラスターを終了します。

重要

Amazon には無料料金枠EMRはありません。サンプルプロジェクトを実行すると、費用が発生します。料金情報は、Amazon のEMR料金ページで確認できます。Amazon EMRサービス統合の可用性は、Amazon EMR の可用性によって異なりますAPIs。このため、このサンプルプロジェクトは一部の で正しく動作しない場合があります。 AWS リージョン。特別なリージョンの制限については、Amazon EMR のドキュメントを参照してください。

ステップ 1: ステートマシンを作成する

  1. Step Functions コンソールを開き、[ステートマシンの作成] を選択します。

  2. Manage an EMR job 検索ボックスに「」と入力し、返された検索結果からEMRジョブの管理を選択します。

  3. [次へ] を選択して続行します。

  4. デモの実行 を選択して読み取り専用と ready-to-deploy ワークフローを作成するか、ビルド を選択して編集可能なステートマシン定義を作成し、それをビルドして後でデプロイできます。

    このサンプルプロジェクトは、以下のリソースをデプロイします。

    • An Amazon S3 bucket (バケット)

    • An Amazon EMR クラスター

    • An AWS Step Functions ステートマシン

    • 関連 AWS Identity and Access Management (IAM) ロール

    次の図は、 EMRジョブの管理サンプルプロジェクトのワークフローグラフを示しています。

    EMR ジョブの管理サンプルプロジェクトのワークフローグラフ。
  5. [テンプレートの使用] を選択して選択を続行します。

次のステップは、前の選択肢によって異なります。

  1. デモの実行 – によってデプロイされたリソースを使用して読み取り専用プロジェクトを作成する前に、ステートマシンを確認できます。 AWS CloudFormation を に AWS アカウント.

    ステートマシンの定義を表示でき、準備ができたら、デプロイと実行を選択してプロジェクトをデプロイし、リソースを作成します。

    デプロイでは、リソースとアクセス許可の作成に最大 10 分かかる場合があります。スタック ID リンクを使用して、 の進行状況をモニタリングできます。 AWS CloudFormation.

    デプロイが完了すると、コンソールに新しいステートマシンが表示されます。

  2. 構築 – ワークフロー定義を確認して編集できます。カスタムワークフローの実行を試みる前に、サンプルプロジェクトのプレースホルダーの値を設定する必要がある場合があります。

注記

アカウントにデプロイされたサービスには、標準料金が適用される場合があります。

ステップ 2: ステートマシンを実行する

  1. [ステートマシン] ページで、サンプルプロジェクトを選択します。

  2. サンプルプロジェクトページで、[実行を開始] を選択します。

  3. [実行を開始] ダイアログボックスで、以下の操作を行います。

    1. (オプション) 生成されたデフォルトを上書きするカスタム実行名を入力します。

      非ASCII名前とログ記録

      Step Functions は、 ASCII以外の文字を含むステートマシン、実行、アクティビティ、およびラベルの名前を受け入れます。このような文字は Amazon では機能しないため CloudWatch、 でメトリクスを追跡できるようにASCII、文字のみを使用することをお勧めします CloudWatch。

    2. (オプション) 入力ボックスに、入力値を として入力しますJSON。デモを実行している場合は、このステップをスキップできます。

    3. [実行のスタート] を選択します。

    Step Functions コンソールで実行の詳細ページに移動し、グラフビューで状態を選択して、ステップの詳細ペインの関連情報を確認できます。

ステートマシンのコード例

このサンプルプロジェクトのステートマシンは、パラメータをそれらのリソースに直接渡すEMRことで Amazon と統合します。このステートマシンの例を参照して、Step Functions がステートマシンを使用して Amazon EMRタスクを同期的に呼び出し、タスクが成功または失敗するまで待機し、クラスターを終了する方法を確認します。

方法の詳細については、「」を参照してください。 AWS Step Functions は他の を制御できます AWS サービスについては、「」を参照してくださいサービスと Step Functions の統合

{ "Comment": "An example of the Amazon States Language for running jobs on Amazon EMR", "StartAt": "Create an EMR cluster", "States": { "Create an EMR cluster": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:createCluster.sync", "Parameters": { "Name": "ExampleCluster", "VisibleToAllUsers": true, "ReleaseLabel": "emr-5.26.0", "Applications": [ { "Name": "Hive" } ], "ServiceRole": "<EMR_SERVICE_ROLE>", "JobFlowRole": "<EMR_EC2_INSTANCE_PROFILE>", "LogUri": "s3://<amzn-s3-demo-EMR_LOG>/logs/", "Instances": { "KeepJobFlowAliveWhenNoSteps": true, "InstanceFleets": [ { "Name": "MyMasterFleet", "InstanceFleetType": "MASTER", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge" } ] }, { "Name": "MyCoreFleet", "InstanceFleetType": "CORE", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge" } ] } ] } }, "ResultPath": "$.cluster", "Next": "Run first step" }, "Run first step": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.cluster.ClusterId", "Step": { "Name": "My first EMR step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": ["<COMMAND_ARGUMENTS>"] } } }, "Retry" : [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2.0 } ], "ResultPath": "$.firstStep", "Next": "Run second step" }, "Run second step": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.cluster.ClusterId", "Step": { "Name": "My second EMR step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": ["<COMMAND_ARGUMENTS>"] } } }, "Retry" : [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2.0 } ], "ResultPath": "$.secondStep", "Next": "Terminate Cluster" }, "Terminate Cluster": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:terminateCluster", "Parameters": { "ClusterId.$": "$.cluster.ClusterId" }, "End": true } } }

IAM 例

この例では AWS Identity and Access Management サンプルプロジェクトによって生成された (IAM) ポリシーには、ステートマシンおよび関連リソースの実行に必要な最小権限が含まれています。IAM ポリシーに必要なアクセス許可のみを含めることがベストプラクティスです。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "elasticmapreduce:DescribeCluster", "elasticmapreduce:TerminateJobFlows" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::123456789012:role/StepFunctionsSample-EMRJobManagement-EMRServiceRole-ANPAJ2UCCR6DPCEXAMPLE", "arn:aws:iam::123456789012:role/StepFunctionsSample-EMRJobManagementWJALRXUTNFEMI-ANPAJ2UCCR6DPCEXAMPLE-EMREc2InstanceProfile-1ANPAJ2UCCR6DPCEXAMPLE" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForEMRRunJobFlowRule" ] } ] }

次のポリシーでは、addStep に十分なアクセス許可があることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForEMRAddJobFlowStepsRule" ] } ] } }

他の で Step Functions を使用するIAMときに を設定する方法の詳細については、「」を参照してください。 AWS サービスについては、「」を参照してくださいStep Functions が統合サービスのIAMポリシーを生成する方法