stepfunction内でVPC内で実行されているGlueを起動できない

0

connectionを利用してRDSに接続している(SGはconnectionとRDSともに同じ、private subnet内)GlueJobを起動したいのですが、以下のエラーが出てしまいます。おそらくジョブが存在しないと怒られています。

{
    "details": {
        "cause": "Failed to start job run due to missing metadata. (Service: AWSGlue; Status Code: 400; Error Code: EntityNotFoundException; Request ID: ~; Proxy: null)",
        "error": "Glue.EntityNotFoundException",
        "resource": "startJobRun.sync",
        "resourceType": "glue"
    }~~省略
}

デバッグで試したことは、以下です。

  1. stepfunction用のVPCエンドポイントを作成
  2. SGで443ポートをインバウンドルールで許可するように設定
  3. IAMで以下のポリシーを作成してステートマシンにアタッチ
 {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "glue:StartJobRun",
            "Resource": "*"
        }
  1. ジョブ名をコピペで貼る

ちなみに、ステートマシンのJSON設定は以下です。

{
  "Comment": "A description of my state machine",
  "StartAt": "Glue StartJobRun",
  "States": {
    "Glue StartJobRun": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Parameters": {
        "JobName": "〇〇",
        "Arguments": {
          "--object_key.$": "$.detail.object.key"
        }
      },
      "End": true
    }
  }
}

ご回答よろしくお願いします。

2回答
1
承認された回答

AWS CLIなどからStepFunctionsで指定しているパラメータを使用してStartJobRunを実行することは可能ですか?
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/start-job-run.html

AWS CLIだと以下のような形になります。
「--arguments」オプションは実際のオブジェクトキーなどを入れてみてください。

aws glue start-job-run --job-name "〇〇" --arguments { ... }

また、StepFunctionsの定義で指定しているArgumentsの値を実際の値に変更して動くかなども見ていただくとよいかもしれません。

        "Arguments": {
          "--object_key.$": "$.detail.object.key"
        }
profile picture
エキスパート
回答済み 2ヶ月前
  • CLIも試しました。しかし、同様に(EntityNotFoundException)が出てしまいます。 試したコードは以下です。今回gluejobを修正してobjectkeyのパラメータを無くしてjobnameだけにしてみましたが、依然としてエラーになります。

    aws glue start-job-run --job-name "〇〇" --region ap-northeast-1

    またstepfunctionsでも同様に、objectkeyパラメータなしに修正してから実行してみましたが、同様のエラーです。

    ちなみにですが、connectionを使っていないGluejobをステートマシンで指定してみると、正常に実行されました。

  • マネジメントコンソールから実行する際は問題無いということなので、CloudTrailのイベント履歴をご確認いただいてマネジメントコンソールから実行したstart-job-runとStepFunctionsで実行したstart-job-runの内容を比較してみてください。 StepFunctionsで実行したときとの差分を確認して何か違いがあればその部分をStepFunctionsの実行に含めるようにしてみてください。

  • cloudtrailを見てみると、glueコンソールの実行ではジョブ名の最後にスペースが入っていることに気付き、sfnの方でスペースを入れてジョブ名を指定したところ無事実行できました。しかし、glueコンソールの画面上でジョブ名をcopyするときにはスペースの部分が認識されていなかったので、cloudtrailでのデバッグ方法を知らなかった私は、小林さんのご助言がなければ解決できていないところでした。この度は本当にありがとうございました。

-1

このエラーは、AWS Step FunctionsがAWS Glueジョブを起動しようとしたが、指定されたジョブが見つからなかったことを示しています。以下の点を確認してみてください:

  1. ジョブ名の正確性: ステートマシンのJSONで指定しているジョブ名("JobName": "〇〇")が、実際のAWS Glueジョブの名前と完全に一致していることを確認してください。大文字小文字や空白も含めて正確に一致する必要があります。

  2. IAM権限: Step Functionsの実行ロールに、AWS Glueジョブを起動するための十分な権限があることを確認してください。"glue:StartJobRun"だけでなく、"glue:GetJob"の権限も必要かもしれません。以下のようなポリシーを試してみてください:

    {
      "Effect": "Allow",
      "Action": [
        "glue:StartJobRun",
        "glue:GetJob",
        "glue:GetJobRun",
        "glue:BatchStopJobRun"
      ],
      "Resource": "*"
    }
  3. VPCエンドポイント: AWS GlueのVPCエンドポイントも作成されていることを確認してください。Step Functionsのエンドポイントだけでなく、Glue用のエンドポイントも必要です。

  4. リージョンの一致: Step FunctionsとAWS Glueジョブが同じAWSリージョンにあることを確認してください。

  5. Glueジョブの状態: AWS Glueコンソールで、ジョブが正しく設定され、有効になっていることを確認してください。

  6. ログの確認: AWS Glueのログを確認し、ジョブ起動時に他のエラーが発生していないか確認してください。

これらの点を確認しても問題が解決しない場合は、AWS サポートに連絡して詳細な調査を依頼することをお勧めします。
Sources
Start an AWS Glue job with Step Functions - AWS Step Functions
Troubleshooting errors Spark errors - AWS Glue
Gaming Analytics: Leveraging AWS Glue and Amazon Redshift Spectrum for Player Insights | AWS for Games Blog

profile picture
回答済み 2ヶ月前
  • 1.ジョブ名はコピペしており間違いがないです。 2.IAMに権限を追加してみましたが、エラーになります。 3.記載し忘れていましたが、Glueエンドポイントも追加してあります。 4.リージョンは同一です 5.ジョブ自体はコンソール上だと実行できるので問題ないかと思います 6.ログが出ていないです。その前のstepfunctionで躓いているので。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン