Amazon MWAA で Amazon EMR ステップをトリガーしたときに発生するエラーをトラブルシューティングする方法を教えてください。
Amazon Managed Workflows for Apache Airflow (Amazon MWAA) で Amazon EMR ステップをトリガーしたときに発生するエラーをトラブルシューティングしたいです。
簡単な説明
Amazon MWAA を使用して Amazon EMR ステップをトリガーすると、次のエラーが表示される場合があります。
"DescribeCluster 操作の呼び出し時にエラーが発生しました (AccessDeniedException)"
"AddJobFlowStepsr 操作の呼び出し時にエラーが発生しました (AccessDeniedException)"
"EMR エンドポイントに到達できません: botocore.exceptions.ConnectTimeoutError: エンドポイント URL で接続タイムアウト"
"DescribeCluster 操作の呼び出し時にエラーが発生しました (InvalidRequestException): クラスタ ID が無効です。"
"AddJobFlowStepsr 操作の呼び出し時にエラーが発生しました (ValidationException): クラスターで、アクティブなステップの最大数 (State = 'Running', 'Pending' or 'Cancel_Pending') を超過しました。"
"AddJobFlowStepsr 操作の呼び出し時にエラーが発生しました: jobFlowId が無効です。"
"AddJobFlowStepsr 操作の呼び出し時にエラーが発生しました (ValidationException): シャットダウン中、終了中、終了済みのジョブフローを変更できない可能性があります。"
"'airflow.providers.amazon.aws.operators.emr_add_steps' という名前のモジュールがありません"
解決策
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon EMR API コール中に AccessDeniedException エラーが発生した
これらのエラーは、Amazon MWAA ランタイムロールに Amazon EMR アクションに関連するアクセス許可の問題がある場合に発生します。これらのエラーを解決するには、Amazon MWAA ランタイムロールにアクセス許可 DescribeCluster および AddJobFlowSteps があることを確認してください。
例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EMRStepPermissions", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:AddJobFlowSteps" ], "Resource": "arn:aws:elasticmapreduce:example-region:example-account-id:cluster/example-cluster-id" } ] }
注: お使いのものでそれぞれ、example-region を AWS リージョンに、example-account-id をアカウント ID に、example-cluster-id をクラスター名に置き換えます。
EMR エンドポイントに到達できません: botocore.exceptions.ConnectTimeoutError: エンドポイント URL で接続タイムアウト
このエラーは、ネットワークの設定ミスにより Amazon MWAA 環境が Amazon EMR クラスターに到達できない場合に発生します。このエラーを解決するには、Amazon MWAA Amazon Virtual Private Cloud (Amazon VPC) の設定で、クラスターへのアウトバウンドトラフィックが許可されていることを確認します。
パブリックルーティングの場合は、セキュリティグループとサブネットに、クラスターへのアウトバウンドトラフィックを許可するルールとルートがあることを確認してください。プライベートルーティングの場合は、Amazon EMR エンドポイントが Amazon MWAA 環境のサブネットとセキュリティグループに関連付けられていることを確認してください。
Amazon EMR が別の Amazon VPC にある場合は、Amazon VPC ピアリングを使用して適切なネットワーク接続を確立します。
DescribeCluster 操作の呼び出し時にエラーが発生しました (InvalidRequestException): クラスタ ID が無効です。
このエラーを解決するには、クラスター ID が Amazon MWAA 環境が設定されているのと同じリージョンとアカウントにあることを確認してください。また、AWS Identity and Access Management (IAM) ユーザーがクラスターの詳細を確認できるようにするには、JOB_FLOW_OVERRIDES パラメータで VisibleToAllUsers を True に設定します。詳細については、「リクエストパラメータ」を参照してください。
Amazon MWAA ランタイムロールがクラスターを一覧表示するために必要なアクセス許可を確認するには、describe-cluster コマンドを実行します。
Amazon EMR クラスターの詳細の確認方法については、「Amazon EMR クラスターのステータスと詳細を確認する」を参照してください。
AddJobFlowStepsr 操作の呼び出し時にエラーが発生しました: jobFlowId <'some-string'> が無効です。
このエラーは、EmrAddStepsOperator に間違った job_flow_id が渡された場合に発生します。これを解決するには、Amazon EMR クラスター ID を job_flow_id に使用する必要があります。詳細については、Apache Airflow ドキュメントの「パラメータ」を参照してください。
AddJobFlowStepsr 操作の呼び出し時にエラーが発生しました (ValidationException): シャットダウン中、強制終了中、終了済みのジョブフローを変更できない可能性があります
このエラーは、Amazon EMR ジョブフローがシャットダウン、強制終了、または終了したことが原因で、AddJobFlowSteps 操作を実行できない場合に発生します。このエラーをトラブルシューティングするには、AWS CloudTrail を使用して、クラスターがいつ終了させられたか、いつ EmrAddStepsOperator タスクが開始されたかをタスクログで確認します。クラスターを終了させるコマンドが、クラスターを起動するタスクの前にトリガーされた場合、エラーが発生します。
このエラーを解決するには、DAG コードの JOB_FLOW_OVERRIDES パラメータで、KeepJobFlowAliveWhenNoSteps を True にして追加します。この設定により、ステップの完了後、クラスターが Waiting 状態に移行します。
例:
JOB_FLOW_OVERRIDES = { "Name": "Data-Pipeline-" + execution_date, "ReleaseLabel": "emr-5.29.0", "LogUri": "s3://{}/logs/emr/".format(S3_BUCKET_NAME), "Instances": { "InstanceGroups": [ { "Name": "Master nodes", "Market": "ON_DEMAND", "InstanceRole": "MASTER", "InstanceType": "m5.xlarge", "InstanceCount": 1 }, { "Name": "Slave nodes", "Market": "ON_DEMAND", "InstanceRole": "CORE", "InstanceType": "m5.xlarge", "InstanceCount": 2 } ], "TerminationProtected": False, "KeepJobFlowAliveWhenNoSteps": True } }
ステップの完了後にクラスターを終了させるには、次のいずれかの方法を使用します。
**EmrTerminateJobFlowOperator ** を使用して、ステップが完了したときにクラスターを終了させる DAG 内の最後のタスクとしてタスクを作成します。
cluster_remover = EmrTerminateJobFlowOperator( task_id='remove_cluster', job_flow_id=cluster_creator.output, aws_conn_id='aws_default', )
または、指定されたアイドル時間が経過するとクラスターを終了させる自動終了ポリシーを JOB_FLOW_OVERRIDES に設定します。次の設定例では、アイドル時間が 60 分経過するとクラスターを終了させます。
JOB_FLOW_OVERRIDES = { "Name": "Data-Pipeline-" + execution_date, "ReleaseLabel": "emr-<version>", "LogUri": "s3://{}/logs/emr/".format(example-s3-bucket-name), "Instances": { "InstanceGroups": [ { "Name": "Master nodes", "Market": "ON_DEMAND", "InstanceRole": "MASTER", "InstanceType": "m5.xlarge", "InstanceCount": 1 }, { "Name": "Slave nodes", "Market": "ON_DEMAND", "InstanceRole": "CORE", "InstanceType": "m5.xlarge", "InstanceCount": 2 } ], "TerminationProtected": False, "KeepJobFlowAliveWhenNoSteps": True }, "AutoTerminationPolicy": {"IdleTimeout": 3600} }
詳細については、Apache Airflow のウェブサイトで「タスクを定義する」を参照してください。
他の JOB_FLOW_OVERRIDES の確認方法については、run_job_flow を参照してください。
Amazon EMR 自動終了の詳細については、「Amazon EMR クラスターのクリーンアップに自動終了ポリシーを使用する」を参照してください。
"'airflow.providers.amazon.aws.operators.emr_add_steps' という名前のモジュールがありません"
Amazon MWAA 環境と Amazon EMR クラスターを別のリージョンに配置する必要がある場合は、別の接続 ID を作成します。クラスターを起動する AWS リージョンを使用する必要があります。デフォルトのリージョンを変更する場合は、次の手順を実行します。
- Apache Airflow UI を開きます。
- 上部のナビゲーションペインで [管理] を選択し、[接続] を選択したら + ボタンをクリックします。
- DAG で使用する接続 ID の名前を入力します。
- [接続タイプ] で [Amazon Web Service] を選択します。
- テキストフィールドに次の JSON を追加します。
注: example-region は、デフォルトのリージョンに使用するリージョンに置き換えます。{"region_name": "example-region"}
- Amazon MWAA で使用されている Amazon EMR オペレータごとに、新しい接続 ID を使用する必要があります。
DAG インポートエラー
DAG インポートエラーが発生した場合は、必要なパッケージがインストールされていないか、インポートパスが異なっているか、オペレータ名が誤っています。これらのエラーをトラブルシューティングするために、お使いの Amazon MWAA 環境にインストールされている apache-airflow-providers-amazon パッケージのバージョンを確認してください。Airflow UI プロバイダーのページを確認することで、上記を確認できます。または、Amazon MWAA 環境にインストールされている Apache Airflow プロバイダーパッケージを確認してください。次に、プロバイダーパッケージのバージョンに基づいて、Airflow プロバイダーのドキュメントでインポートパスとオペレータ名を確認します。たとえば、Amazon MWAA 2.2.2 には apache-airflow-providers-amazon 2.4.0 があります。バージョン 2.4.0 のインポートパスとオペレータ名を確認するには、Apache Airflow のウェブサイトで airflow.providers.amazon.aws を参照してください。
Amazon EMR の各オペレータのインポートパスは次のとおりです。
- EmrAddStepsOperator: airflow.providers.amazon.aws.operators.emr_add_steps
- EmrCreateJobFlowOperator: airflow.providers.amazon.aws.operators.emr_create_job_flow
- EmrTerminateJobFlowOperator: airflow.providers.amazon.aws.operators.emr_terminate_job_flow
注: apache-airflow-providers-amazon 8.16.0 を搭載した Amazon MWAA 2.8.1 では、すべての Amazon EMR オペレータが共通の Amazon EMR クラスに移動されました。詳細については、Apache Airflow のウェブサイトで airflow.providers.amazon.aws.operators.emr を参照してください。
任意の Amazon EMR オペレータのパスを含めるには、airflow.providers.amazon.aws.operators.emr からパスをインポートします。
from airflow.providers.amazon.aws.operators.emr import EmrAddStepsOperator, EmrCreateJobFlowOperator, EmrTerminateJobFlowOperator
注: 必ず、ユースケースに基づいて DAG インポートステートメントを変更してください。
関連するコンテンツ
- 質問済み 7年前lg...
- 質問済み 6年前lg...
- AWS公式更新しました 2ヶ月前
- AWS公式更新しました 2年前
- AWS公式更新しました 7ヶ月前
- AWS公式更新しました 1年前