AWS Glue for Ray のサポート終了 - AWS Glue

AWS Glue for Ray のサポート終了

重要

AWS Glue for Ray は、2026 年 4 月 30 日以降、新規のお客様の受付を終了します。AWS Glue for Ray を使用する場合は、上記日付よりも前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。AWS Glue for Ray と同様の機能については、Amazon EKS をご覧ください。詳細については、「AWS Glue for Ray のサポート終了」を参照してください。

慎重に検討いたしました結果、2026 年 4 月 30 日以降は AWS Glue for Ray の新規のお客様の受付を終了することになりました。AWS Glue for Ray を使用する場合は、上記日付よりも前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。

AWS は、AWS Glue for Ray のセキュリティと可用性の強化のために投資を継続しています。AWS Glue for Ray には今後、セキュリティと可用性の強化を目的とする機能以外の新機能は導入しません。

AWS Glue for Ray の代わりに、Amazon Elastic Kubernetes Service のご使用をお勧めします。Amazon Elastic Kubernetes Service はフルマネージドの認定 Kubernetes 準拠サービスで、AWS における Kubernetes クラスターの構築、保護、運用、保守の各プロセスを簡易化します。これは高度なカスタマイズが可能なオプションであり、オープンソースの KubeRay Operator に依存して Kubernetes で Ray クラスターのデプロイと管理を行い、リソース使用率の向上、インフラストラクチャ管理の簡素化、Ray 機能のフルサポートを提供します。

Ray ジョブから Amazon Elastic Kubernetes Service への移行

このセクションでは、AWS Glue for Ray から Ray on Amazon Elastic Kubernetes Service に移行する手順について説明します。これらのステップは次の 2 つの移行シナリオに役立ちます。

  • 標準移行 (x86/amd64): これらのユースケースの場合、移行戦略では基本的な実装に OpenSource Ray コンテナを使用し、ベースコンテナでスクリプトを直接実行します。

  • ARM64 移行: これらのユースケースの場合、移行戦略では ARM64-固有の依存関係とアーキテクチャ要件のカスタムコンテナビルドがサポートされます。

移行の前提条件

CLI ツール awskubectleksctlhelm、Python 3.9+ をインストールしいます。これらの CLI ツールは、EKS 環境での Ray のプロビジョニングと管理に必要です。eksctl は EKS クラスターの作成と管理を簡素化します。kubectl は、クラスター上でワークロードのデプロイとトラブルシューティングを行うための標準的な Kubernetes CLI です。helm は、KubeRay (Kubernetes で Ray を実行するオペレータ) のインストールと管理に使用します。Ray 自体と、ジョブ送信スクリプトのローカル実行には、Python 3.9 以降が必要です。

eksctl をインストールする

Eksctl のインストールオプション」の指示または次の手順に従ってインストールを行います。

macOS の場合:

brew tap weaveworks/tap brew install weaveworks/tap/eksctl

Linux の場合:

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp # Move the extracted binary to /usr/local/bin sudo mv /tmp/eksctl /usr/local/bin # Test the installation eksctl version

kubectl をインストールする

kubectl と eksctl のセットアップ」の指示または次の手順に従ってインストールを行います。

macOS の場合:

brew install kubectl

Linux の場合:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/

Helm のインストール

Helm のインストール」の指示または次の手順に従ってインストールを行います。

macOS の場合:

brew install helm

Linux の場合:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

ステップ 1. Ray 用の Docker イメージ の構築または選択

オプション 1: 公式の Ray イメージを使用する (ビルド不要)

このオプションでは Docker Hub の公式の Ray Docker イメージを使用します。例えば、rayproject/ray:2.4.0-py39 は Ray プロジェクトによって維持されます。

注記

このイメージは amd64 専用です。これは、依存関係に amd64 との互換性があり、ARM 固有のビルドを必要としない場合に使用します。

オプション 2: 独自の arm64 Ray 2.4.0 イメージを構築して公開する

このオプションは、AWS Glue for Ray の内部で使用されている Graviton (ARM) ノードと一致するものを使用する場合に便利です。AWS Glue for Ray と同じ依存関係バージョンに固定したカスタムイメージを作成することで、互換性の不一致を減らすことができます。

Dockerfile のローカル作成:

