AWS Glue ジョブスクリプトの開発とテスト - AWS Glue

AWS Glue ジョブスクリプトの開発とテスト

AWS Glue ジョブスクリプトの開発およびテストで利用するために、以下のような複数のオプションが用意されています。

  • AWS Glue Studio コンソール

    • Visual editor (ビジュアルエディタ)

    • スクリプトエディタ

    • AWS Glue Studio ノートブック

  • インタラクティブなセッション

    • Jupyter ノートブック

  • Docker イメージ

    • ローカル開発

    • リモート開発

  • AWS Glue Studio ETL ライブラリ

    • ローカル開発

ユーザーは、要件に基づいて、上記のオプションのいずれかを選択できます。

コードを記述したくない、あるいは記述する量を削減したい場合は、AWS Glue Studio のビジュアルエディタが便利です。

ノートブックのインタラクティブな操作をご希望の場合には、AWS Glue Studio のノートブックが適しています。詳細については、「AWS Glue Studio と AWS Glue でのノートブックの使用」を参照してください。独自のローカル環境を使用するユーザーには、インタラクティブセッションが適しています。詳細については、「AWS Glue でインタラクティブセッションを使用する」を参照してください。

開発をローカル/リモートの両方で行いたい場合は、Docker イメージが便利です。これにより、希望する任意の場所から Glue ジョブスクリプトの開発とテストが行え、AWS Glue のコストもかかりません。

Docker を使用せずローカルで開発を行いたい場合は、AWS Glue ETL ライブラリディレクトリを、ローカルにインストールします。

AWS Glue Studio コンソールを使用した開発

AWS Glue Studio のビジュアルエディターは、AWS Glue での抽出、変換、ロード (ETL) ジョブの作成、実行、およびモニタリングが簡単に行えるグラフィカルなインターフェイスです。データ変換ワークフローを視覚的に作成し、AWS Glue の Apache Spark ベースのサーバーレス ETL エンジン上で、それらをシームレスに実行することができます。ジョブの各ステップでスキーマとデータの結果を調べることができます。詳細については、AWS Glue Studio ユーザーガイドを参照してください。

インタラクティブセッションによる開発

インタラクティブセッションでは、お好みの環境からアプリケーションを構築し、そのテストが行えます。詳細については、「AWS Glue でインタラクティブセッションを使用する」を参照してください。

Docker イメージによる開発

本番環境対応のデータプラットフォームの場合、AWS Glue ジョブ向けの開発プロセスや CI/CD パイプラインで検討すべきです。AWS Glue ジョブの開発とテストは、ローカルのノート PC や Amazon EC2 の Docker コンテナを使用するなどして、柔軟に行うことができます。これは、DockerHub でホストされている AWS Glue Docker イメージを利用することで実現します。Docker イメージは、追加のユーティリティを使用して開発環境を設定する際に役立ちます。IDE、ノートブック、または、AWS Glue ETL ライブラリを使用する REPL などを、ご自分で選択して使用できます。このトピックでは、Docker コンテナ上で Docker イメージを使用して、AWS Glue ジョブのバージョン 3.0 を開発およびテストする方法について説明します。

Docker Hub には、以下のように AWS Glueでの利用が可能な Docker イメージが用意されています。

  • AWS Glue バージョン 3.0 の場合: amazon/aws-glue-libs:glue_libs_3.0.0_image_01

  • AWS Glue バージョン 2.0 の場合: amazon/aws-glue-libs:glue_libs_2.0.0_image_01

これらのイメージは x86_64 用です。

この例では、ローカルマシン (Mac/Windows/Linux) での amazon/aws-glue-libs:glue_libs_3.0.0_image_01 の使用法とコンテナを実行するための方法を示します。このコンテナイメージは、AWS Glue Spark ジョブのバージョン 3.0 でテスト済みです。このグループには、以下が含まれます。

  • Amazon Linux

  • AWS Glue ETL ライブラリ (aws-glue-libs)

  • Apache Spark 3.1.1

  • Spark 履歴サーバー

  • Jupyter ラボ

  • Livy

  • その他のライブラリ依存関係 (AWS Glue ジョブシステムのライブラリセットと同じです)

要件に応じて、以下のいずれかのセクションを完了します。

  • spark-submit を使用するようにコンテナをセットアップする

  • REPL シェル (PySpark) を使用するようにコンテナをセットアップする

  • Pytest を使用するようにコンテナをセットアップする

  • Jupyter Lab を使用するようにコンテナをセットアップする

  • Visual Studio Code を使用するようにコンテナをセットアップする

前提条件

