

# AWS Glue とは
<a name="what-is-glue"></a>

 AWS Glue は、分析を行うユーザーが複数のソースからのデータを簡単に検出、準備、移動、統合できるようにするサーバーレスのデータ統合サービスです。分析、機械学習、アプリケーション開発に使用できます。また、ジョブの作成、実行、ビジネスワークフローの実装のための生産性向上に役立つツールやデータ運用ツールも追加されています。

 AWS Glue を使用すれば、70 を超える多様なデータソースを検出して接続し、一元化されたデータカタログでデータを管理できます。抽出、変換、ロード（ETL）パイプラインを視覚的に作成、実行、モニタリングして、データをデータレイクにロードできます。また、Amazon Athena、Amazon EMR、Amazon Redshift Spectrum を使用して、カタログ化されたデータをすぐに検索し、クエリできます。

 AWS Glue は、主要なデータ統合機能を単一のサービスに統合します。これは、データ検出、最新の ETL、クリーニング、変換、一元化されたカタログ作成が含まれます。また、サーバーレスなので、管理するインフラストラクチャがありません。AWS Glue は、ETL、ELT、ストリーミングなどのすべてのワークロードを 1 つのサービスで柔軟にサポートすることで、さまざまなワークロードやユーザータイプのユーザーをサポートします。

 また、AWS Glue アーキテクチャ全体でデータを簡単に統合できます。AWS 分析サービスと Amazon S3 データレイクを統合します。AWS Glue では、さまざまな技術的スキルセットに合わせてカスタマイズされたソリューションを備えており、デベロッパーからビジネスユーザーまで、すべてのユーザーが使いやすい統合インターフェイスとジョブ作成ツールを用意しています。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/u14iVEc-C6E/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/u14iVEc-C6E)


 オンデマンドで拡張できる AWS Glue を使用すれば、データの価値を最大化する価値の高いアクティビティに集中できます。あらゆるデータサイズに合わせてスケーリングでき、すべてのデータ型とスキーマの差異をサポートします。俊敏性を高め、コストを最適化するため、AWS Glue は、組み込みの高可用性と従量制料金を提供します。

