

# Ray スクリプトのプログラミング
<a name="aws-glue-programming-ray"></a>

**重要**  
AWS Glue for Ray は、2026 年 4 月 30 日以降、新規のお客様の受付を終了します。AWS Glue for Ray を使用する場合は、上記日付よりも前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。AWS Glue for Ray と同様の機能については、Amazon EKS をご覧ください。詳細については、「[AWS Glue for Ray のサポート終了](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)」を参照してください。

AWS Glue を使用すると、Ray スクリプトの記述と実行が簡単になります。このセクションでは、AWS Glue for Ray でサポートされている Ray の機能について説明します。Ray スクリプトは、Python でプログラムします。

カスタムスクリプトは、ジョブ定義内の `Runtime` フィールドで定義されている Ray のバージョンと互換性がある必要があります。Jobs API の `Runtime` の詳細については、「[ジョブ](aws-glue-api-jobs-job.md)」を参照してください。各ランタイム環境の詳細については、「[サポートされている Ray のランタイム環境](ray-jobs-section.md#author-job-ray-runtimes)」を参照してください。

**Topics**
+ [チュートリアル: AWS Glue for Ray で ETL スクリプトを記述する](edit-script-ray-intro-tutorial.md)
+ [AWS Glue for Ray での Ray Core と Ray Data の使用](edit-script-ray-scripting.md)
+ [ファイルと Python ライブラリを Ray ジョブに提供する](edit-script-ray-env-dependencies.md)
+ [Ray ジョブのデータに接続する](edit-script-ray-connections-formats.md)

# チュートリアル: AWS Glue for Ray で ETL スクリプトを記述する
<a name="edit-script-ray-intro-tutorial"></a>

**重要**  
AWS Glue for Ray は、2026 年 4 月 30 日以降、新規のお客様の受付を終了します。AWS Glue for Ray を使用する場合は、上記日付よりも前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。AWS Glue for Ray と同様の機能については、Amazon EKS をご覧ください。詳細については、「[AWS Glue for Ray のサポート終了](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)」を参照してください。

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-programming-intro-tutorial.md)」を参照してください。利用可能なエンジンの詳細については、「[AWS Glue for Spark と AWS Glue for Ray](how-it-works-engines.md)」を参照してください。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](https://registry.opendata.aws/nyc-tlc-trip-records-pds/)」を参照してください。

Ray Data ライブラリで利用できる事前定義された変換を使用して、データを変換していきます。Ray Data は Ray が設計したデータセットの準備ライブラリで、Ray の環境用に AWS Glue にデフォルトで含まれています。デフォルトで含まれているライブラリの詳細については、「[Ray ジョブで提供されるモジュール](edit-script-ray-env-dependencies.md#edit-script-ray-modules-provided)」を参照してください。次に、変換したデータを、自分が管理する Amazon S3 バケットに書き込みます。

**前提条件** — このチュートリアルを行うには、AWS Glue と Amazon S3 へのアクセス権限を持つ AWS アカウントが必要です。

## ステップ 1: Amazon S3 に出力データを保存するバケットを作成する
<a name="edit-script-ray-intro-tutorial-s3"></a>

このチュートリアルで作成したデータのシンクとして機能する、ユーザーが管理する Amazon S3 バケットが必要です。このバケットは、以下の手順で作成します。

**注記**  
自分で管理している既存のバケットにデータを書き込む場合は、このステップは飛ばしてかまいません。その場合は、既存のバケット名である *yourBucketName* をメモしておきます。こちらは後のステップで使用します。

**Ray ジョブの出力用バケットを作成するには**
+ 「Amazon S3 ユーザーガイド」の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」の手順に従ってバケットを作成します。
  + バケット名を選択ぶときは *yourBucketName* をメモしておきます。こちらは後のステップで使用します。
  + 他の設定については、Amazon S3 コンソールに表示された推奨の設定を使えばチュートリアルを問題なく進められるはずです。

  例えば、Amazon S3 コンソールのバケット作成のダイアログボックスは、次のように表示されます。  
![\[新しいバケットを設定する際に使用する Amazon S3 コンソールのダイアログボックス。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/ray-tutorial-create-bucket.jpg)

## ステップ 2: Ray ジョブ用の IAM ロールを作成する
<a name="edit-script-ray-intro-tutorial-iam"></a>

ジョブには、以下を持つ AWS Identity and Access Management (IAM) ロールが必要です。
+ `AWSGlueServiceRole` マネージドポリシーが付与したアクセス権限。これらは、AWS Glue ジョブを実行するために必要な、基本的な権限です。
+ `nyc-tlc/*` Amazon S3 リソースの `Read` のアクセスレベル権限。
+ `yourBucketName/*` Amazon S3 リソースの `Write` のアクセスレベル権限。
+ `glue.amazonaws.com` プリンシパルにロールの引き受けを許可する信頼関係。

このロールは、以下の手順で作成します。

**AWS Glue for Ray ジョブ用に IAM ロールを作成するには**
**注記**  
IAM ロールは、さまざまな手順で作成できます。IAM リソースのプロビジョニング方法の詳細またはオプションについては、[AWS Identity and Access Management のドキュメント](https://docs.aws.amazon.com/iam/index.html)を参照してください。

1. 上記の Amazon S3 アクセス権限を定義するポリシーを、「IAM ユーザーガイド」の「[ビジュアルエディタを使用してポリシーを作成するには](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-visual-editor)」の手順に従って作成します。
   + サービスを選ぶときは、Amazon S3 を選択します。
   + ポリシーのアクセス権限を選ぶときは、以下のリソースの、以下に挙げるアクションのセットを添付します (上記のとおり)。
     + `nyc-tlc/*` Amazon S3 リソースの Read のアクセスレベル権限。
     + `yourBucketName/*` Amazon S3 リソースの Write のアクセスレベル権限。
   + ポリシー名を選ぶときは、*YourPolicyName* をメモしておきます。こちらは後のステップで使用します。

1. AWS Glue for Ray ジョブ用のロールを、「IAM ユーザーガイド」の「[AWS サービスのロールを作成するには (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)」の手順に従って作成します。
   + 信頼された AWS サービスエンティティを選ぶときは、`Glue` を選択します。これにより、ジョブに必要な信頼関係が自動的に設定されます。
   + アクセス権限ポリシーのポリシーを選ぶときは、次のポリシーを添付します。
     + `AWSGlueServiceRole`
     + *YourPolicyName*
   + ロール名を選ぶときは、*YourRoleName* をメモしておきます。こちらは後のステップで使用します。

## ステップ 3: AWS Glue for Ray ジョブを作成して実行する
<a name="edit-script-ray-intro-tutorial-author-job"></a>

このステップでは、AWS マネジメントコンソール を使用して AWS Glue ジョブを作成し、これにサンプルスクリプトを提供して、ジョブを実行します。ジョブを作成すると、Ray スクリプトを保存、設定、編集するための場所がコンソールに作成されます。ジョブの作成の詳細については、「[AWS コンソールでの AWS Glue ジョブの管理](author-job-glue.md#console-jobs)」をご参照ください。

このチュートリアルでは、次の 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 ジョブを作成して実行するには**

1. AWS マネジメントコンソール で、AWS Glue のランディングページに進みます。

1. ナビゲーションペインで、**[ETL Jobs]** を選択します。

1. **[ジョブを作成する]** で、**[Ray script editor]** を選択し、**[作成]** をクリックします。以下の図を参照してください。  
![\[Ray ジョブの作成に使用する AWS Glue コンソールのダイアログボックス。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/edit-script-ray-create.png)

1. スクリプトの全文を **[スクリプト]** ペインに貼り付け、既存のテキストがあれば置き換えます。

1. **[ジョブの詳細]** に進み、**[IAM ロール]** のプロパティを *YourRoleName* に設定します。

1. **[保存]** をクリックし、**[実行]** をクリックします。

## ステップ 4: 出力を確認する
<a name="edit-script-ray-intro-tutorial-inspect"></a>

AWS Glue ジョブを実行したら、出力がこのシナリオの期待値と一致していることを確認する必要があります。確認は、次の手順で行います。

**Ray ジョブが正常に実行されたことを確認するには**

1. ジョブの詳細ページから **[実行]** に移動します。

1. 数分後、実行の **[実行ステータス]** が **[成功]** と表示されるはずです。

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) に移動し、*yourBucketName* をチェックします。出力バケットに書き込まれたファイルが表示されるはずです。

1. Parquet ファイルを読み、内容を確認します。これは既存のツールで実行できます。Parquet ファイルを確認するプロセスがない場合は、Spark または Ray を使用して、AWS Glue コンソールで AWS Glue インタラクティブセッションを実行します (現在プレビュー中)。

   インタラクティブセッションでは、Ray Data、Spark、pandas のいずれかのライブラリにアクセスします。これは (選択したエンジンに応じて) デフォルトで指定されています。ファイルの内容の確認には、これらのライブラリで利用できる一般的な確認方法、例えば、`count`、`schema`、`show` などを使用できます。コンソールのインタラクティブセッションの詳細については、「[AWS Glue Studio と AWS Glue を用いてノートブックの使用](https://docs.aws.amazon.com/glue/latest/ug/notebooks-chapter.html)」を参照してください。

   ファイルがバケットに書き込まれていることを確認できたので、出力に問題があったとしても、それは IAM の設定とは無関係であると確実に言えます。*yourRoleName* を使用してセッションを設定するのは、関連するファイルにアクセスできるようにするためです。

期待した結果が得られない場合は、このガイドのトラブルシューティングのページを参照し、エラーの原因を特定して修正します。トラブルシューティングのページは「[AWS Glue のトラブルシューティング](troubleshooting-glue.md)」にあります。Ray ジョブに関連する特定のエラーについては、トラブルシューティング内の「[ログから AWS Glue for Ray エラーをトラブルシューティングする](troubleshooting-ray.md)」を参照してください。

## 次のステップ
<a name="edit-script-ray-intro-tutorial-next"></a>

 これで、AWS Glue for Ray を使用した ETL のプロセスの全体を確認し、実行できました。次のリソースを使用すると、AWS Glue for Ray がデータを大規模に変換し解釈するためにどのようなツールを提供しているのかを理解できます。
+  Ray のタスクのモデルに関する詳細は、「[AWS Glue for Ray での Ray Core と Ray Data の使用](edit-script-ray-scripting.md)」を参照してください。Ray のタスクの使用に関する詳細は、Ray Core ドキュメントにある例を参照してください。Ray のドキュメントの「[Ray Core: Ray Tutorials and Examples (2.4.0)](https://docs.ray.io/en/releases-2.4.0/ray-core/examples/overview.html)」を参照してください。
+  AWS Glue for Ray で利用可能なデータ管理ライブラリのガイダンスは、「[Ray ジョブのデータに接続する](edit-script-ray-connections-formats.md)」を参照してください。Ray Data を使用してデータセットを変換し記述する方法の詳細については、Ray Data ドキュメントにある例を参照してください。「[Ray Data: Examples (2.4.0)](https://docs.ray.io/en/releases-2.4.0/data/examples/index.html)」を参照してください。
+ AWS Glue for Ray ジョブの設定に関する詳細は、「[AWS Glue での Ray ジョブの使用](ray-jobs-section.md)」を参照してください。
+ AWS Glue for Ray のスクリプトの記述に関する詳細は、本セクション内のドキュメントを引き続きお読みください。

# AWS Glue for Ray での Ray Core と Ray Data の使用
<a name="edit-script-ray-scripting"></a>

**重要**  
AWS Glue for Ray は、2026 年 4 月 30 日以降、新規のお客様の受付を終了します。AWS Glue for Ray を使用する場合は、上記日付よりも前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。AWS Glue for Ray と同様の機能については、Amazon EKS をご覧ください。詳細については、「[AWS Glue for Ray のサポート終了](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)」を参照してください。

Ray は、クラスター全体に作業を分散することで Python スクリプトをスケールアップするためのフレームワークです。Ray はさまざまな問題の解決策として利用できます。つまり、特定のタスクを最適化するためのライブラリを提供しています。AWS Glue では、Ray を使用して大規模なデータセットを変換することに重点を置いています。AWS Glue は Ray Core の一部と Ray Data をサポートしているため、このタスクが容易になります。

## Ray Core とは
<a name="edit-script-ray-scripting-core-what"></a>

分散アプリケーションを構築する最初のステップは、同時に実行できる作業を特定して定義することです。Ray Core には、同時に実行できるタスクを定義するために使用する Ray の機能が一部含まれています。Ray では、提供されるツールを学習するのに役立つリファレンスおよびクイックスタート情報を入手できます。詳細については、「[What is Ray Core?](https://docs.ray.io/en/latest/ray-core/walkthrough.html)」と「[Ray Core Quick Start](https://docs.ray.io/en/latest/ray-overview/getting-started.html#ray-core-quick-start)」を参照してください。Ray で同時タスクを効果的に定義する方法の詳細については、「[Tips for first-time users](https://docs.ray.io/en/latest/ray-core/tips-for-first-time.html)」を参照してください。

**Ray のタスクとアクター**  
AWS Glue for Ray ドキュメントでは、Ray の中核的な概念であるタスクとアクターについて言及することがあります。  
Ray では、分散コンピューティングシステムの構成要素として Python の関数とクラスを使用します。Python の関数や変数をクラスで使用すると「メソッド」や「属性」になるのと同様に、ワーカーにコードを送信するために Ray で使用すると、関数は「タスク」になり、クラスは「アクター」になります。Ray で使用される可能性のある関数やクラスは、`@ray.remote` アノテーションで識別できます。  
タスクとアクターは設定可能で、ライフサイクルがあり、そのライフサイクルを通じてコンピューティングリソースを消費します。エラーをスローするコードは、問題の根本原因を見つける場合に、タスクまたはアクターまでさかのぼることができます。したがって、AWS Glue for Ray ジョブの設定、モニタリング、デバッグの方法を学習するときに、これらの用語が出現する可能性があります。  
タスクとアクターを効果的に使用して分散アプリケーションを構築する方法を学習するには、Ray のドキュメントの「[Key Concepts](https://docs.ray.io/en/latest/ray-core/key-concepts.html)」を参照してください。

## AWS Glue for Ray での Ray Core
<a name="edit-script-ray-scripting-core-glue"></a>

AWS Glue for Ray 環境では、ログの収集と視覚化だけでなく、クラスターの形成とスケーリングも管理します。こうした懸念事項を管理しているため、当社は、オープンソースのクラスターでこれらの対処に使用される、Ray Core の API へのアクセスとサポートを制限しています。

マネージド `Ray2.4` ランタイム環境では、以下はサポートされていません。
+ [Ray Core CLI](https://docs.ray.io/en/releases-2.4.0/ray-core/api/cli.html)
+ [Ray State CLI](https://docs.ray.io/en/releases-2.4.0/ray-observability/api/state/cli.html)
+ `ray.util.metrics` Prometheus メトリクスユーティリティメソッド:
  + [Counter](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.metrics.Counter.html)
  + [Gauge](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.metrics.Gauge.html)
  + [Histogram](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.metrics.Histogram.html)
+ その他のデバッグツール
  + [ray.util.pdb.set\$1trace](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.pdb.set_trace.html)
  + [ray.util.inspect\$1serializability](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.inspect_serializability.html)
  + [ray.timeline](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.timeline.html)

## Ray Data とは
<a name="edit-script-ray-scripting-data-what"></a>

データソースや送信先に接続する場合、データセットを処理する場合、一般的な変換を開始する場合などに Ray Data を使用すれば、Ray データセットの変換に関する問題を Ray で簡単に解決できます。Ray Data の使用方法の詳細については、「[Ray Datasets: Distributed Data Preprocessing](https://docs.ray.io/en/releases-2.4.0/data/dataset.html)」を参照してください。

Ray Data やその他のツールを使用すると、データにアクセスできます。Ray 内におけるデータへのアクセスの詳細については、「[Ray ジョブのデータに接続する](edit-script-ray-connections-formats.md)」を参照してください。

## AWS Glue for Ray での Ray Data
<a name="edit-script-ray-scripting-data-glue"></a>

Ray Data では、マネージド `Ray2.4` ランタイム環境がデフォルトでサポートおよび提供されています。提供されるモジュールの詳細については、「[Ray ジョブで提供されるモジュール](edit-script-ray-env-dependencies.md#edit-script-ray-modules-provided)」を参照してください。

# ファイルと Python ライブラリを Ray ジョブに提供する
<a name="edit-script-ray-env-dependencies"></a>

**重要**  
AWS Glue for Ray は、2026 年 4 月 30 日以降、新規のお客様の受付を終了します。AWS Glue for Ray を使用する場合は、上記日付よりも前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。AWS Glue for Ray と同様の機能については、Amazon EKS をご覧ください。詳細については、「[AWS Glue for Ray のサポート終了](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)」を参照してください。

このセクションでは、AWS Glue の Ray ジョブで Python ライブラリを使用するために必要な情報を提供します。すべての Ray ジョブにデフォルトで含まれている、特定の共通ライブラリを使用できます。また、Ray ジョブに独自の Python ライブラリを指定することもできます。

## Ray ジョブで提供されるモジュール
<a name="edit-script-ray-modules-provided"></a>

次のパッケージを使用して、Ray ジョブでデータ統合ワークフローを実行できます。これらのパッケージは Ray ジョブで、デフォルトで使用できます。

------
#### [ AWS Glue version 4.0 ]

AWS Glue 4.0 では、Ray (`Ray2.4` ランタイム) 環境で次のパッケージが利用可能です。
+ boto3 == 1.26.133
+ ray == 2.4.0
+ pyarrow == 11.0.0
+ pandas == 1.5.3
+ numpy == 1.24.3
+ fsspec == 2023.4.0

このリストには、`ray[data] == 2.4.0` でインストールされるすべてのパッケージが含まれます。Ray データは追加設定なしにサポートされます。

------

## Ray ジョブへのファイルの提供
<a name="edit-script-ray-working-directory"></a>

`--working-dir` パラメータを使用して Ray ジョブにファイルを提供できます。このパラメータには、Amazon S3 でホストされている .zip ファイルへのパスを指定します。.zip ファイル内では、ファイルは最上位の 1 つのディレクトリに含まれている必要があります。最上位には、他のファイルがないようにします。

ファイルは、スクリプトの実行を開始する前に各 Ray ノードに配布されます。それにより、各 Ray ノードが利用できるディスク容量にどのような影響が出るかを考えます。使用できるディスク容量は、ジョブ構成で設定された WorkerType により決まります。ジョブに大量のデータを提供したい場合、このメカニズムは適切なソリューションではありません。データをジョブに提供する方法の詳細については、「[Ray ジョブのデータに接続する](edit-script-ray-connections-formats.md)」を参照してください。

あたかもディレクトリが `working_dir` パラメータで Ray に提供されたかのように、ファイルにアクセスできるようになります。例えば、.zip ファイルの最上位ディレクトリにある `sample.txt` という名前のファイルを読み取るには、次のように呼び出すことができます。

```
@ray.remote
def do_work():
    f = open("sample.txt", "r")
    print(f.read())
```

`working_dir` の詳細については、[Ray のドキュメント](https://docs.ray.io/en/latest/ray-core/handling-dependencies.html#remote-uris)を参照してください。この機能は、Ray のネイティブの機能と同じように動作します。

## Ray ジョブ用の Python モジュールを追加する
<a name="edit-script-ray-python-libraries-additional"></a>

**PyPI の追加モジュール**

Ray ジョブでは、Python Package Installer (pip3) を使用して、Ray スクリプトで使用するモジュールを追加でインストールします。`--pip-install` パラメータでコンマ区切りの Python モジュールのリストを指定することで、新しいモジュールを追加したり、既存のモジュールのバージョンを変更したりできます。

例えば、更新や新しい `scikit-learn` モジュールの追加には、次のキー値ペアを使用します。

`"--pip-install", "scikit-learn==0.21.3"`

カスタムモジュールまたはカスタムパッチがある場合は、`--s3-py-modules` パラメータを使用して Amazon S3 から自分のライブラリをディストリビューションできます。ディストリビューションは、アップロード前に再パッケージ化と構築が必要になる場合があります。[Ray ジョブに Python コードを含める](#edit-script-ray-packaging) のガイドラインに従います。

**Amazon S3 のカスタムディストリビューション**

カスタムディストリビューションは、依存関係に関する Ray パッケージのガイドラインに従う必要があります。これらのディストリビューションの構築方法については、次のセクションをご覧ください。Ray での依存関係の設定方法に関する詳細は、Ray のドキュメントの「[Environment Dependencies](https://docs.ray.io/en/latest/ray-core/handling-dependencies.html)」(環境の依存関係) を参照してください。

コンテンツを評価した後にカスタムディストリビューションを含めるには、ジョブの IAM ロールで利用できるバケットにディストリビューションをアップロードします。パラメータの設定で、Python zip アーカイブへの Amazon S3 パスを指定します。複数のディストリビューションを指定する場合は、カンマで区切ります。例えば、次のようになります。

`"--s3-py-modules", "s3://s3bucket/pythonPackage.zip"` 

**制限事項**

Ray ジョブは、ジョブ環境でのネイティブコードのコンパイルをサポートしていません。Python の依存関係がネイティブのコンパイル済みコードに推移的に依存している場合、これにより制限される可能性があります。Ray ジョブは提供されたバイナリを実行できますが、Linux on ARM64 用にコンパイルする必要があります。つまり、`aarch64``manylinux` wheel の内容を使用できる場合があるということです。Ray の基準に合わせて wheel を再パッケージ化することで、ネイティブの依存関係をコンパイルされた形式で提供できます。通常、これは `dist-info` フォルダを削除して、アーカイブのルートにあるフォルダが 1 つだけになるようにすることを意味します。

このパラメータを使用して `ray` または `ray[data]` のバージョンをアップグレードすることはできません。Ray の新しいバージョンを使用するには、ジョブのランタイムフィールドを、そのサポートをリリースした後に変更する必要があります。サポートされている Ray バージョンの詳細については、「[AWS Glue バージョン](release-notes.md#release-notes-versions)」を参照してください。

## Ray ジョブに Python コードを含める
<a name="edit-script-ray-packaging"></a>

Python Software Foundation は、さまざまなランタイムで使用できるよう、Python ファイルをパッケージ化するための標準化された機能を提供しています。Ray では、注意すべきパッケージ基準に制限が設けられています。AWS Glue が、Ray に指定された以外のパッケージ基準を指定することはありません。次の手順では、シンプルな Python パッケージのパッケージ化に関する標準的なガイダンスを提供します。

ファイルを `.zip` アーカイブにパッケージ化します。1 つのディレクトリがアーカイブのルートにある必要があります。**アーカイブのルートレベルにその他のファイルがあると、予期しない動作が発生する可能性があります。**ルートディレクトリはパッケージで、インポート時に Python コードを参照するためにその名前が使用されます。

`--s3-py-modules` を使用してこの形式のディストリビューションを Ray ジョブに提供すると、Ray スクリプト内のパッケージから Python コードをインポートできます。

パッケージは、単一の Python モジュールにいくつかの Python ファイルを提供することも、多数のモジュールを一緒にパッケージ化することもできます。PyPI のライブラリなどの依存関係を再パッケージ化するときは、それらのパッケージ内の**隠しファイルやメタデータディレクトリを確認してください**。

**警告**  
 OS の動作によっては、これらのパッケージ化手順に正しく従うことが難しくなります。  
OSX では、`__MACOSX` などの隠しファイルが zip ファイルの最上位に追加されることがあります。
Windows では、ファイルが zip 内のフォルダに自動的に追加され、意図せずにネストされたフォルダが作成されることがあります。

以下の手順は、Info-Zip `zip` および `zipinfo` ユーティリティのディストリビューションを提供する Amazon Linux 2 または類似の OS でファイルを操作していることを前提としています 予期しない動作を防ぐため、これらのツールを使用することをお勧めします。

Ray で使用する Python ファイルをパッケージ化するには

1. パッケージ名で一時ディレクトリを作成し、作業ディレクトリが親ディレクトリであることを確認します。これを行うには、次のコマンドを使用します。

   ```
   cd parent_directory
   mkdir temp_dir
   ```

1. ファイルを一時ディレクトリにコピーし、ディレクトリ構造を確認します。このディレクトリの内容は、Python モジュールとして直接アクセスされます。これを行うには、次の コマンドを使用します。

   ```
   ls -AR temp_dir
   # my_file_1.py
   # my_file_2.py
   ```

1. zip を使用して一時フォルダを圧縮します。これを行うには、次のコマンドを使用します。

   ```
   zip -r zip_file.zip temp_dir
   ```

1. ファイルが適切にパッケージ化されていることを確認します。`zip_file.zip` は作業ディレクトリにあるはずです。次のコマンドで検査できます。

   ```
   zipinfo -1 zip_file.zip
   # temp_dir/
   # temp_dir/my_file_1.py
   # temp_dir/my_file_2.py
   ```

Python パッケージを Ray で使用できるように再パッケージ化するには。

1. パッケージ名で一時ディレクトリを作成し、作業ディレクトリが親ディレクトリであることを確認します。これを行うには、次のコマンドを使用します。

   ```
   cd parent_directory
   mkdir temp_dir
   ```

1. パッケージを解凍し、その内容を一時ディレクトリにコピーします。以前のパッケージング標準に関連するファイルを削除し、モジュールの内容のみを残します。以下のコマンドを実行して、ファイル構造が正しいことを確認します。

   ```
   ls -AR temp_dir
   # my_module
   # my_module/__init__.py
   # my_module/my_file_1.py
   # my_module/my_submodule/__init__.py
   # my_module/my_submodule/my_file_2.py
   # my_module/my_submodule/my_file_3.py
   ```

1. zip を使用して一時フォルダを圧縮します。これを行うには、次のコマンドを使用します。

   ```
   zip -r zip_file.zip temp_dir
   ```

1. ファイルが適切にパッケージ化されていることを確認します。`zip_file.zip` は作業ディレクトリにあるはずです。次のコマンドで検査できます。

   ```
   zipinfo -1 zip_file.zip
   # temp_dir/my_module/
   # temp_dir/my_module/__init__.py
   # temp_dir/my_module/my_file_1.py
   # temp_dir/my_module/my_submodule/
   # temp_dir/my_module/my_submodule/__init__.py
   # temp_dir/my_module/my_submodule/my_file_2.py
   # temp_dir/my_module/my_submodule/my_file_3.py
   ```

# Ray ジョブのデータに接続する
<a name="edit-script-ray-connections-formats"></a>

**重要**  
AWS Glue for Ray は、2026 年 4 月 30 日以降、新規のお客様の受付を終了します。AWS Glue for Ray を使用する場合は、上記日付よりも前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。AWS Glue for Ray と同様の機能については、Amazon EKS をご覧ください。詳細については、「[AWS Glue for Ray のサポート終了](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)」を参照してください。

AWS Glue Ray ジョブでは、データをすばやく統合するために設計されたさまざまな Python パッケージを使用できます。環境が混乱した状態にならないよう、最低限の依存関係のみが提供されています。デフォルトで含まれる内容の詳細については、「[Ray ジョブで提供されるモジュール](edit-script-ray-env-dependencies.md#edit-script-ray-modules-provided)」を参照してください。

**注記**  
AWS Glue 抽出、変換、ロード (ETL) は、DynamicFrame の抽象化を提供し、データセット内の行間におけるスキーマの違いを解決する ETL ワークフローを効率化します。AWS GlueETL には、ジョブのブックマークや入力ファイルのグループ化など、追加機能があります。Ray ジョブには現在、対応する機能は提供されていません。  
AWS Glue for Spark では、特定のデータ形式、ソース、シンクへの接続を直接サポートしています。Ray では、AWS SDK for pandas と現在のサードパーティーライブラリがそれらのニーズを実質的にカバーしています。どのような機能を利用できるか理解するには、これらのライブラリを調べる必要があります。

AWS Glue for Ray の Amazon VPC との統合は、現在ご利用いただけません。Amazon VPC 内のリソースには、パブリックルートがないとアクセスできません。Amazon VPC での AWS Glue の使用に関する詳細は、「[AWS Glue (AWS PrivateLink) のインターフェイス VPC エンドポイントの設定 (AWS PrivateLink)](vpc-interface-endpoints.md)」を参照してください。

## Ray でデータを使用するための共通ライブラリ
<a name="edit-script-ray-etl-libraries"></a>

**Ray Data** — Ray Data は、一般的なデータ形式、ソース、シンクを処理する方法を提供します。Ray Data でサポートされている形式とソースの詳細については、Ray Data のドキュメントの「[Input/Output](https://docs.ray.io/en/latest/data/api/input_output.html)」を参照してください。Ray Data は、データセットを扱うための汎用のライブラリではなく特化型のライブラリです。

Ray では、Ray Data がユーザーの作業に最適なソリューションとなるユースケースについて、特定のガイダンスを提供します。詳細については、Ray のドキュメントの「[Ray の使用例](https://docs.ray.io/en/latest/ray-overview/use-cases.html)」を参照してください。

**AWS SDK for pandas (awswrangler)** – AWS SDK for pandas は、pandas の DataFrames を使用して、変換によりデータを管理する際に、AWS サービスでの読み取りと書き込みを行うためのクリーンなテスト済みのソリューションを提供する AWS の製品です。AWS SDK for pandas でサポートされている形式とソースの詳細については、AWS SDK for pandas のドキュメントの「[API Reference](https://aws-sdk-pandas.readthedocs.io/en/stable/api.html)」を参照してください。

AWS SDK for pandas を使用してデータを読み書きする方法の例については、AWS SDK for pandas のドキュメントの「[Quick Start](https://aws-sdk-pandas.readthedocs.io/en/stable/)」を参照してください。AWS SDK for pandas では、データの変換は行いません。ソースからの読み取りと書き込みのみサポートしています。

**Modin** — Modin は、一般的な pandas のオペレーションを配布可能な方法で実装している Python ライブラリです。Modin の詳細については、[Modin のドキュメント](https://modin.readthedocs.io/en/stable/)を参照してください。Modin 自体は、ソースからの読み取りと書き込みをサポートしていません。一般的な変換の分散実装を行います。Modin は AWS SDK for pandas でサポートされています。

Modin を実行し、AWS SDK for pandas と共に Ray 環境で使用すると、高いパフォーマンスで一般的な ETL タスクを実行できます。Modin を AWS SDK for pandas と併用する方法の詳細については、AWS SDK for pandas のドキュメントの「[At scale](https://aws-sdk-pandas.readthedocs.io/en/stable/scale.html)」を参照してください。

**その他のフレームワーク** — Ray がサポートしているフレームワークの詳細については、Ray のドキュメントの「[Ray エコシステム](https://docs.ray.io/en/latest/ray-overview/ray-libraries.html)」を参照してください。AWS Glue for Ray はその他のフレームワークをサポートしていません。

## データカタログを介したデータへの接続
<a name="edit-script-ray-gludc"></a>

Ray ジョブと組み合わせたデータカタログによるデータ管理は、AWS SDK for pandas でサポートされています。詳細については、AWS SDK for pandas ウェブサイトの「[Glue Catalog](https://aws-sdk-pandas.readthedocs.io/en/3.0.0rc2/tutorials/005%20-%20Glue%20Catalog.html)」(Glue カタログ) を参照してください。