作業を開始する前に、Docker がインストール済みであり、Docker デーモンが実行中であることを確認します。インストールの手順については、MacWindows、または Linux 向けの Docker ドキュメントを参照してください。AWS Glue コンテナは、Docker を実行しているマシンでホストされます。また、Docker を実行しているホスト上のイメージ用として、少なくとも 7 GB のディスク領域が必要です。

AWS Glue のコードをローカルで開発する際の制限については、「ローカル開発の制限」を参照してください。

AWS 認証情報の設定

コンテナからの AWS API コールを有効化するには、以下の手順で AWS 認証情報をセットアップします。

  1. AWS がつけた名前でプロファイルを作成します。

  2. Windows または Mac/Linux のターミナルで cmd を開き、次のコマンドを実行します。

    PROFILE_NAME="profile_name"

以下のセクションでは、この AWS により名前が指定されたプロファイルを使用します。

コンテナの設定と実行

spark-submit コマンドから PySpark コードを実行できるようにコンテナを設定するには、以下のような高度な手順が必要です。

  1. Docker Hub からイメージを取得します。

  2. コンテナを実行します。

Docker Hub からのイメージの取得

Windows で Docker を実行している場合は、Docker アイコンを右クリックし、イメージを取得する張る前に [Switch to Linux containers...] (Linux コンテナに切り替える...) を選択します。

Docker Hub からイメージを取得するには、次のコマンドを実行します。

docker pull amazon/aws-glue-libs:glue_libs_3.0.0_image_01

コンテナの実行

ここまでの操作により、取得したイメージを使用してコンテナを実行できるようになります。ご自身の要件に応じて、以下のいずれかを選択できます。

spark-submit

コンテナで spark-submit コマンドを使用して、AWS Glue のジョブスクリプトを実行できます。

  1. スクリプトを記述し、/local_path_to_workspace ディレクトリの下に sample1.py として保存します。このトピックの付録に、このためのサンプルコードが含まれています。

    $ WORKSPACE_LOCATION=/local_path_to_workspace $ SCRIPT_FILE_NAME=sample.py $ mkdir -p ${WORKSPACE_LOCATION}/src $ vim ${WORKSPACE_LOCATION}/src/${SCRIPT_FILE_NAME}
  2. 以下のコマンドにより、コンテナで spark-submit コマンドを使用して、新しい Spark アプリケーションをサブミットします。

    $ docker run -it -v ~/.aws:/home/glue_user/.aws -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_spark_submit amazon/aws-glue-libs:glue_libs_3.0.0_image_01 spark-submit /home/glue_user/workspace/src/$SCRIPT_FILE_NAME ...22/01/26 09:08:55 INFO DAGScheduler: Job 0 finished: fromRDD at DynamicFrame.scala:305, took 3.639886 s root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- lang: string | | |-- note: string | | |-- name: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string ...
REPL シェル (Pyspark)

REPL (read-eval-print loops) シェルを実行すると、インタラクティブな開発を行うことができます。

次のコマンドにより、コンテナ上で PySpark コマンドを実行し、REPL シェルを起動します。

$ docker run -it -v ~/.aws:/home/glue_user/.aws -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_pyspark amazon/aws-glue-libs:glue_libs_3.0.0_image_01 pyspark ... ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 3.1.1-amzn-0 /_/ Using Python version 3.7.10 (default, Jun 3 2021 00:02:01) Spark context Web UI available at http://56e99d000c99:4040 Spark context available as 'sc' (master = local[*], app id = local-1643011860812). SparkSession available as 'spark'. >>>
Pytest

ユニットテストの場合、AWS Glue のSpark ジョブスクリプトで pytest を使用できます。

以下のコマンドを実行し、準備を行います。

$ WORKSPACE_LOCATION=/local_path_to_workspace $ SCRIPT_FILE_NAME=sample.py $ UNIT_TEST_FILE_NAME=test_sample.py $ mkdir -p ${WORKSPACE_LOCATION}/tests $ vim ${WORKSPACE_LOCATION}/tests/${UNIT_TEST_FILE_NAME}

テストスイートで pytest を実行するため、以下のコマンドを実行します。

$ docker run -it -v ~/.aws:/home/glue_user/.aws -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_pytest amazon/aws-glue-libs:glue_libs_3.0.0_image_01 -c "python3 -m pytest" starting org.apache.spark.deploy.history.HistoryServer, logging to /home/glue_user/spark/logs/spark-glue_user-org.apache.spark.deploy.history.HistoryServer-1-5168f209bd78.out *============================================================= test session starts ============================================================= *platform linux -- Python 3.7.10, pytest-6.2.3, py-1.11.0, pluggy-0.13.1 rootdir: /home/glue_user/workspace plugins: anyio-3.4.0 *collected 1 item * tests/test_sample.py . [100%] ============================================================== warnings summary =============================================================== tests/test_sample.py::test_counts /home/glue_user/spark/python/pyspark/sql/context.py:79: DeprecationWarning: Deprecated in 3.0.0. Use SparkSession.builder.getOrCreate() instead. DeprecationWarning) -- Docs: https://docs.pytest.org/en/stable/warnings.html ======================================================== 1 passed, *1 warning* in 21.07s ========================================================
Jupyter ラボ

