AWS Glue での Python シェルジョブの追加 - AWS Glue

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

AWS Glue での Python シェルジョブの追加

Python シェルジョブを使用して、AWS Glue でシェルとして Python スクリプトを実行できます。Python シェルジョブを使用すると、Python 2.7 または Python 3.6 と互換性のあるスクリプトを実行することができます。

Python シェルを使用してジョブのブックマークを使用することはできません。Apache Spark ジョブで利用可能な他の機能のほとんどは Python シェルジョブでも利用可能です。

[ Amazon CloudWatch Logs Pythonシェルジョブの出力のgroupは /aws-glue/python-jobs/output. エラーについては、ログ グループを参照してください。 /aws-glue/python-jobs/errors.

Python シェルジョブのジョブプロパティの定義

コンソールで Python シェルジョブを定義する場合 (「AWS Glue コンソールでのジョブの使用」を参照してください)、次のいくつかのプロパティを指定します。

IAM ロール

ジョブの実行とデータストアへのアクセスに使用されるリソースへの認証に使用する AWS Identity and Access Management (IAM) ロールを指定します。AWS Glue でジョブを実行するためのアクセス権限の詳細については、AWS Glue リソースのアクセス許可の管理 を参照してください。

タイプ

[Python シェル] を選択して、pythonshell という名前のジョブコマンドを使用して Python スクリプトを実行します。

Python バージョン

Python のバージョンを選択します。デフォルトは Python 3 です。

カスタムスクリプト

スクリプトのコードでジョブの手続きロジックを定義します。スクリプトの名前と Amazon Simple Storage Service (Amazon S3) 内の場所を指定します。パスのスクリプトディレクトリと同じ名前のファイルが存在していないことを確認します。スクリプトの使用の詳細については、AWS Glue でスクリプトを編集する を参照してください。

既存または新しいスクリプト

スクリプトのコードでジョブの手続きロジックを定義します。Python 2.7 または Python 3.6 でスクリプトをコーディングできます。スクリプトは AWS Glue コンソールで編集できますが、AWS Glue では生成されません。

最大キャパシティー

このジョブの実行に割り当てられる AWS Glue データ処理ユニット (DPU) の最大数。DPUは、4つの vCPUs コンピューティング容量と16 GBのメモリです。詳細については、「AWS Glue の料金」を参照してください。

値を 0.0625 または 1 に設定できます。デフォルトは 0.0625 です。

追加のプロパティの説明については、「ジョブプロパティの定義」を参照してください。AWS Glue コンソールを使用してジョブを追加する方法の詳細については、AWS Glue コンソールでのジョブの使用 を参照してください。

次の例のように AWS CLI を使用して Python シェルジョブを作成することもできます。

aws glue create-job --name python-job-cli --role Glue_DefaultRole --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://aws-glue-scripts-123456789012-us-east-1/Admin/python-job-cli.py"}'

AWS CLI で作成したジョブはデフォルトで Python 2 になります。Python 3 を指定するには、--command パラメータにこのタプルを追加します。

"PythonVersion":"3"

Python シェルジョブによって使用される最大容量を設定するには、--max-capacity パラメータを指定します。Python シェルジョブに --allocated-capacity パラメータは使用できません。

サポートされている Python シェルジョブのライブラリ

Python シェルジョブを実行する環境は、次のライブラリをサポートしています。

  • Boto3

  • collections

  • CSV

  • gzip

  • multiprocessing

  • NumPy

  • pandas (python setuptools 設定である setup.py を使用してインストールする必要があります)

  • pickle

  • PyGreSQL

  • re

  • SciPy

  • sklearn

  • sklearn.feature_extraction

  • sklearn.preprocessing

  • xml.etree.ElementTree

  • zipfile

科学計算用の Python シェルジョブで、NumPy ライブラリを使用できます。詳細については、以下を参照してください。 NumPy. 次の例は、 NumPy Pythonシェル ジョブで使用できるスクリプト。このスクリプトは、「Hello world」といくつかの数値計算の結果を出力します。

import numpy as np print("Hello world") a = np.array([20,30,40,50]) print(a) b = np.arange( 4 ) print(b) c = a-b print(c) d = b**2 print(d)

Limitations

Python ライブラリのパッケージ化には、以下の制限があります。

  • Python 3.7 を使用した Windows 10 Pro での .egg ファイルの作成はサポートされていません。

  • Python 3.6 を使用した WSL (Windows 10 Pro によってホストされる Windows Linux Subsystem) での .egg ファイルの作成はサポートされています。

独自の Python ライブラリの提供

1 つ以上の Python ライブラリが .egg または .whl ファイルとして既にパッケージ化されている場合があります。その場合は、次の例のように、「—extra-py-files」フラグの下で AWS Command Line Interface (AWS CLI) を使用して、それらをジョブに指定できます。

aws glue create-job --name python-redshift-test-cli --role role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' --connections Connections=connection-name --default-arguments '{"--extra-py-files" : ["s3://MyBucket/python/library/redshift_module-0.1-py2.7.egg", "s3://MyBucket/python/library/redshift_module-0.1-py2.7-none-any.whl"]}'

Python ライブラリから .egg ファイルまたは .whl ファイルを作成する方法がわからない場合は、次のステップを使用してください。この例は、 macOS、Linux、およびWindows Subsystem for Linux(WSL)。

Python の .egg ファイルまたは .whl ファイルを作成するには

  1. Virtual Private Cloud (VPC) で Amazon Redshift クラスターを作成し、テーブルにデータを追加します。

  2. クラスターを作成した VPC-SecurityGroup-Subnet の組み合わせの AWS Glue 接続を作成します。接続に成功するかどうかをテストします。

  3. という名前のディレクトリを作成します。 redshift_exampleというファイル名のファイルを作成し、 setup.py. 次のコードを setup.py.

    from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'] )
  4. redshift_example ディレクトリに redshift_module ディレクトリを作成します。redshift_module ディレクトリに、ファイル __init__.pypygresql_redshift_common.py を作成します。

  5. __init__.py ファイルは空のままにします。pygresql_redshift_common.py 内に次のコードを貼り付けます。置換 port, db_name, user、および password_for_user 具体的な詳細を Amazon Redshift クラスタ。置換 table_name のテーブル名と Amazon Redshift.

    import pg def get_connection(host): rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % ( host, port, db_name, user, password_for_user) rs_conn = pg.connect(dbname=rs_conn_string) rs_conn.query("set statement_timeout = 1200000") return rs_conn def query(con): statement = "Select * from table_name;" res = con.query(statement) return res
  6. redshift_example ディレクトリに変更します (現在のディレクトリではない場合)。

  7. 次のいずれかを行ってください。

    • .egg ファイルを作成するには、次のコマンドを実行します。

      python setup.py bdist_egg
    • .whl ファイルを作成するには、次のコマンドを実行します。

      python setup.py bdist_wheel
  8. 前述のコマンドに必要な依存関係をインストールします。

  9. このコマンドでは、dist ディレクトリにファイルを作成します。

    • egg ファイルを作成した場合は、redshift_module-0.1-py2.7.egg という名前になります。

    • wheel ファイルを作成した場合は、redshift_module-0.1-py2.7-none-any.whl という名前になります。

    このファイルを Amazon S3 にアップロードします。

    この例では、アップロードされたファイルのパスは s3://MyBucket/python/library/redshift_module-0.1-py2.7.egg または s3://MyBucket/python/library/redshift_module-0.1-py2.7-none-any.whl です。

  10. AWS Glue ジョブのスクリプトとして使用する Python ファイルを作成し、このファイルに次のコードを追加します。

    from redshift_module import pygresql_redshift_common as rs_common con1 = rs_common.get_connection(redshift_endpoint) res = rs_common.query(con1) print "Rows in the table cities are: " print res
  11. 前述のファイルを Amazon S3 にアップロードします。この例では、アップロードされたファイルのパスは s3://MyBucket/python/library/redshift_test.py です。

  12. このスクリプトを使用して、Python シェルジョブを作成します。AWS Glue コンソールの [ジョブプロパティ] ページで、[Python ライブラリパス] ボックスに .egg/.whl ファイルへのパスを指定します。複数の .egg/.whl ファイルおよび Python ファイルがある場合は、このボックスにカンマ区切りリストとして指定します。

    .egg ファイルを変更または名前変更する場合、ファイル名は "python setup.py bdist_egg" コマンドによって生成されたデフォルト名を使用するか、Python モジュールの命名規則に従う必要があります。詳細については、Style Guide for Python Code を参照してください。

    次の例のように、AWS CLI でコマンドを使用してジョブを作成します。

    aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://MyBucket/python/library/redshift_module-0.1-py2.7.egg", "s3://MyBucket/python/library/redshift_module-0.1-py2.7-none-any.whl"]}'

    ジョブが実行されると、table_name テーブルの Amazon Redshift クラスタ。