0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Glueジョブのブックマークの挙動を確認してみた(クロスアカウント)

Posted at

背景・目的

こちらの記事でジョブのブックマークの挙動を確認しましたが、
クロスアカウントでも機能するか気になったので試します。

まとめ

当然ですが、クロスアカウントでも問題なく動作しました。

実践

以下のようにアカウントAのバケットに対して、アカウントBのGlueからデータを取得します。
image.png

バケットの準備(アカウントA)

  1. アカウントAにバケットを作成し、ファイルをアップロードします。
    image.png
  2. ファイルの内容は下記のとおりです。
    $ cat file3.json 
    {"id":21,"value":21}
    {"id":22,"value":22}
    {"id":23,"value":23}
    {"id":24,"value":24}
    {"id":25,"value":25}
    {"id":26,"value":26}
    {"id":27,"value":27}
    {"id":28,"value":28}
    {"id":29,"value":29}
    {"id":30,"value":30}
    $
    
  3. アカウントBから参照できるようにバケットポリシーを作成します。
    {
      "Id": "Policy1679145460562",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1679145458128",
          "Action": [
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": ["arn:aws:s3:::{(アカウントA)S3バケット名}","arn:aws:s3:::{(アカウントA)S3バケット名}/*"],
          "Principal": {
            "AWS": [
              "arn:aws:iam::{アカウントB}:role/{ロール名}"
            ]
          }
        }
      ]
    }
    

Glueジョブの作成(アカウントB)

  1. こちらの記事で作成したジョブをCronして作成します。
    image.png

  2. ソースバケットはアカウントAで作成したバケットを指定します。
    image.png

  3. ターゲットバケットのパスは/bookmark/cross-account/の下にIDでパーティションを作成します。
    image.png

  4. ジョブを実行し、終了を確認します。

$ aws glue get-job-runs --job-name bookmark-test-for-s3-copy-for-cross-account
{
    "JobRuns": [
        {
            "Id": "jr_2da55c78a5d228d84208c224f5d238356233e53af9b3ea09e0df130518e03bf7",
            "Attempt": 0,
            "JobName": "bookmark-test-for-s3-copy-for-cross-account",
            "StartedOn": "2023-03-18T22:33:58.558000+09:00",
            "LastModifiedOn": "2023-03-18T22:34:50.813000+09:00",
            "CompletedOn": "2023-03-18T22:34:50.813000+09:00",
            "JobRunState": "SUCCEEDED",
            "PredecessorRuns": [],
            "AllocatedCapacity": 2,
            "ExecutionTime": 44,
            "Timeout": 10,
            "MaxCapacity": 2.0,
            "WorkerType": "G.1X",
            "NumberOfWorkers": 2,
            "LogGroupName": "/aws-glue/jobs",
            "GlueVersion": "4.0"
        }
    ]
}
$
  1. S3の結果を確認します。想定通りファイルがターゲットに出力されました。
    $ aws s3 ls s3://{S3バケット名}/bookmark/cross-account/ --recursive
    2023-03-18 22:34:40         12 bookmark/cross-account/id=21/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=22/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=23/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=24/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=25/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=26/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=27/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=28/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=29/run-S3bucket_node3-1-part-r-00000
    2023-03-18 22:34:40         12 bookmark/cross-account/id=30/run-S3bucket_node3-1-part-r-00000
    $
    
  2. ブックマークの状態を確認します。
    $ aws glue get-job-bookmark --job-name bookmark-test-for-s3-copy-for-cross-account
    {
        "JobBookmarkEntry": {
            "JobName": "bookmark-test-for-s3-copy-for-cross-account",
            "Version": 2,
            "Run": 2,
            "Attempt": 0,
            "RunId": "jr_2da55c78a5d228d84208c224f5d238356233e53af9b3ea09e0df130518e03bf7",
            "JobBookmark": "{\"S3bucket_node1\":{\"jsonClass\":\"HadoopDataSourceJobBookmarkState\",\"timestamps\":{\"RUN\":\"1\",\"HIGH_BAND\":\"900000\",\"CURR_LATEST_PARTITION\":\"0\",\"CURR_LATEST_PARTITIONS\":\"\",\"CURR_RUN_START_TIME\":\"2023-03-18T13:34:24.489Z\",\"INCLUDE_LIST\":\"\"}}}"
        }
    }
    $
    

リランの確認(ブックマークが効いていることを確認)

ジョブをリランしファイルが作成されないことを確認します。

  1. 結果がわかりやすくなるように実行前にファイルを削除します。下記のとおりターゲットパスにファイルが無いことがわかります。
$ aws s3 ls s3://{S3バケット名}/bookmark/cross-account/ --recursive
$
  1. ジョブを実行し、終了を確認します。22:49に完了しています。

    $ aws glue get-job-runs --job-name bookmark-test-for-s3-copy-for-cross-account    
    {
        "JobRuns": [
            {
                "Id": "jr_a209816bf2fd359595665f79c8e7afed220dc3d464042a4614795e383de01b54",
                "Attempt": 0,
                "JobName": "bookmark-test-for-s3-copy-for-cross-account",
                "StartedOn": "2023-03-18T22:49:02.945000+09:00",
                "LastModifiedOn": "2023-03-18T22:49:44.455000+09:00",
                "CompletedOn": "2023-03-18T22:49:44.455000+09:00",
                "JobRunState": "SUCCEEDED",
                "PredecessorRuns": [],
                "AllocatedCapacity": 2,
                "ExecutionTime": 34,
                "Timeout": 10,
                "MaxCapacity": 2.0,
                "WorkerType": "G.1X",
                "NumberOfWorkers": 2,
                "LogGroupName": "/aws-glue/jobs",
                "GlueVersion": "4.0"
            },
            {
            ・・・
    
  2. S3の結果を確認します。想定通りファイルは出力されていません。

    $ aws s3 ls s3://{S3バケット名}/bookmark/cross-account/ --recursive
    $
    
  3. ブックマークの状態を確認します。

    $ aws glue get-job-bookmark --job-name bookmark-test-for-s3-copy-for-cross-account
    {
        "JobBookmarkEntry": {
            "JobName": "bookmark-test-for-s3-copy-for-cross-account",
            "Version": 6,
            "Run": 4,
            "Attempt": 0,
            "PreviousRunId": "jr_b33bfae1bdac73868e99d52367e5fb7bceac7fde59ec918b4739bb2fb0199fdd",
            "RunId": "jr_a209816bf2fd359595665f79c8e7afed220dc3d464042a4614795e383de01b54",
            "JobBookmark": "{\"S3bucket_node1\":{\"jsonClass\":\"HadoopDataSourceJobBookmarkState\",\"timestamps\":{\"RUN\":\"3\",\"HIGH_BAND\":\"900000\",\"CURR_LATEST_PARTITION\":\"0\",\"CURR_LATEST_PARTITIONS\":\"\",\"CURR_RUN_START_TIME\":\"2023-03-18T13:49:29.767Z\",\"INCLUDE_LIST\":\"\"}}}"
        }
    }
    $
    

ファイルの追加と更新を確認

アカウントAのS3バケットにファイルをアップロード

新規のファイルを追加し、配置済みのファイルをアップロードし直します。2つのファイルが対象になることを確認します。

  1. 新規のファイルは下記のとおりです。

    $ cat file4.json 
    {"id":31,"value":31}
    {"id":32,"value":32}
    {"id":33,"value":33}
    {"id":34,"value":34}
    {"id":35,"value":35}
    {"id":36,"value":36}
    {"id":37,"value":37}
    {"id":38,"value":38}
    {"id":39,"value":39}
    {"id":40,"value":40}
    $
    
  2. 2つのファイル(新規と更新)をアップロードします。file4.jsonは新規。file3.jsonは更新。
    image.png
    image.png

アカウントBでジョブを実行

  1. 実行前にターゲットファイルを確認します。ファイルはありません。

    $ aws s3 ls s3://{S3バケット名}/bookmark/cross-account/ --recursive   
    $
    
  2. ジョブを実行し、終了を確認します。23:05に完了しています。

    $ aws glue get-job-runs --job-name bookmark-test-for-s3-copy-for-cross-account    
    {
        "JobRuns": [
            {
                "Id": "jr_1a9ffb3dea21e7c9cf27f61738c887bcd41b1ecd0b1ffc1999d5603c758fc131",
                "Attempt": 0,
                "JobName": "bookmark-test-for-s3-copy-for-cross-account",
                "StartedOn": "2023-03-18T23:04:40.308000+09:00",
                "LastModifiedOn": "2023-03-18T23:05:32.586000+09:00",
                "CompletedOn": "2023-03-18T23:05:32.586000+09:00",
                "JobRunState": "SUCCEEDED",
                "PredecessorRuns": [],
                "AllocatedCapacity": 2,
                "ExecutionTime": 45,
                "Timeout": 10,
                "MaxCapacity": 2.0,
                "WorkerType": "G.1X",
                "NumberOfWorkers": 2,
                "LogGroupName": "/aws-glue/jobs",
                "GlueVersion": "4.0"
            },
            {
        ・・・
    
  3. S3の結果を確認します。想定通り新規とタイムスタンプが変わったため更新分も出力されています。

    $ aws s3 ls s3://{S3バケット名}/bookmark/cross-account/ --recursive   
    2023-03-18 23:05:21         12 bookmark/cross-account/id=21/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=22/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=23/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=24/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=25/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=26/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=27/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=28/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=29/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:22         12 bookmark/cross-account/id=30/run-S3bucket_node3-4-part-r-00000
    2023-03-18 23:05:21         12 bookmark/cross-account/id=31/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=32/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=33/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=34/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=35/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=36/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=37/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=38/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=39/run-S3bucket_node3-4-part-r-00001
    2023-03-18 23:05:22         12 bookmark/cross-account/id=40/run-S3bucket_node3-4-part-r-00001
    $
    
  4. ブックマークの状態を確認します。

    $ aws glue get-job-bookmark --job-name bookmark-test-for-s3-copy-for-cross-account
    {
        "JobBookmarkEntry": {
            "JobName": "bookmark-test-for-s3-copy-for-cross-account",
            "Version": 8,
            "Run": 5,
            "Attempt": 0,
            "PreviousRunId": "jr_a209816bf2fd359595665f79c8e7afed220dc3d464042a4614795e383de01b54",
            "RunId": "jr_1a9ffb3dea21e7c9cf27f61738c887bcd41b1ecd0b1ffc1999d5603c758fc131",
            "JobBookmark": "{\"S3bucket_node1\":{\"jsonClass\":\"HadoopDataSourceJobBookmarkState\",\"timestamps\":{\"RUN\":\"4\",\"HIGH_BAND\":\"900000\",\"CURR_LATEST_PARTITION\":\"0\",\"CURR_LATEST_PARTITIONS\":\"\",\"CURR_RUN_START_TIME\":\"2023-03-18T14:05:05.898Z\",\"INCLUDE_LIST\":\"dd2ab6dda09ad9ea16afe68075da10ac,5f2fd266b5a995ddd862acdf6d8ac9b3,bb791e3b00de249ebdaf5ff9a56165e4,61ac318e999b2f0d982b195ed8078892\"}}}"
        }
    }
    $
    

考察

クロスアカウントでもブックマークは、問題なく実行できました。

参照

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?