AWS Glue
開発者ガイド

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

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

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

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

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

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

IAM ロール

ジョブ実行とデータストアへのアクセスに使用されるリソースへの認証に使用する 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 個の vCPU のコンピューティング性能と 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

  • pickle

  • re

  • SciPy

  • sklearn

  • sklearn.feature_extraction

  • sklearn.preprocessing

  • xml.etree.ElementTree

  • zipfile

科学計算の Python シェルジョブで、NumPy ライブラリを使用できます。詳細については、「NumPy」を参照してください。以下の例は、Python シェルジョブで使用できる NumPy スクリプトを示しています。このスクリプトは、「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

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

Python ライブラリを含む .egg ファイルを作成して、[Python ライブラリパス] パラメータとして AWS Glue ジョブに渡すことができます。たとえば、Amazon Redshift クラスターを操作する Python シェルジョブを作成する場合、以下の手順を実行します。

  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 に以下のコードを貼り付けます。

    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

    前述のコードの portdb_nameuser、および password_for_user を Amazon Redshift クラスター固有の詳細と置き換えます。table_name を Amazon Redshift のテーブルの名前と置き換えます。

  6. まだそこにない場合は、redshift_module ディレクトリに変更します。次のコマンドを実行して、.egg ファイルを作成します。

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

  8. このコマンドは、dist ディレクトリに redshift_module-0.1-py2.7.egg というファイルを作成します。このファイルを Amazon S3 にアップロードします。

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

  9. 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
  10. 前述のファイルを Amazon S3 にアップロードします。この例では、ファイルがアップロードされた後のパスは s3://MyBucket/python/library/redshift_test.py です。

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

    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"}'

    ジョブが実行されると、スクリプトは、Amazon Redshift クラスターの table_name というテーブルに作成された行を出力します。