LoginSignup
0
0

More than 1 year has passed since last update.

GlueをStep Functionsから呼び出す際はGetJobRunを入れておいた方が良い

Posted at

はじめに

Step FunctionsからGlueを起動させた際にいつまでも終了しなかったので、その内容を展開したいと思い、記事にしました。

概要

  • Step FunctionsのGlue StartJobRunのオプション”タスクが完了するまで待機”を使う場合は、Step FunctionsのIAMロールにglue:GetJobRunが必要
    • 権限が無い場合、エラーにならずに延々待ち続けます
  • 上記オプションを使わない場合は不要

参考

やったこと

IAMロール作成

以下のCFnで、GlueとStep Functions用のIAMロールを作成します。
最後から2行目をわざとコメントアウトしています。

create2Rle.yaml
AWSTemplateFormatVersion: "2010-09-09"

Resources:
  ##################################################
  # Glue role
  ##################################################
  GlueRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: for-glue
      Path: "/"
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - "glue.amazonaws.com"
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
        - arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
        
  ##################################################
  # Step Functions role
  ##################################################
  StateMachineRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: for-stepfunctions
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: "/"
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
      Policies:
        # glue
        - PolicyName: invoke-gluejob
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - 'glue:StartJobRun'
                  # - 'glue:GetJobRun'
                Resource: '*'

Glue作成

コンソールから簡単なPythonのGlueを作成します。

image.png
image.png
image.png

保存して、実際に動くことを確認します。
image.png
image.png

Step Functions作成

image.png
Glue StartJobRunをドロップし設定します。最初は”タスクが完了するまで待機”のチェックをしないようにします。
image.png
Amazon States Language上では、このようになりました。

{
  "Comment": "A description of my state machine",
  "StartAt": "Glue StartJobRun",
  "States": {
    "Glue StartJobRun": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun",
      "Parameters": {
        "JobName": "testjob20221201"
      },
      "End": true
    }
  }
}

作ったIAMロールを指定します。
image.png
作成したら実行し、正常に動作することを確認します。
image.png
Glueのログも出ています。
image.png

”タスクが完了するまで待機”にチェック

Step Functionsを修正して、”タスクが完了するまで待機”にチェックを入れます。
image.png
Amazon States Language上では、Resourceの後ろに.syncが付きました。

{
  "Comment": "A description of my state machine",
  "StartAt": "Glue StartJobRun",
  "States": {
    "Glue StartJobRun": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Parameters": {
        "JobName": "testjob20221201"
      },
      "End": true
    }
  }
}

この状態で実行してみます。何分経っても終わってくれません。
image.png
Step Functionsからは起動していて、Glueは既に終わっています。
image.png
image.png

いつまでも終わらないので、実行を停止させます。
image.png
image.png

IAMロールを修正し、再実行

IAMロールを作成したCFnを修正して更新します。最後から2行目をコメントインしただけです。

create2Rle.yaml
AWSTemplateFormatVersion: "2010-09-09"

Resources:
  ##################################################
  # Glue role
  ##################################################
  GlueRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: for-glue
      Path: "/"
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - "glue.amazonaws.com"
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
        - arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
        
  ##################################################
  # Step Functions role
  ##################################################
  StateMachineRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: for-stepfunctions
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: "/"
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
      Policies:
        # glue
        - PolicyName: invoke-gluejob
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - 'glue:StartJobRun'
                  - 'glue:GetJobRun'
                Resource: '*'

変更後、Step Functionsは変更せず実行します。
今度はちゃんと終了しました。
image.png
image.png

おわりに

Step Functionsを使っていて、困った点について書きました。
”権限がない”とエラーにしてくれるとわかりやすいのですが、そうではなかったので解決に時間を要しました。

他の方の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0