AWS Glueスクリプトのローカルでの開発およびテスト - AWS Glue

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Glueスクリプトのローカルでの開発およびテスト

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

  • AWS Glue Studio コンソール

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

    • スクリプトエディタ

    • AWS Glue Studio ノートブック

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

    • Jupyter Notebook

  • Docker イメージ

    • ローカル開発

    • リモート開発

  • AWS Glue Studio ETL ライブラリ

    • ローカル開発

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

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

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

開発をローカル/リモートの両方で行いたい場合は、Docker イメージが便利です。これにより、Spark ジョブスクリプト用の AWS 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 イメージによる開発

注記

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

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

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

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

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

  • 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 用です。このアーキテクチャでテストすることをお勧めします。ただし、サポートされていないベースイメージでローカル開発ソリューションを作り直すことは可能な場合があります。

この例では、ローカルマシンでの amazon/aws-glue-libs:glue_libs_4.0.0_image_01 の使用方法とコンテナの実行方法について説明します。このコンテナイメージは、AWS Glue Spark ジョブのバージョン 3.3 でテスト済みです。このグループには、以下が含まれます。

  • Amazon Linux

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

  • Apache Spark 3.3.0

  • Spark 履歴サーバー

  • Jupyter ラボ

  • Livy

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

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

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

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

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

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

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

前提条件

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

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

AWS の設定

コンテナから AWS API コールを有効にするには、以下の手順に従って AWS 認証情報をセットアップします。以下のセクションでは、この AWS により名前が指定されたプロファイルを使用します。

  1. AWS CLI を設定し、名前付きプロファイルを設定します。  AWS CLI 構成の詳細については、AWS CLI ドキュメントの「構成と認証情報ファイルの設定」を参照してください。

  2. ターミナルで次のコマンドを実行します。

    PROFILE_NAME="<your_profile_name>"

リクエストの送信先となる AWS リージョン を指定するとき、AWS_REGION 環境変数の設定も必要になる場合があります。

コンテナの設定と実行

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

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

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

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

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

docker pull amazon/aws-glue-libs:glue_libs_4.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_4.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 ...
  3. (オプション) 環境に合わせて spark-submit を構成します。たとえば、--jars 設定を使用して依存関係を渡すことができます。詳細については、Spark ドキュメントの spark-submit を使用したアプリケーションの起動を参照してください。

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_4.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_4.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_4.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 Notebook UI によるコードの開発を開始できます。

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

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

前提条件:

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

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

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

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

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

  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_4.0.0_image_01 pyspark
  2. Visual Studio Code を起動します。

  3. 左側のメニューで [Remote Explorer] (リモートエクスプローラー) を選択した上で、amazon/aws-glue-libs:glue_libs_4.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) スクリプトをローカルで開発およびテストできます。Docker イメージを使用したローカル開発が推奨されています。これを使用すると、このライブラリーを使用するための環境が適切に構成されるからです。

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

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

ローカル開発の制限

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

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

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

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

  • ベクトル化された SIMD CSV リーダーはローカル開発ではサポートされていません。

  • S3 パスから JDBC ドライバーをロードするための customJdbcDriverS3Path プロパティは、ローカル開発ではサポートされていません。代わりに、ローカルに JDBC ドライバーをダウンロードして、そこからロードすることはできます。

  • Glue Data Quality はローカル開発ではサポートされていません。

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 の場合は、ブランチ glue-3.0 を確認します。

    • AWS Glue バージョン 4.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

    • AWS Glue バージョン 4.0 の場合: export SPARK_HOME=/home/$USER/spark-3.3.0-amzn-1-bin-3.3.3-amzn-0

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

    • AWS Glue バージョン 4.0 の場合: export SPARK_HOME=/home/$USER/spark-3.3.0-amzn-1-bin-3.3.3-amzn-0

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

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

  • AWS Glue バージョン 4.0 の場合は 4.0.0

  • 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, 2.12.7 for AWS Glue 3.0 and 4.0</scala.version> <glue.version>Glue version with three numbers (as mentioned earlier)</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」を参照してください。