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?

【AWS】GlueとLambdaのジョブキューイング機能を比べてみる

Last updated at Posted at 2025-02-04

はじめに

はじめまして。
ジールの@r_takaiです。
2024/09/03 AWS より「AWS Glueでジョブのジョブキューを追加する」というリリースがありました。

Glueとほぼ同様の機能を持つサービス(※)として、Lambdaがあります。
本記事では、簡単な共通のジョブを用いてGlueおよびLambdaのキューイング機能を検証し、使用感などを比較してみたいと思います。

※AWS Lambdaは「サーバレスのプログラム実行環境(FaaS)」です。
Lambda上でGlueのようなデータ加工や抽出プログラムを実装、実行することが可能です。
Lambdaは実行時間に制限(15分)がある為、比較的小規模(短時間で終了する処理)で使用されることが多く、
一方、Glueの実行時間は48時間である為、比較的規模が大きい(複雑な処理)で使用されます。
他にも、GlueとLambdaには課金方法や実行環境の違い等もあります。

1.「ジョブキューイング機能」とは

これまでGlueジョブの同時実行数には制限があり、
Glueジョブが実行されるタイミングで、同時実行数の上限に達していた場合ジョブは実行されない為、時間を空けて実行できなかったジョブを再度実行する必要がありました。

今回「ジョブキューイング機能」が追加されたことにより、
実行できなかったジョブは「キュー」へ移され制限が解除されるまで待ち状態となります。
制限が解除されると、キューの中のジョブが自動的に実行されます。

※Glueジョブのキューイング機能詳細については、下記記事を参考ください。
AWSの公式リリース
【アップデート】AWS Clueがジョブキューイング機能を提供開始

2.GlueとLambdaの設定

キューイングに近い機能(※)があったLambdaとGlueを比較するため、同じ動作環境になるジョブを用意し、設定は以下としました。

※Lambdaでは、関数をスケーリングすることで同時実行数を制御し、Glueジョブキューイングに類似する動作が可能です。

実行ジョブ

S3にファイルが置かれたら、起動し3分待って終了する

・Glue
Glue version:Glue 4.0
Worker type:G 1X
Maximum concurrency:3
Job Run Queuing:ON
Job timeout (minutes):4
※defaultから変更した設定のみ記載
ソース
import sys
import time
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
time.sleep(180)
job.commit()
・Lambda
タイムアウト:4分
同時実行数:3
※defaultから変更した設定のみ記載
ソース
import json
import time

def lambda_handler(event, context):
    # TODO implement
    time.sleep(180)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

3.結果を比べてみます

実行状況を「AWSコンソール」から確認しました。

Glue
S3へファイルを置くと、Glueジョブが起動しました。 5ファイルをアップしたので、ジョブが2つWaitingになっています。

Glue monitoring.PNG

3分経過後ジョブが終了したので、Waitingになっていたジョブが起動。

Glue 1.PNG
Glue 2.PNG

すべてのジョブが終了

Glue 3.PNG

Lambda
S3へファイルを置くと、Lambdaが起動しました。Glueと同様に5ファイルをアップしたので、3セット起動されています。

lambda log.PNG

Lambdaでは、ログからジョブ起動を確認します。 それぞれのログからジョブの起動時間を見ることが出来ます。

lambda 1.PNG
lambda 2.PNG
lambda 3.PNG

Lambdaダッシュボードからは実行状況が確認できました。

lambda Metrics.PNG

4.最後に

結果としてGlueはキューに入っている状況がステータス(Waiting)として確認が出来ましたが、Lambdaはステータス状況を確認できない為、ログやメトリクス「所要時間」等から確認する必要がありました。

今回の検証から、ジョブのキューイング機能については大きな差異は確認できませんでしたが、設定変更のみでGlue単体でジョブの再実行を自動で行うことが出来るようになったことが確認できました。

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?