チュートリアル: AWS Glue for Ray で ETL スクリプトを記述する
Ray を使用すると、分散したタスクを Python でネイティブに記述し、スケールすることができます。AWS Glue for Ray には、ジョブとインタラクティブセッションの両方からアクセスできるサーバーレスの Ray 環境が用意されています (Ray のインタラクティブセッションは現在プレビュー中です)。AWS Glue のジョブシステムを使用すると、スケジュールに基づいて、トリガーにより、または AWS Glue コンソールを使用して、一貫した方法でタスクを管理し、実行できます。
これら AWS Glue のツールを組み合わせると、AWS Glue の一般的なユースケースである、抽出、変換、ロード (ETL) ワークロードに使用できる強力なツールチェーンができあがります。このチュートリアルでは、このソリューションの組み立ての基礎を学びます。
また、ETL ワークロードで AWS Glue for Spark を使用する方法についても学習します。AWS Glue for Spark スクリプトの記述方法に関するチュートリアルは、「チュートリアル: AWS Glue for Spark スクリプトの記述」を参照してください。利用可能なエンジンの詳細については、「AWS Glue for Spark と AWS Glue for Ray」を参照してください。Ray は、分析、機械学習 (ML)、アプリケーション開発におけるさまざまな種類のタスクに対応できます。
このチュートリアルでは、Amazon Simple Storage Service (Amazon S3) でホストされている CSV データセットの抽出、変換、ロードを行います。まず、パブリックな Amazon S3 バケットに保存されている New York City Taxi and Limousine Commission (TLC) の乗車記録データのデータセットから始めます。このデータセットの詳細については、「Registry of Open Data on AWS
Ray Data ライブラリで利用できる事前定義された変換を使用して、データを変換していきます。Ray Data は Ray が設計したデータセットの準備ライブラリで、Ray の環境用に AWS Glue にデフォルトで含まれています。デフォルトで含まれているライブラリの詳細については、「Ray ジョブで提供されるモジュール」を参照してください。次に、変換したデータを、自分が管理する Amazon S3 バケットに書き込みます。
前提条件 — このチュートリアルを行うには、AWS Glue と Amazon S3 へのアクセス権限を持つ AWS アカウントが必要です。
ステップ 1: Amazon S3 に出力データを保存するバケットを作成する
このチュートリアルで作成したデータのシンクとして機能する、ユーザーが管理する Amazon S3 バケットが必要です。このバケットは、以下の手順で作成します。
注記
自分で管理している既存のバケットにデータを書き込む場合は、このステップは飛ばしてかまいません。その場合は、既存のバケット名である yourBucketName
をメモしておきます。こちらは後のステップで使用します。
Ray ジョブの出力用バケットを作成するには
-
「Amazon S3 ユーザーガイド」の「バケットの作成」の手順に従ってバケットを作成します。
-
バケット名を選択ぶときは
yourBucketName
をメモしておきます。こちらは後のステップで使用します。 -
他の設定については、Amazon S3 コンソールに表示された推奨の設定を使えばチュートリアルを問題なく進められるはずです。
例えば、Amazon S3 コンソールのバケット作成のダイアログボックスは、次のように表示されます。
-
ステップ 2: Ray ジョブ用の IAM ロールを作成する
ジョブには、以下を持つ AWS Identity and Access Management (IAM) ロールが必要です。
-
AWSGlueServiceRole
マネージドポリシーが付与したアクセス権限。これらは、AWS Glue ジョブを実行するために必要な、基本的な権限です。 -
nyc-tlc/*
Amazon S3 リソースのRead
のアクセスレベル権限。 -
Amazon S3 リソースのyourBucketName
/*Write
のアクセスレベル権限。 -
glue.amazonaws.com
プリンシパルにロールの引き受けを許可する信頼関係。
このロールは、以下の手順で作成します。
AWS Glue for Ray ジョブ用に IAM ロールを作成するには
注記
IAM ロールは、さまざまな手順で作成できます。IAM リソースのプロビジョニング方法の詳細またはオプションについては、AWS Identity and Access Management のドキュメントを参照してください。
-
上記の Amazon S3 アクセス権限を定義するポリシーを、「IAM ユーザーガイド」の「ビジュアルエディタを使用してポリシーを作成するには」の手順に従って作成します。
-
サービスを選ぶときは、Amazon S3 を選択します。
-
ポリシーのアクセス権限を選ぶときは、以下のリソースの、以下に挙げるアクションのセットを添付します (上記のとおり)。
-
nyc-tlc/*
Amazon S3 リソースの Read のアクセスレベル権限。 -
Amazon S3 リソースの Write のアクセスレベル権限。yourBucketName
/*
-
-
ポリシー名を選ぶときは、
YourPolicyName
をメモしておきます。こちらは後のステップで使用します。
-
-
AWS Glue for Ray ジョブ用のロールを、「IAM ユーザーガイド」の「AWS サービスのロールを作成するには (コンソール)」の手順に従って作成します。
-
信頼された AWS サービスエンティティを選ぶときは、
Glue
を選択します。これにより、ジョブに必要な信頼関係が自動的に設定されます。 -
アクセス権限ポリシーのポリシーを選ぶときは、次のポリシーを添付します。
-
AWSGlueServiceRole
-
YourPolicyName
-
-
ロール名を選ぶときは、
YourRoleName
をメモしておきます。こちらは後のステップで使用します。
-
ステップ 3: AWS Glue for Ray ジョブを作成して実行する
このステップでは、AWS Management Console を使用して AWS Glue ジョブを作成し、これにサンプルスクリプトを提供して、ジョブを実行します。ジョブを作成すると、Ray スクリプトを保存、設定、編集するための場所がコンソールに作成されます。ジョブの作成の詳細については、「AWS Glue コンソールにサインインする」をご参照ください。
このチュートリアルでは、次の ETL シナリオを取り上げます。New York City TLC の乗車記録データセットから 2022 年 1 月のレコードを読み取り、既存の列のデータを組み合わせてデータセットに新しい列 (tip_rate
) を追加し、現在の分析に無関係のいくつかの列を削除してから、結果を yourBucketName
に書き込みます。次の Ray スクリプトは、以下のステップを実行します。
import ray import pandas from ray import data ray.init('auto') ds = ray.data.read_csv("s3://nyc-tlc/opendata_repo/opendata_webconvert/yellow/yellow_tripdata_2022-01.csv") # Add the given new column to the dataset and show the sample record after adding a new column ds = ds.add_column( "tip_rate", lambda df: df["tip_amount"] / df["total_amount"]) # Dropping few columns from the underlying Dataset ds = ds.drop_columns(["payment_type", "fare_amount", "extra", "tolls_amount", "improvement_surcharge"]) ds.write_parquet("s3://
yourBucketName
/ray/tutorial/output/")
AWS Glue for Ray ジョブを作成して実行するには
-
AWS Management Console で、AWS Glue のランディングページに進みます。
-
ナビゲーションペインで、[ETL Jobs] を選択します。
-
[ジョブを作成する] で、[Ray script editor] を選択し、[作成] をクリックします。以下の図を参照してください。
-
スクリプトの全文を [スクリプト] ペインに貼り付け、既存のテキストがあれば置き換えます。
-
[ジョブの詳細] に進み、[IAM ロール] のプロパティを
YourRoleName
に設定します。 -
[保存] をクリックし、[実行] をクリックします。
ステップ 4: 出力を確認する
AWS Glue ジョブを実行したら、出力がこのシナリオの期待値と一致していることを確認する必要があります。確認は、次の手順で行います。
Ray ジョブが正常に実行されたことを確認するには
-
ジョブの詳細ページから [実行] に移動します。
-
数分後、実行の [実行ステータス] が [成功] と表示されるはずです。
-
Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) に移動し、 yourBucketName
をチェックします。出力バケットに書き込まれたファイルが表示されるはずです。 -
Parquet ファイルを読み、内容を確認します。これは既存のツールで実行できます。Parquet ファイルを確認するプロセスがない場合は、Spark または Ray を使用して、AWS Glue コンソールで AWS Glue インタラクティブセッションを実行します (現在プレビュー中)。
インタラクティブセッションでは、Ray Data、Spark、pandas のいずれかのライブラリにアクセスします。これは (選択したエンジンに応じて) デフォルトで指定されています。ファイルの内容の確認には、これらのライブラリで利用できる一般的な確認方法、例えば、
count
、schema
、show
などを使用できます。コンソールのインタラクティブセッションの詳細については、「AWS Glue Studio と AWS Glue を用いてノートブックの使用」を参照してください。ファイルがバケットに書き込まれていることを確認できたので、出力に問題があったとしても、それは IAM の設定とは無関係であると確実に言えます。
yourRoleName
を使用してセッションを設定するのは、関連するファイルにアクセスできるようにするためです。
期待した結果が得られない場合は、このガイドのトラブルシューティングのページを参照し、エラーの原因を特定して修正します。ジョブの実行エラー状態を解釈するには、「AWS Glue ジョブ実行ステータス」を参照してください。トラブルシューティングのページは「AWS Glue のトラブルシューティング」にあります。Ray ジョブに関連する特定のエラーについては、トラブルシューティング内の「ログから AWS Glue for Ray エラーをトラブルシューティングする」を参照してください。
次のステップ
これで、AWS Glue for Ray を使用した ETL のプロセスの全体を確認し、実行できました。次のリソースを使用すると、AWS Glue for Ray がデータを大規模に変換し解釈するためにどのようなツールを提供しているのかを理解できます。
-
Ray のタスクのモデルに関する詳細は、「AWS Glue for Ray での Ray Core と Ray Data の使用」を参照してください。Ray のタスクの使用に関する詳細は、Ray Core ドキュメントにある例を参照してください。Ray のドキュメントの「Ray Core: Ray Tutorials and Examples (2.4.0)
」を参照してください。 -
AWS Glue for Ray で利用可能なデータ管理ライブラリのガイダンスは、「Ray ジョブのデータに接続する」を参照してください。Ray Data を使用してデータセットを変換し記述する方法の詳細については、Ray Data ドキュメントにある例を参照してください。「Ray Data: Examples (2.4.0)
」を参照してください。 -
AWS Glue for Ray ジョブの設定に関する詳細は、「AWS Glue での Ray ジョブの使用」を参照してください。
-
AWS Glue for Ray のスクリプトの記述に関する詳細は、本セクション内のドキュメントを引き続きお読みください。