# Build an ARM64 image FROM --platform=linux/arm64 python:3.9-slim-bullseye # Handy tools: wget for KubeRay probes; CA certs; keep image small RUN apt-get update && apt-get install -y --no-install-recommends \ wget ca-certificates \ && rm -rf /var/lib/apt/lists/* # Keep pip/setuptools modern enough for wheels resolution RUN python -m pip install -U "pip<24" "setuptools<70" wheel # ---- Install Ray 2.4.0 (ARM64 / Py3.9) and Glue-like dependencies ---- # 1) Download the exact Ray 2.4.0 wheel for aarch64 (no network at runtime) RUN python -m pip download --only-binary=:all: --no-deps --dest /tmp/wheels ray==2.4.0 # 2) Core libs used in Glue (pin to Glue-era versions) # + the dashboard & jobs API dependencies compatible with Ray 2.4.0. # (Pins matter: newer major versions break 2.4.0's dashboard.) RUN python -m pip install --no-cache-dir \ /tmp/wheels/ray-2.4.0-*.whl \ "pyarrow==11.0.0" \ "pandas==1.5.3" \ "boto3==1.26.133" \ "botocore==1.29.133" \ "numpy==1.24.3" \ "fsspec==2023.4.0" \ "protobuf<4" \ # --- dashboard / jobs server deps --- "aiohttp==3.8.5" \ "aiohttp-cors==0.7.0" \ "yarl<1.10" "multidict<7.0" "frozenlist<1.4" "aiosignal<1.4" "async_timeout<5" \ "pydantic<2" \ "opencensus<0.12" \ "prometheus_client<0.17" \ # --- needed if using py_modules --- "smart_open[s3]==6.4.0" # Optional: prove Ray & arch at container start ENV PYTHONUNBUFFERED=1 WORKDIR /app # KubeRay overrides the start command; this is just a harmless default CMD ["python","-c","import ray,platform; print('Ray', ray.__version__, 'on', platform.machine())"]
# Set environment variables export AWS_REGION=us-east-1 export AWS_ACCOUNT=$(aws sts get-caller-identity --query Account --output text) export REPO=ray-2-4-arm64 export IMAGE=${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/${REPO}:v1 # Create repository and login aws ecr create-repository --repository-name $REPO >/dev/null 2>&1 || true aws ecr get-login-password --region $AWS_REGION \ | docker login --username AWS --password-stdin ${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com # Enable Buildx (for cross-builds on non-ARM hosts) docker buildx create --name multi --driver docker-container --use 2>/dev/null || true # Build & push ARM64 image docker buildx build \ --platform linux/arm64 \ -t "$IMAGE" \ . --push # Verify the image architecture remotely aws ecr batch-get-image \ --repository-name $REPO \ --image-ids imageTag=v1 \ --accepted-media-types application/vnd.docker.distribution.manifest.v2+json \ | jq -r '.images[0].imageManifest' \ | jq -r 'fromjson.config.digest'

完了したら、nodeSelector: { kubernetes.io/arch: arm64 } を使用して RayCluster 仕様のこの ARM64 イメージを参照します。

spec: rayVersion: "2.4.0" headGroupSpec: template: spec: containers: - name: ray-head image: <your ECR image>

ステップ 2. AWS Glue for Ray ジョブ設定の Ray on Amazon Elastic Kubernetes Service への変換

AWS Glue for Ray ジョブは、ワーカー、依存関係、メモリ、ログ記録を設定する一連のジョブ引数をサポートします。KubeRay を使用して Amazon Elastic Kubernetes Service に移行する場合、これらの引数は RayCluster 仕様フィールドまたは Ray Job ランタイム環境設定に変換する必要があります。

ジョブ引数マッピング