Jupyter を起動すると、ノートブックでインタラクティブな開発を行ったりアドホックなクエリを実行できます。

  1. 次のコマンドを実行して、Jupyter ラボを起動します。

    $ JUPYTER_WORKSPACE_LOCATION=/local_path_to_workspace/jupyter_workspace/ $ docker run -it -v ~/.aws:/home/glue_user/.aws -v $JUPYTER_WORKSPACE_LOCATION:/home/glue_user/workspace/jupyter_workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 -p 8998:8998 -p 8888:8888 --name glue_jupyter_lab amazon/aws-glue-libs:glue_libs_3.0.0_image_01 /home/glue_user/jupyter/jupyter_start.sh ... [I 2022-01-24 08:19:21.368 ServerApp] Serving notebooks from local directory: /home/glue_user/workspace/jupyter_workspace [I 2022-01-24 08:19:21.368 ServerApp] Jupyter Server 1.13.1 is running at: [I 2022-01-24 08:19:21.368 ServerApp] http://faa541f8f99f:8888/lab [I 2022-01-24 08:19:21.368 ServerApp] or http://127.0.0.1:8888/lab [I 2022-01-24 08:19:21.368 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
  2. ローカルマシンのウェブブラウザで http://127.0.0.1:8888/lab を開き、Jupyter ラボの UI を表示します。

    
          Jupyter Lab UI
  3. [Notebook] (ノートブック) の下にある、[Glue Spark Local (PySpark)] (Glue スパークローカル (PySpark)) をクリックします。これで、インタラクティブな Jupyter ノートブック UI によるコードの開発を開始できます。

    
          ノートブックでのコードの開発。

Visual Studio Code を使用するためのコンテナのセットアップ

前提条件:

  1. Visual Studio Code をインストールします。

  2. Python をインストールします。

  3. Visual Studio Code Remote – コンテナをインストールします。

  4. Visual Studio Code でワークスペースフォルダを開きます。

  5. [Settings] (設定) を選択します。

  6. [Workspace] (ワークスペース) を選択します。

  7. [Open Settings (JSON)] (設定を開く (JSON)) をクリックします。

  8. 次の JSON を貼り付け、保存します。

    { "python.defaultInterpreterPath": "/usr/bin/python3", "python.analysis.extraPaths": [ "/home/glue_user/aws-glue-libs/PyGlue.zip:/home/glue_user/spark/python/lib/py4j-0.10.9-src.zip:/home/glue_user/spark/python/", ] }

ステップ:

  1. Docker コンテナを実行します。

    $ docker run -it -v ~/.aws:/home/glue_user/.aws -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_pyspark amazon/aws-glue-libs:glue_libs_3.0.0_image_01 pyspark
  2. Visual Studio Code を起動します。

  3. 左側のメニューで [Remote Explorer] (リモートエクスプローラー) を選択した上で、amazon/aws-glue-libs:glue_libs_3.0.0_image_01 を選択します。

    
          Visual Studio Code 内のライブラリ。
  4. 右クリックし、[Attach to Container] (コンテナにアタッチ) を選択します。ダイアログが表示されたら、[Got it] (確認) をクリックします。

  5. /home/glue_user/workspace/ を開きます。

  6. Glue PySpark スクリプトを作成し、[Run] (実行) をクリックします。

    このスクリプトは正常に実行されたことが表示されます。

    
          スクリプトが正常に実行されました。

付録: テスト用の AWS Glue ジョブのサンプルコード

この付録では、テスト用の AWS Glue ジョブのサンプルコードとしてスクリプトを示します。

sample.py: Amazon S3 API コールにより AWS Glue ETL ライブラリを利用するためのサンプルコード

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions class GluePythonSampleTest: def __init__(self): params = [] if '--JOB_NAME' in sys.argv: params.append('JOB_NAME') args = getResolvedOptions(sys.argv, params) self.context = GlueContext(SparkContext.getOrCreate()) self.job = Job(self.context) if 'JOB_NAME' in args: jobname = args['JOB_NAME'] else: jobname = "test" self.job.init(jobname, args) def run(self): dyf = read_json(self.context, "s3://awsglue-datasets/examples/us-legislators/all/persons.json") dyf.printSchema() self.job.commit() def read_json(glue_context, path): dynamicframe = glue_context.create_dynamic_frame.from_options( connection_type='s3', connection_options={ 'paths': [path], 'recurse': True }, format='json' ) return dynamicframe if __name__ == '__main__': GluePythonSampleTest().run()

