AWS CDK v2.81.0 で AWS Glue Job のワーカータイプとして G.4X および G.8X が指定可能になりました

2023.05.27

こんにちは、CX事業本部 Delivery部の若槻です。

AWS CDK の最新バージョンである v2.81.0 で、 AWS Glue Job のワーカータイプとして G.4X および G.8X が指定可能になるアップグレードがありました

Features

- glue: Add G.4X and G.8X worker types for AWS Glue (#25637) (1e4ffcd)

リリースのコード差分を見てみると、@aws-cdk/aws-glue-alpha(AWS Glue 向けの Experimental 版 CDK ライブラリ)で G_4X および G_8X が追加されていることが分かります。

G.4X および G.8X は今月9日のアップデートで追加されたワーカータイプで、既存の G.1X のそれぞれ4倍、8倍のリソースを提供し、ペタバイト級のデータ処理を実行できるようになります。下記の速報記事に詳しいので合わせてご覧ください。

今回は、AWS CDK で G.4X および G.8X のワーカータイプの Glue Job の構築を試してみます。

試してみた

CDK アップグレード前

まず CDK ライブラリのアップグレード前に現在の仕様を確認してみます。現在の @aws-cdk/aws-glue-alpha のバージョンは 2.61.1-alpha.0 です。

lib/cdk-sample-app.ts

import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';

import * as glue_alpha from '@aws-cdk/aws-glue-alpha';

export class CdkSampleStack extends Stack {
  constructor(scope: Construct, id: string, props: StackProps) {
    super(scope, id, props);

    new glue_alpha.Job(this, 'hogeGlueJob', {
      jobName: 'hogeGlueJob',
      executable: glue_alpha.JobExecutable.pythonEtl({
        glueVersion: glue_alpha.GlueVersion.V4_0,
        pythonVersion: glue_alpha.PythonVersion.THREE,
        script: glue_alpha.Code.fromAsset('src/glue-scripts.py'),
      }),
    });
  }
}

この時点で選べる WorkerType は STANDARDG.1X および G.2X のみです。

ソースコードからもそのことが確認できます。

node_modules/@aws-cdk/aws-glue-alpha/lib/job.d.ts

export declare class WorkerType {
    /**
     * Each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker.
     */
    static readonly STANDARD: WorkerType;
    /**
     * Each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. Suitable for memory-intensive jobs.
     */
    static readonly G_1X: WorkerType;
    /**
     * Each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. Suitable for memory-intensive jobs.
     */
    static readonly G_2X: WorkerType;
    /**
     * Custom worker type
     * @param workerType custom worker type
     */
    static of(workerType: string): WorkerType;
    /**
     * The name of this WorkerType, as expected by Job resource.
     */
    readonly name: string;
    private constructor();
}

Glue version 4.0 の場合、ワーカータイプを指定せずにデプロイすると、既定では G.1X が指定されます。

CDK ライブラリのアップグレード

Glue Alpha ライブラリ(@aws-cdk/aws-glue-alph)を v2.81.0 (現時点の最新バージョン)にアップグレードします。

npm i @aws-cdk/aws-glue-alph@2.81.0-alpha.

package.json

{
  "dependencies": {
-     "@aws-cdk/aws-glue-alpha": "^2.61.1-alpha.0",
+    "@aws-cdk/aws-glue-alpha": "^2.81.0-alpha.0",
  }
}

WorkerType クラスで G_4X と G_8X が指定可能になりました。

node_modules/@aws-cdk/aws-glue-alpha/lib/job.d.ts

export declare class WorkerType {
    /**
     * Each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker.
     */
    static readonly STANDARD: WorkerType;
    /**
     * Each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. Suitable for memory-intensive jobs.
     */
    static readonly G_1X: WorkerType;
    /**
     * Each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. Suitable for memory-intensive jobs.
     */
    static readonly G_2X: WorkerType;
    /**
     * Each worker maps to 4 DPU (16 vCPU, 64 GB of memory, 256 GB disk), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for AWS Glue version 3.0 or later jobs.
     */
    static readonly G_4X: WorkerType;
    /**
     * Each worker maps to 8 DPU (32 vCPU, 128 GB of memory, 512 GB disk), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for AWS Glue version 3.0 or later jobs.
     */
    static readonly G_8X: WorkerType;
    /**
     * Each worker maps to 0.25 DPU (2 vCPU, 4 GB of memory, 64 GB disk), and provides 1 executor per worker. Suitable for low volume streaming jobs.
     */
    static readonly G_025X: WorkerType;
    /**
     * Each worker maps to 2 high-memory DPU [M-DPU] (8 vCPU, 64 GB of memory, 128 GB disk). Supported in Ray jobs.
     */
    static readonly Z_2X: WorkerType;
    /**
     * Custom worker type
     * @param workerType custom worker type
     */
    static of(workerType: string): WorkerType;
    /**
     * The name of this WorkerType, as expected by Job resource.
     */
    readonly name: string;
    private constructor();
}

ちなみにアップグレードにより追加で利用可能になっている G_025X は Streaming Job 向け、Z_2X は Ray Job 向けの WorkerType です。

デプロイしてみる

WorkerType として G_4X を指定して CDK Deploy をしてみます。

lib/cdk-sample-app.ts

    new glue_alpha.Job(this, 'hogeGlueJob', {
      jobName: 'hogeGlueJob',
      executable: glue_alpha.JobExecutable.pythonEtl({
        glueVersion: glue_alpha.GlueVersion.V4_0,
        pythonVersion: glue_alpha.PythonVersion.THREE,
        script: glue_alpha.Code.fromAsset('src/glue-scripts.py'),
      }),
      workerType: glue_alpha.WorkerType.G_4X,
    });

すると Please set both Worker Type and Number of Workers. というエラーが発生し、デプロイに失敗しました。調べてみたところこのエラーは workerType プロパティの指定時にはワーカー数(workerCount)を合わせて指定する必要があるようです。

workerType および workerCount を指定して再度デプロイすると、今度は成功しました。

lib/cdk-sample-app.ts

    new glue_alpha.Job(this, 'hogeGlueJob', {
      jobName: 'hogeGlueJob',
      executable: glue_alpha.JobExecutable.pythonEtl({
        glueVersion: glue_alpha.GlueVersion.V4_0,
        pythonVersion: glue_alpha.PythonVersion.THREE,
        script: glue_alpha.Code.fromAsset('src/glue-scripts.py'),
      }),
      workerType: glue_alpha.WorkerType.G_4X, // G.4X を指定
      workerCount: 10,
    });

コンソールからも G.4X が指定されていることが確認できました。

lib/cdk-sample-app.ts

    new glue_alpha.Job(this, 'hogeGlueJob', {
      jobName: 'hogeGlueJob',
      executable: glue_alpha.JobExecutable.pythonEtl({
        glueVersion: glue_alpha.GlueVersion.V4_0,
        pythonVersion: glue_alpha.PythonVersion.THREE,
        script: glue_alpha.Code.fromAsset('src/glue-scripts.py'),
      }),
      workerType: glue_alpha.WorkerType.G_8X, // G.8X を指定
      workerCount: 10,
    });

おわりに

AWS CDK v2.81.0 で AWS Glue Job のワーカータイプとして G.4X および G.8X が指定可能になっていたので、実際に試してみました。

大量データの変換や機械学習処理など大量のリソースを必要とする処理を実行する場合は、G.4X および G.8X を指定することで処理時間を短縮できる可能性があるので、ぜひ活用してみてください。

参考

以上