AWS Glue for Ray 引数 の Ray on EKS 相当 へのマッピング
AWS Glue for Ray 引数 AWS Glue for Ray での動作 Ray on Amazon Elastic Kubernetes Service 相当
--min-workers 対象ジョブに割り当てる必要がある最小ワーカー数。 RayCluster の workerGroupSpecs[].minReplicas
--working-dir zip (S3 URI) をすべてのノードに分散させる。 ローカルファイルから送信する場合に Ray ランタイム環境 working_dir を使用する。S3 zip の py_modules は S3 アーティファクトを指すために使用する。
--s3-py-modules S3 から Python wheel/dists を追加する。 Ray ランタイム環境 py_modules: ["s3://.../xxx.whl", ...] を使用する
--pip-install ジョブのために追加の PyPI パッケージをインストールする。 Ray ランタイム環境: pip: ["pkg==ver", ...] (Ray Job CLI --runtime-env-jsonまたは RayJob runtimeEnvYAML)
--object_store_memory_head ヘッドノードの Plasma ストア用のメモリ (%)。 RayCluster の headGroupSpec[].rayStartParams.object-store-memory。単位のバイトに注意。AWS Glue ではパーセンテージを、Ray ではバイトを使用する。
--object_store_memory_worker ワーカーノードの Plasma ストア用のメモリ (%)。 上記と同様。ただし、各ワーカーグループの rayStartParams.object-store-memory (バイト) で設定する。
--object_spilling_config Ray オブジェクトのスピルを設定する。 headGroupSpec[].rayStartParams.object-spilling-config
--logging_configuration AWS Glue マネージドログ (CloudWatch、S3)。 ポッド stdout/stderr を確認: kubectl -n ray logs <pod-name> --follow を使用する。Ray ダッシュボード (:8265 にポート転送) のログを確認する。タスクログとジョブログの表示も可能。

ジョブ設定マッピング

AWS Glue for Ray ジョブ設定の Ray on EKS 相当へのマッピング
設定 AWS Glue for Ray での動作 Ray on EKS 相当
ワーカータイプ ジョブの実行時に割り当てられる事前定義済みワーカーの種類を設定する。デフォルトは Z 2X (8vCPU、64 GB RAM)。 EKS の Nodegroup インスタンスタイプ (例: ARM の場合は r7g.2xlarge ≈ 8 vCPU / 64 GB、x86 の場合は r7a.2xlarge)。
最大ワーカー数 AWS Glue でこのジョブに割り当てるワーカーの数。 AWS Glue で使用した数と同じ数を workerGroupSpecs[].maxReplicas に設定する。これはオートスケーリングの上限。同様に minReplicas を下限として設定する。replicas: 0, minReplicas: 0 から開始できる。

ステップ 3. Amazon Elastic Kubernetes Service のセットアップ

新しい Amazon Elastic Kubernetes Service クラスターを作成でき、既存の Amazon Elastic Kubernetes Service クラスターを再利用することもできます。既存のクラスターを使用する場合は、クラスター作成コマンドをスキップし、ノードグループの追加、IRSA、KubeRay のインストールにジャンプしてください。

Amazon Elastic Kubernetes Service クラスターの作成

注記

既存の Amazon Elastic Kubernetes Service クラスターがある場合は、コマンドをスキップして新しいクラスターを作成し、ノードグループを追加します。

# Environment Variables export AWS_REGION=us-east-1 export CLUSTER=ray-eks export NS=ray # namespace for your Ray jobs (you can reuse another if you like) # Create a cluster (OIDC is required for IRSA) eksctl create cluster \ --name $CLUSTER \ --region $AWS_REGION \ --with-oidc \ --managed

ノードグループの追加

# ARM/Graviton (matches Glue's typical runtime): eksctl create nodegroup \ --cluster $CLUSTER \ --region $AWS_REGION \ --name arm64-ng \ --node-type m7g.large \ --nodes 2 --nodes-min 1 --nodes-max 5 \ --managed \ --node-labels "workload=ray" # x86/amd64 (use if your image is amd64-only): eksctl create nodegroup \ --cluster $CLUSTER \ --region $AWS_REGION \ --name amd64-ng \ --node-type m5.large \ --nodes 2 --nodes-min 1 --nodes-max 5 \ --managed \ --node-labels "workload=ray"
注記

既存の Amazon Elastic Kubernetes Service クラスターを使用している場合は、ノードグループを追加するときに --with-oidc を使用して OIDC を有効にします。

S3 のサービスアカウント (IRSA) の名前空間 + IAM ロールの作成