上記のコードには、AWS IAM 内に、Amazon S3 へのアクセス許可が必要です。IAM マネージドのポリシー arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess を付与するか、Amazon S3 パスに対し ListBucket および GetObject を呼び出せるようにする IAM のカスタムポリシーを付与します。

test_sample.py: sample.py でのユニットテスト向けのサンプルコード。

import pytest from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions import sys from src import sample @pytest.fixture(scope="module", autouse=True) def glue_context(): sys.argv.append('--JOB_NAME') sys.argv.append('test_count') args = getResolvedOptions(sys.argv, ['JOB_NAME']) context = GlueContext(SparkContext.getOrCreate()) job = Job(context) job.init(args['JOB_NAME'], args) yield(context) job.commit() def test_counts(glue_context): dyf = sample.read_json(glue_context, "s3://awsglue-datasets/examples/us-legislators/all/persons.json") assert dyf.toDF().count() == 1961

AWS Glue ETL ライブラリを使用した開発

AWS Glue ETL ライブラリはパブリックな Amazon S3 バケットに加えて、Apache Maven のビルドシステムでも使用が可能です。これにより、ネットワーク接続を必要とせずに Python および Scala の抽出、変換、ロード (ETL) スクリプトをローカルで開発およびテストできます。

ローカル開発は、AWS Glue バージョン0.9、AWS Glue バージョン 1.0 以降を含むすべての AWS Glue バージョンで可能です。AWS Glue で使用できる Python および Apache Spark のバージョンについては、「Glue version job property」を参照してください。