料金については、[AWS Glue の料金](https://aws.amazon.com/glue/pricing)を参照してください。

 **AWS Glue Studio** 

 AWS Glue Studio は、AWS Glueでのデータ統合ジョブの作成、実行、モニタリングを容易にするグラフィカルインターフェイスです。データ変換ワークフローを視覚的に作成し、AWS Glue の Apache Spark ベースのサーバーレス ETL エンジンでシームレスに実行することができます。

AWS Glue Studio を使用すると、データを収集、変換、クリーニングするジョブを作成および管理できます。AWS Glue Studio を使用して、ジョブスクリプトのトラブルシューティングや編集ができます。

**Topics**
+ [AWS Glue の機能](#glue-features-summary)
+ [AWS Glue のイノベーションについて学ぶ](#innovations-in-glue)
+ [AWS Glue の開始方法](#getting-started-with-glue)
+ [AWS Glue へのアクセス](#accessing-aws-glue)
+ [関連サービス](#what-is-glue-related-services)
+ [AWS Glue for Ray のサポート終了](awsglue-ray-jobs-availability-change.md)

## AWS Glue の機能
<a name="glue-features-summary"></a>

AWS Glue の機能は、次の 3 つの主要なカテゴリに分類されます。
+  データの検出と整理 
+  分析用データの変換、準備、クリーニング 
+  データパイプラインの構築とモニタリング 

 **データの検出と整理** 
+  **複数のデータストアを統合して検索** – AWS ですべてのデータをカタログ化することで、複数のデータソースやシンクで保存、インデックス作成、検索を行うことができます。
+  **データを自動的に検出** – AWS Glue クローラーを使用して自動的にスキーマ情報を推測し、AWS Glue Data Catalog のスキーマ情報に統合します。
+  **スキーマとアクセス許可を管理** – データベースとテーブルへのアクセスを検証し、制御します。
+  **さまざまなデータソースに接続** – オンプレミスと AWS の両方で複数のデータソースを活用し、AWS Glue 接続を使用してデータレイクを構築します。

 **分析用データの変換、準備、クリーニング** 
+  **ジョブキャンバスインターフェイスでデータを視覚的に変換** – ビジュアルジョブエディターで ETL プロセスを定義し、データを抽出、変換、ロードするコードを自動的に生成します。
+  **シンプルなジョブスケジューリングで複雑な ETL パイプラインを構築** – スケジュール、オンデマンド、またはイベントに基づいて AWS Glue ジョブを呼び出します。
+  **転送中のストリーミングデータのクリーニングと変換** – 継続的なデータ消費が可能になり、転送中のデータをクリーニングして変換します。これにより、ターゲットデータストアでの分析が数秒でできるようになります。
+ **組み込みの機械学習によるデータの重複排除とクリーニング** – `FindMatches` 機能を使用することで、機械学習の専門知識がなくても、分析用のデータをクリーニングして準備できます。この機能は、相互に不完全な一致であるレコードを重複排除して検索します。
+  **組み込みのジョブノートブック** – AWS Glue ジョブノートブックは、AWS Glue での最小限のセットアップでサーバーレスノートブックを提供するため、すぐに使用を開始できます。
+  **ETL コードの編集、デバッグ、テスト** – AWS Glue インタラクティブセッションを使用することで、データをインタラクティブに探索して準備できます。任意の IDE またはノートブックを使用して、データをインタラクティブに探索、実験、処理できます。
+  **機密データの定義、検出、修正** – AWS Glue の機密データ検出により、データパイプラインとデータレイク内の機密データを定義、識別、処理できます。

 **データパイプラインの構築とモニタリング** 
+  **ワークロードに基づいて自動的にスケーリング** – ワークロードに基づいて、リソースを動的にスケールアップまたはスケールダウンできます。これにより、ワーカーは必要な場合にのみジョブに割り当てられます。
+  **イベントベースのトリガーでジョブを自動化** – イベントベースのトリガーでクローラーまたは AWS Glue ジョブを開始し、依存するジョブとクローラーのチェーンを設計します。
+  **ジョブの実行とモニタリング** – 選択したエンジン (Spark または Ray) を使用して AWS Glue ジョブを実行します。また、自動モニタリングツール、AWS Glue ジョブ実行のインサイト、AWS CloudTrail を使用してモニタリングします。Apache Spark UI を使用して、Spark を利用したジョブのモニタリングを改善します。
+  **ETL と統合アクティビティのワークフローを定義** – ETLのワークフローと、複数のクローラー、ジョブ、トリガーの統合アクティビティを定義します。

## AWS Glue のイノベーションについて学ぶ
<a name="innovations-in-glue"></a>

AWS Glue の最新イノベーションについて学び、AWS Glue を使用して、セルフサービスによるデータの準備を組織全体で可能にする方法を確認できます。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/cDDPg_XxPqc/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/cDDPg_XxPqc)


AWS Glue を従来の設定にとらわれずにスケールする方法と、ジョブのモニタリングとパフォーマンスのために AWS Glue を設定する方法を確認できます。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/ce6t3FqB_Z4/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/ce6t3FqB_Z4)


## AWS Glue の開始方法
<a name="getting-started-with-glue"></a>

 以下のセクションから開始することが推奨されます。
+  [AWS Glue クローン作成の概要](https://docs.aws.amazon.com/glue/latest/dg/start-console-overview.html) 
+  [AWS Glue の概念](https://docs.aws.amazon.com/glue/latest/dg/components-key-concepts.html) 
+  [AWS Glue 用の IAM アクセス許可のセットアップ](https://docs.aws.amazon.com/glue/latest/dg/set-up-iam.html) 
+  [AWS Glue Data Catalog の開始方法](https://docs.aws.amazon.com/glue/latest/dg/start-data-catalog.html) 
+  [AWS Glue でジョブを作成する](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) 
+  [AWS Glue のインタラクティブセッションの開始方法](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions.html) 
+  [AWS Glue でのオーケストレーション](https://docs.aws.amazon.com/glue/latest/dg/etl-jobs.html) 

## AWS Glue へのアクセス
<a name="accessing-aws-glue"></a>

 次のインターフェイスを使用して、AWS Glue ジョブの作成、表示、管理ができます。
+  **AWS Glue コンソール** – AWS Glue ジョブを作成、表示、管理するためのウェブインターフェイスを提供します。コンソールにアクセスするには、[https://console.aws.amazon.com/glue](https://console.aws.amazon.com/glue) を参照してください。
+  **AWS Glue Studio** – AWS Glue ジョブを視覚的に作成および編集するためのグラフィカルインターフェイスを提供します。詳細については、「[Visual ETL ジョブの作成](author-job-glue.md)」を参照してください。
+  **AWS CLI リファレンスの AWS Glue セクション** – AWS Glue で使用できる AWS CLI コマンドを提供します。詳細については、「[AWS Glue 向けの AWS CLI リファレンス](https://docs.aws.amazon.com/cli/latest/reference/glue/index.html)」を参照してください。
+  **AWS Glue API** – デベロッパー向けの完全な API リファレンスを提供します。詳細については、「[AWS Glue API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html)」を参照してください。

## 関連サービス
<a name="what-is-glue-related-services"></a>

 AWS Glue のユーザーは、以下も使用します。
+  **[AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html)**–AWS Glue Data Catalog内のリソースへの詳細に設定されたアクセスコントロールを行う認可レイヤーであるサービス。
+  ** [AWS Glue DataBrew](https://docs.aws.amazon.com/databrew/latest/dg/what-is.html) ** – コードを記述せずに、データのクリーニングおよび正規化に使用できるビジュアルデータ準備ツール。

# AWS Glue for Ray のサポート終了
<a name="awsglue-ray-jobs-availability-change"></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)」を参照してください。

慎重に検討いたしました結果、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 への移行
<a name="awsglue-ray-jobs-availability-change-migration"></a>

このセクションでは、AWS Glue for Ray から Ray on Amazon Elastic Kubernetes Service に移行する手順について説明します。これらのステップは次の 2 つの移行シナリオに役立ちます。
+ **標準移行 (x86/amd64)**: これらのユースケースの場合、移行戦略では基本的な実装に OpenSource Ray コンテナを使用し、ベースコンテナでスクリプトを直接実行します。
+ **ARM64 移行**: これらのユースケースの場合、移行戦略では ARM64-固有の依存関係とアーキテクチャ要件のカスタムコンテナビルドがサポートされます。

### 移行の前提条件
<a name="awsglue-ray-jobs-availability-change-prerequisites"></a>

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

#### eksctl をインストールする
<a name="awsglue-ray-jobs-availability-change-install-eksctl"></a>

「[Eksctl のインストールオプション](https://docs.aws.amazon.com/eks/latest/eksctl/installation.html)」の指示または次の手順に従ってインストールを行います。

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 をインストールする
<a name="awsglue-ray-jobs-availability-change-install-kubectl"></a>

「[kubectl と eksctl のセットアップ](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)」の指示または次の手順に従ってインストールを行います。

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 のインストール
<a name="awsglue-ray-jobs-availability-change-install-helm"></a>

「[Helm のインストール](https://helm.sh/docs/intro/install/)」の指示または次の手順に従ってインストールを行います。

macOS の場合:

```
brew install helm
```

Linux の場合:

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

### ステップ 1. Ray 用の Docker イメージ の構築または選択
<a name="awsglue-ray-jobs-availability-change-step1"></a>

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

このオプションでは [Docker Hub](https://hub.docker.com/u/rayproject) の公式の 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 への変換
<a name="awsglue-ray-jobs-availability-change-step2"></a>

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

#### ジョブ引数マッピング
<a name="awsglue-ray-jobs-availability-change-job-argument-mapping"></a>


**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\$1dir を使用する。S3 zip の py\$1modules は S3 アーティファクトを指すために使用する。 | 
| --s3-py-modules | S3 から Python wheel/dists を追加する。 | Ray ランタイム環境 py\$1modules: ["s3://.../xxx.whl", ...] を使用する | 
| --pip-install | ジョブのために追加の PyPI パッケージをインストールする。 | Ray ランタイム環境: pip: ["pkg==ver", ...] (Ray Job CLI --runtime-env-jsonまたは RayJob runtimeEnvYAML) | 
| --object\$1store\$1memory\$1head | ヘッドノードの Plasma ストア用のメモリ (%)。 | RayCluster の headGroupSpec[].rayStartParams.object-store-memory。単位のバイトに注意。AWS Glue ではパーセンテージを、Ray ではバイトを使用する。 | 
| --object\$1store\$1memory\$1worker | ワーカーノードの Plasma ストア用のメモリ (%)。 | 上記と同様。ただし、各ワーカーグループの rayStartParams.object-store-memory (バイト) で設定する。 | 
| --object\$1spilling\$1config | Ray オブジェクトのスピルを設定する。 | headGroupSpec[].rayStartParams.object-spilling-config | 
| --logging\$1configuration | AWS Glue マネージドログ (CloudWatch、S3)。 | ポッド stdout/stderr を確認: kubectl -n ray logs <pod-name> --follow を使用する。Ray ダッシュボード (:8265 にポート転送) のログを確認する。タスクログとジョブログの表示も可能。 | 

#### ジョブ設定マッピング
<a name="awsglue-ray-jobs-availability-change-job-config-mapping"></a>


**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 のセットアップ
<a name="awsglue-ray-jobs-availability-change-step3"></a>

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

#### Amazon Elastic Kubernetes Service クラスターの作成
<a name="awsglue-ray-jobs-availability-change-create-cluster"></a>

**注記**  
既存の 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
```

#### ノードグループの追加
<a name="awsglue-ray-jobs-availability-change-add-nodegroup"></a>

```
# 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) の名前空間 \$1 IAM ロールの作成
<a name="awsglue-ray-jobs-availability-change-irsa"></a>

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

```
# 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 を実行する制御要素) のインストール
<a name="awsglue-ray-jobs-availability-change-install-kuberay"></a>

```
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 クラスターをスピンアップする
<a name="awsglue-ray-jobs-availability-change-step4"></a>

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 クラスターのデプロイ
<a name="awsglue-ray-jobs-availability-change-deploy-cluster"></a>

```
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 ダッシュボードへのアクセス
<a name="awsglue-ray-jobs-availability-change-ray-dashboard"></a>

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 ジョブの送信
<a name="awsglue-ray-jobs-availability-change-step5"></a>

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 ダッシュボードで監視できます。