Kubernetes 名前空間は、リソース (ポッド、サービス、ロールなど) の論理グループです。既存の名前空間の作成や再利用が可能です。また、AWS Glue ジョブのアクセスをミラーリングする S3 の IAM ポリシーも作成する必要があります。AWS Glue ジョブロールに付与されていたカスタムアクセス許可 (通常は特定のバケットへの S3 読み取り/書き込み) と同じものを使用します。AWSGlueServiceRole と同様のアクセス許可を Amazon Elastic Kubernetes Service に付与するには、この IAM ポリシーにバインドされているサービスアカウント (IRSA) を作成します。このサービスアカウントのセットアップ手順については、「サービスアカウントの IAM ロール」を参照してください。

# Create (or reuse) namespace kubectl create namespace $NS || true
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:PutObject", "s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::YOUR-BUCKET", "arn:aws:s3:::YOUR-BUCKET/*" ] }] }
# Create the IAM policy and wire IRSA: aws iam create-policy \ --policy-name RayS3Policy \ --policy-document file://example.json || true # Create a service account (IRSA) bound to that policy. eksctl create iamserviceaccount \ --cluster $CLUSTER \ --region $AWS_REGION \ --namespace $NS \ --name ray-s3-access \ --attach-policy-arn arn:aws:iam::${AWS_ACCOUNT}:policy/RayS3Policy \ --approve \ --override-existing-serviceaccounts

KubeRay 演算子 (K8sで Ray を実行する制御要素) のインストール

helm repo add kuberay https://ray-project.github.io/kuberay-helm/ helm repo update helm upgrade --install kuberay-operator kuberay/kuberay-operator \ --namespace kuberay-system \ --create-namespace # Validate the operator pod Running kubectl -n kuberay-system get pods

ステップ 4. Ray クラスターをスピンアップする

YAML ファイルを作成して Ray クラスターを定義します。以下は、設定のサンプル (raycluster.yaml) です。

apiVersion: ray.io/v1 kind: RayCluster metadata: name: glue-like namespace: ray spec: rayVersion: "2.4.0" headGroupSpec: template: spec: nodeSelector: kubernetes.io/arch: amd64 serviceAccountName: ray-s3-access containers: - name: ray-head image: rayproject/ray:2.4.0-py39 imagePullPolicy: Always resources: requests: { cpu: "1", memory: "2Gi" } limits: { cpu: "1", memory: "2Gi" } workerGroupSpecs: - groupName: workers replicas: 0 # start with just a head (like small Glue dev job) and turn number of replicas later minReplicas: 0 maxReplicas: 5 template: spec: nodeSelector: kubernetes.io/arch: amd64 serviceAccountName: ray-s3-access containers: - name: ray-worker image: rayproject/ray:2.4.0-py39 imagePullPolicy: Always resources: requests: { cpu: "1", memory: "2Gi" } limits: { cpu: "1", memory: "2Gi" }

Amazon Elastic Kubernetes Service クラスターへの Ray クラスターのデプロイ

kubectl apply -n $NS -f raycluster.yaml # Validate that the head pod turns to READY/ RUNNING state kubectl -n $NS get pods -l ray.io/cluster=glue-like -w

デプロイされた yaml に変更を加える必要がある場合は、まずクラスターを削除してから、更新された yaml を再適用します。

kubectl -n $NS delete raycluster glue-like kubectl -n $NS apply -f raycluster.yaml

Ray ダッシュボードへのアクセス

kubectl を使用してポート転送を有効にすると、Ray ダッシュボードにアクセスできます。

# Get service SVC=$(kubectl -n $NS get svc -l ray.io/cluster=glue-like,ray.io/node-type=head -o jsonpath='{.items[0].metadata.name}') # Make the Ray dashboard accessible at http://localhost:8265 on your local machine. kubectl -n $NS port-forward svc/$SVC 8265:8265

ステップ 5. Ray ジョブの送信

Ray ジョブを送信するには、Ray ジョブ CLI を使用します。CLI バージョンはクラスターよりも新しい場合がありますが、下位互換性があります。前提条件として、ジョブスクリプトを job.py などのファイルに入れてローカルで保存します。

python3 -m venv ~/raycli && source ~/raycli/bin/activate pip install "ray[default]==2.49.2" # Submit your ray job by supplying all python dependencies that was added to your Glue job ray job submit --address http://127.0.0.1:8265 --working-dir . \ --runtime-env-json '{ "pip": ["boto3==1.28.*","pyarrow==12.*","pandas==2.0.*"] }' \ -- python job.py

ジョブは Ray ダッシュボードで監視できます。