ライブラリは、Amazon ソフトウェアライセンス (http://aws.amazon.com/asl) とともにリリースされています。

注記

このセクションでの手順は、Microsoft Windows オペレーティングシステムではテストされていません。

Windows プラットフォームでのローカル開発およびテストについては、ブログ記事「Building an AWS Glue ETL pipeline locally without an AWS account」を参照してください。

ローカル開発の制限

AWS Glue Scala ライブラリを使用してローカルで開発する場合は、次の制限事項に注意してください。

  • AWS Glue ライブラリでアセンブリ jar (「fat jar」または「uber jar」) を作成しないでください。作成すると、次の機能が無効になるためです。

    これらの機能は、AWS Glue ジョブシステム内でのみ使用できます。

  • FindMatches 変換はローカル開発ではサポートされていません。

Python を使用したローカルでの開発

いくつかの前提条件ステップを完了してから、AWS Glue ユーティリティを使用して Python ETL スクリプトをテストして送信します。

ローカル Python 開発の前提条件

ローカル Python 開発に備えるには、以下の手順を実行します。

  1. GitHub (AWS Glue) から https://github.com/awslabs/aws-glue-libs の Python リポジトリをクローンします。

  2. 以下のいずれかを実行します。

    • AWS Glue バージョン 0.9 の場合は、ブランチ glue-0.9 を確認します。

    • AWS Glue バージョン 1.0 の場合は、ブランチ glue-1.0 を確認します。AWS Glue 0.9 以降のすべてのバージョンは、Python 3 をサポートしています。

    • AWS Glue バージョン 2.0 の場合は、ブランチ glue-2.0 を確認します。

    • AWS Glue バージョン 3.0 の場合は、master ブランチを確認します。

  3. Apache Maven を https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz からインストールします。

  4. Apache Spark ディストリビューションを次のいずれかの場所からインストールします。

  5. SPARK_HOME 環境変数をエクスポートし、Spark アーカイブから抽出したルートの場所に設定します。例:

    • AWS Glue バージョン 0.9 の場合: export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7

    • AWS Glue バージョン 1.0 および 2.0 の場合: export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8

    • AWS Glue バージョン 3.0 の場合: export SPARK_HOME=/home/$USER/spark-3.1.1-amzn-0-bin-3.2.1-amzn-3

Python ETL スクリプトの実行

ローカル開発に使用できる AWS Glue jar ファイルを使用すると、AWS Glue Python パッケージをローカルで実行できます。

Python スクリプトをテストして実行するには、次のユーティリティとフレームワークを使用します。次の表に示すコマンドは、AWS Glue Python パッケージのルートディレクトリから実行されます。

ユーティリティ コマンド 説明
AWS Glue シェル ./bin/gluepyspark AWS Glue ETL ライブラリと統合されるシェルで Python スクリプトを入力して実行します。
AWS Glue [Submit (送信)] ./bin/gluesparksubmit 実行のために完全な Python スクリプトを送信します。
Pytest ./bin/gluepytest Python コードのユニットテストを記述して実行します。pytest モジュールが PATH にインストールされ、使用可能になっている必要があります。詳細については、pytest のドキュメントを参照してください。

Scala を使用したローカルでの開発

いくつかの前提条件ステップを完了してから、Maven コマンドを発行して Scala ETL スクリプトをローカルで実行します。

ローカル Scala 開発の前提条件

ローカルの Scala 開発に備えるには、以下のステップを実行します。

ステップ 1: ソフトウェアのインストール

このステップでは、ソフトウェアをインストールし、必要な環境変数を設定します。

  1. Apache Maven を https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz からインストールします。

  2. Apache Spark ディストリビューションを次のいずれかの場所からインストールします。

  3. SPARK_HOME 環境変数をエクスポートし、Spark アーカイブから抽出したルートの場所に設定します。例:

    • AWS Glue バージョン 0.9 の場合: export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7

    • AWS Glue バージョン 1.0 および 2.0 の場合: export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8

    • AWS Glue バージョン 3.0 の場合: export SPARK_HOME=/home/$USER/spark-3.1.1-amzn-0-bin-3.2.1-amzn-3

ステップ 2: Maven プロジェクトを設定する

AWS Glue Scala アプリケーションのテンプレートとして次の pom.xml ファイルを使用します。これには、必須の dependenciesrepositoriesplugins 要素が含まれています。Glue version を以下のいずれかに置き換えます。

  • 3.0.0 バージョン 3.0 の場合の AWS Glue

  • 1.0.0 バージョン 1.0 または 2.0 の場合は AWS Glue

  • 0.9.0 バージョン 0.9 の場合の AWS Glue

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.amazonaws</groupId> <artifactId>AWSGlueApp</artifactId> <version>1.0-SNAPSHOT</version> <name>${project.artifactId}</name> <description>AWS ETL application</description> <properties> <scala.version>*<2.11.1> for AWS Glue 2.0 or below, or <2.12.7> for AWS Glue 3.0*</scala.version> <glue.version>Glue version (as mentioned above)</glue.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> <!-- A "provided" dependency, this will be ignored when you package your application --> <scope>provided</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>AWSGlueETL</artifactId> <version>${glue.version}</version> <!-- A "provided" dependency, this will be ignored when you package your application --> <scope>provided</scope> </dependency> </dependencies> <repositories> <repository> <id>aws-glue-etl-artifacts</id> <url>https://aws-glue-etl-artifacts.s3.amazonaws.com/release/</url> </repository> </repositories> <build> <sourceDirectory>src/main/scala</sourceDirectory> <plugins> <plugin> <!-- see http://davidb.github.com/scala-maven-plugin --> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.4.0</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <systemProperties> <systemProperty> <key>spark.master</key> <value>local[*]</value> </systemProperty> <systemProperty> <key>spark.app.name</key> <value>localrun</value> </systemProperty> <systemProperty> <key>org.xerial.snappy.lib.name</key> <value>libsnappyjava.jnilib</value> </systemProperty> </systemProperties> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.0.0-M2</version> <executions> <execution> <id>enforce-maven</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <requireMavenVersion> <version>3.5.3</version> </requireMavenVersion> </rules> </configuration> </execution> </executions> </plugin> <!-- The shade plugin will be helpful in building a uberjar or fatjar. You can use this jar in the AWS Glue runtime environment. For more information, see https://maven.apache.org/plugins/maven-shade-plugin/ --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <configuration> <!-- any other shade configurations --> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

Scala ETL スクリプトの実行

Maven プロジェクトのルートディレクトリから次のコマンドを実行して、Scala ETL スクリプトを実行します。

mvn exec:java -Dexec.mainClass="mainClass" -Dexec.args="--JOB-NAME jobName"

mainClass を、スクリプトのメインクラスの完全修飾クラス名に置き換えます。jobName を目的のジョブ名に置き換えます。

テスト環境の設定

ローカルテスト環境の設定例については、以下のブログ記事を参照してください。

ETL スクリプトをテストするために、開発エンドポイントまたはノートブックを使用する必要がある場合は、「開発エンドポイントを使用してスクリプトを開発する」を参照してください。

注記

開発エンドポイントは、AWS Glue バージョン 2.0 ジョブでの使用がサポートされていません。詳細については、「Running Spark ETL Jobs with Reduced Startup Times」を参照してください。