

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Batch チュートリアルの開始方法
<a name="Batch_GetStarted"></a>

 AWS Batch 初回実行ウィザードを使用すると、すぐに使用を開始できます AWS Batch。前提条件を確認したら、初回実行ウィザードを使用してコンピューティング環境、ジョブ定義、およびジョブキューを作成できます。

 AWS Batch 初回実行ウィザードを使用してサンプル「Hello World」ジョブを送信し、設定をテストすることもできます。起動する Docker イメージが既にある場合は AWS Batch、そのイメージを使用してジョブ定義を作成できます。

その後、 AWS Batch 初回実行ウィザードを使用してコンピューティング環境、ジョブキューを作成し、サンプルの *Hello World* ジョブを送信できます。

# ウィザードを使用した Amazon EC2 オーケストレーションの開始方法
<a name="getting-started-ec2"></a>

Amazon Elastic Compute Cloud (Amazon EC2) は、 AWS クラウドでスケーラブルなコンピューティング容量を提供します。Amazon EC2 の使用により、ハードウェアに事前投資する必要がなくなり、アプリケーションをより速く開発およびデプロイできます。

Amazon EC2 を使用すると、必要な数 (またはそれ以下) の仮想サーバーの起動、セキュリティおよびネットワーキングの構成、ストレージの管理ができます。Amazon EC2 は、要件変更や需要増に応じてスケールアップまたはスケールダウンできるため、トラフィック予測の必要性を軽減できます。

## 概要
<a name="getting-started-ec2-context"></a>

このチュートリアルでは、ウィザード AWS Batch で をセットアップして Amazon EC2 を設定し、 を実行する方法を示します`Hello World`。

**対象者**  
このチュートリアルは、 AWS Batchのセットアップ、テスト、デプロイを担当するシステム管理者とデベロッパーを対象としています。

**使用される機能**  
このチュートリアルでは、 AWS Batch コンソールウィザードを使用して以下を行う方法を示します。  
+ Amazon EC2 コンピューティング環境を作成して設定する
+ ジョブキューの作成。
+ ジョブ定義の作成
+ ジョブを作成して実行する
+ CloudWatch でジョブ出力を表示する

**所要時間**  
このチュートリアルの所要時間は約 10～15 分です。

**リージョンの制限**  
このソリューションの使用に関連する国やリージョン別の制限はありません。

**リソースの使用コスト**  
 AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装することにより、次の表に記載されるコストの一部またはすべてが発生する可能性があります。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/getting-started-ec2.html)

## 前提条件
<a name="getting-started-ec2-prerequisite"></a>

開始する前に:
+  AWS アカウント がない場合は、 を作成します。
+ [`ecsInstanceRole` インスタンスロール](batch-check-ecsinstancerole.md)を作成する

## ステップ1:コンピューティング環境を作成する
<a name="create-ce-1"></a>

**重要**  
可能な限りシンプルかつ迅速に使用を開始するため、このチュートリアルでは、デフォルトの設定で作成するステップについて説明します。本番での使用に向けて作成する前に、すべての設定内容に習熟した上で、要件を満たす設定でデプロイすることをお勧めします。

Amazon EC2 オーケストレーション用のコンピューティング環境を作成するには、以下の操作を実行します。

1. [AWS Batch コンソールの初回実行ウィザード](https://console.aws.amazon.com/batch/home#wizard) を開きます。

1. **[ジョブとオーケストレーションタイプの設定]** には、**[Amazon Elastic Compute Cloud (Amazon EC2)]** を選択します。

1. [**次へ**] を選択します。

1. **コンピューティング環境設定** の **名前** で、コンピューティング環境の一意な名前を指定します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

1. **[インスタンスロール]** では、必要な IAM アクセス許可がアタッチされた既存のインスタンスロールを選択します。このインスタンスロールにより、コンピューティング環境の Amazon ECS コンテナインスタンスは必要な AWS API オペレーションを呼び出すことができます。詳細については、「[Amazon ECS インスタンスロール](instance_IAM_role.md)」を参照してください。

   **[インスタンスロール]** のデフォルト名は `ecsInstanceRole` です。

1. **[インスタンス設定]** では、デフォルト設定のままにすることができます。

1. **[ネットワーク設定]** では、 AWS リージョンにデフォルトの VPC を使用します。

1. [**次へ**] を選択します。

## ステップ 2: ジョブキューを作成する
<a name="create-job-queue-1"></a>

ジョブキューは、ス AWS Batch ケジューラがコンピューティング環境のリソースでジョブを実行するまで、送信されたジョブを保存します。詳細については、[ジョブキュー](job_queues.md)を参照してください。

Amazon EC2 オーケストレーション用のジョブキューを作成するには、以下の操作を実行します。

1. **[名前]** の **[ジョブキューの設定]** で、ジョブキューの一意の名前を指定します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

1. 他のすべての設定オプションでは、デフォルト値のままにすることができます。

1. [**次へ**] を選択します。

## ステップ 3: ジョブ定義を作成する
<a name="create-job-definition-1"></a>

AWS Batch ジョブ定義は、ジョブの実行方法を指定します。各ジョブはジョブ定義を参照しなければならないが、ジョブ定義で指定されたパラメーターの多くは実行時に上書きできます。

ジョブ定義を作成するには:

1. **[ジョブ定義の作成]** では以下を行います。

   1. **[名前]** に、一意のジョブキュー名を入力します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

   1. **[コマンド - *オプション*]** で、`hello world` をカスタムメッセージに変更することも、そのままにすることもできます。

1. 他のすべての設定オプションでは、デフォルト値のままにすることができます。

1. [**次へ**] を選択します。

## ステップ 4: ジョブを作成する
<a name="create-job-1"></a>

ジョブを作成するには、以下の手順を実行します。

1. **ジョブの設定** セクションの **名前** で、ジョブの一意の名前を指定します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

1. 他のすべての設定オプションでは、デフォルト値のままにすることができます。

1. [**次へ**] を選択します。

## ステップ 5: 確認して作成する
<a name="review-create-1"></a>

**レビューおよび作成**では、設定手順を確認してください。変更する必要がある場合は、**編集** を選択します。完了したら、**リソースを作成** を選択します。

1. **[レビューおよび作成]** で、**[リソースの作成]** を選択します。

1. がリソースの割り当て AWS Batch を開始すると、ウィンドウが開きます。完了したら、**[ダッシュボードに移動]** を選択します。ダッシュボードには、割り当てられたすべてのリソースと、ジョブが `Runnable` 状態になっていることが表示されます。ジョブの実行がスケジュールされ、2～3 分で完了します。

## ステップ 6: ジョブの出力を表示する
<a name="view-job-1"></a>

ジョブの出力を表示するには、以下を実行します。

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

1. **[ジョブキュー]** ドロップダウンで、チュートリアル用に作成したジョブキューを選択します。

1. **[ジョブ]** テーブルには、すべてのジョブとその現在のステータスが一覧表示されます。ジョブの **[ステータス]** が **[成功]** であれば、ジョブの **[名前]** を選択してジョブの詳細を表示します。

1. **[詳細]** ペインで、**ログストリーム名**を選択します。ジョブの CloudWatch コンソールが開き、`hello world` の **[メッセージ]** またはカスタムメッセージを含むイベントが 1 つあるはずです。

## ステップ7: チュートリアルのリソースをクリーンアップする
<a name="delete-1"></a>

Amazon EC2 インスタンスが有効になっている間は課金されます。インスタンスを削除して、料金の発生を停止できます。

作成したリソースを削除するには、次の作業を行います。

1. ナビゲーションペインで **[ジョブキュー]** を選択します。

1. **[ジョブキュー]** テーブルで、チュートリアル用に作成したジョブキューを選択します。

1. **[Disable]** (無効化) を選択します。ジョブキューの **[状態]** が無効になったら、**[削除]** を選択できます。

1. ジョブキューが削除されたら、ナビゲーションペインで **[コンピューティング環境]** を選択します。

1. このチュートリアル用に作成したコンピューティング環境を選択し、**[無効化]** を選択します。コンピューティング環境が無効になるまでに 1～2 分かかる場合があります。

1. コンピューティング環境の **[状態]** が無効になったら、**[削除]** を選択します。コンピューティング環境が削除されるまでに 1～2 分かかる場合があります。

## その他のリソース
<a name="procedure_additional_resources"></a>

チュートリアルが完了したら、次のトピックを試すことができます。
+  AWS Batch コアコンポーネントについて説明します。詳細については、「[のコンポーネント AWS Batch](batch_components.md)」を参照してください。
+  AWS Batchで使用できるさまざまな[コンピューティング環境](compute_environments.md)について説明します。
+ [[ジョブキュー]](job_queues.md) とそのさまざまなスケジューリングオプションについて詳しく説明します。
+ [[ジョブ定義]](job_definitions.md) とそのさまざまな設定オプションについて詳しく説明します。
+ さまざまなタイプの [[ジョブ]](jobs.md) について詳しく説明します。

# ウィザードを使用した AWS Batch と Fargate オーケストレーションの開始方法
<a name="getting-started-fargate"></a>

AWS Fargate は、コンテナに指定したリソース要件に厳密に一致するようにコンピューティングを起動してスケーリングします。Fargate を使用すると、追加のサーバーに対してオーバープロビジョニングまたは料金を支払う必要はありません。詳細については、[Fargate](https://docs.aws.amazon.com//batch/latest/userguide/fargate.html#when-to-use-fargate) を参照してください。

## 概要
<a name="getting-started-fargate-contextual"></a>

このチュートリアルでは、ウィザード AWS Batch で をセットアップして AWS Fargate を設定し、 を実行する方法を示します`Hello World`。

**対象者**  
このチュートリアルは、 AWS Batchのセットアップ、テスト、デプロイを担当するシステム管理者とデベロッパーを対象としています。

**使用される機能**  
このチュートリアルでは、 AWS Batch コンソールウィザードを使用して以下を行う方法を示します。  
+  AWS Fargate コンピューティング環境を作成して設定する
+ ジョブキューの作成。
+ ジョブ定義の作成
+ ジョブを作成して実行する
+ CloudWatch でジョブ出力を表示する

**所要時間**  
このチュートリアルの所要時間は約 10～15 分です。

**リージョンの制限**  
このソリューションの使用に関連する国やリージョン別の制限はありません。

**リソースの使用コスト**  
 AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装することにより、次の表に記載されるコストの一部またはすべてが発生する可能性があります。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/getting-started-fargate.html)

## 前提条件
<a name="getting-started-fargate-prerequisite"></a>

開始する前に: 
+  AWS アカウント がない場合は、 を作成します。
+ タスク実行ロールを作成します。[タスク実行ロール](create-execution-role.md)をまだ作成していない場合は、このチュートリアルの一部として作成できます。

## ステップ1:コンピューティング環境を作成する
<a name="create-ce-2"></a>

**重要**  
可能な限りシンプルかつ迅速に使用を開始するため、このチュートリアルでは、デフォルトの設定で作成するステップについて説明します。本番での使用に向けて作成する前に、すべての設定内容に習熟した上で、要件を満たす設定でデプロイすることをお勧めします。

Fargate オーケストレーション用のコンピューティング環境を作成するには、以下の操作を実行します。

1. [AWS Batch コンソールの初回実行ウィザード](https://console.aws.amazon.com/batch/home#wizard) を開きます。

1. **[ジョブとオーケストレーションタイプを設定する]** で、**[Fargate]** を選択します。

1. [**次へ**] を選択します。

1. **コンピューティング環境設定** の **名前** で、コンピューティング環境の一意な名前を指定します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

1. 他のすべての設定オプションでは、デフォルト値のままにすることができます。

1. [**次へ**] を選択します。

## ステップ 2: ジョブキューを作成する
<a name="create-job-queue-2"></a>

ジョブキューは、ス AWS Batch ケジューラがコンピューティング環境のリソースでジョブを実行するまで、送信されたジョブを保存します。ジョブキューを作成するには:

Fargate オーケストレーションのジョブキューを作成するには、以下の操作を実行します。

1. **名前**の**ジョブキュー設定**セクションで、ジョブキューの一意の名前を指定します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

1. **[優先度]** には、このジョブキュー向けに 900 と入力します。

1. 他のすべての設定オプションでは、デフォルト値のままにすることができます。

1. [**次へ**] を選択します。

## ステップ 3: ジョブ定義を作成する
<a name="create-job-definition-2"></a>

ジョブ定義を作成するには

1. **一般設定** セクションで:

   1. Name の**全般設定**セクションで****、ジョブ定義に一意の名前を指定します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

1. **Fargate プラットフォーム設定** セクションで:

   1. **[パブリック IP アドレスの割り当て]** をオンにして、パブリック IP アドレスを割り当てます。プライベートイメージリポジトリをセットアップしない限り、コンテナイメージをダウンロードするにはパブリック IP が必要です。

   1. **実行ロール** で、Amazon Elastic Container Service (Amazon ECS) エージェントにユーザーに代わって AWS 呼び出しを許可するタスク実行ロールを選択します。**[ecsTaskExecutionRole]** または **[BatchEcsTaskExecutionRole]** を選択します。

      **[実行ロール]** を作成するには、**[新しいロールを作成]** を選択します。**[IAM ロールを作成]** モーダルで、**[IAM ロールを作成]** を選択します。

      1. IAM コンソールには、実行ロールを作成するためのアクセス許可設定が既に設定されています。

      1. **[信頼されたエンティティタイプ]** で、[**AWS サービス**] が選択されていることを確認します。

      1. **[サービスまたはユーザーケース]** で、**[Elastic Container Service]** が選択されていることを確認します。

      1. [**次へ**] を選択します。

      1. **[アクセス許可ポリシー]** セクションで、**[AmazonECSTaskExecutionRolePolicy]** ポリシーが選択されていることを確認します。

      1. [**次へ**] を選択します。

      1. **[名前、レビュー、作成]** で、ロール名が **[BatchEcsTaskExecutionRole]** であることを確認します。

      1. [**ロールの作成**] を選択してください。

      1.  AWS Batch コンソールで、**実行ロール**の横にある更新ボタンを選択します。**[BatchEcsTaskExecutionRole]** 実行ロールを選択します。

1. **コンテナの設定** セクションで次の操作を行います。

   1. **[コマンド]** では、`hello world` をカスタムメッセージに変更することも、そのままにすることもできます。

1. 他のすべての設定オプションでは、デフォルト値のままにすることができます。

1. [**次へ**] を選択します。

## ステップ 4: ジョブを作成する
<a name="create-job-2"></a>

Fargate ジョブを作成するには、以下の手順を実行します。

1. **ジョブの設定** セクションの **名前** で、ジョブの一意の名前を指定します。名前の最大長は 128 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\$1) を含めることができます。

1. 他のすべての設定オプションでは、デフォルト値のままにすることができます。

1. [**次へ**] を選択します。

## ステップ 5: 確認して作成する
<a name="review-create-2"></a>

**レビューおよび作成**では、設定手順を確認してください。変更する必要がある場合は、**編集** を選択します。完了したら、**リソースを作成** を選択します。

## ステップ 6: ジョブの出力を表示する
<a name="view-job-fargate"></a>

ジョブの出力を表示するには、以下を実行します。

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

1. **[ジョブキュー]** ドロップダウンで、チュートリアル用に作成したジョブキューを選択します。

1. **[ジョブ]** テーブルには、すべてのジョブとその現在のステータスが一覧表示されます。ジョブの **[ステータス]** が **[成功]** であれば、ジョブの **[名前]** を選択してジョブの詳細を表示します。

1. **[詳細]** ペインで、**ログストリーム名**を選択します。ジョブの CloudWatch コンソールが開き、`hello world` の **[メッセージ]** またはカスタムメッセージを含むイベントが 1 つあるはずです。

## ステップ7: チュートリアルのリソースをクリーンアップする
<a name="delete-fargate"></a>

Amazon EC2 インスタンスが有効になっている間は課金されます。インスタンスを削除して、料金の発生を停止できます。

作成したリソースを削除するには、次の作業を行います。

1. ナビゲーションペインで **[ジョブキュー]** を選択します。

1. **[ジョブキュー]** テーブルで、チュートリアル用に作成したジョブキューを選択します。

1. **[Disable]** (無効化) を選択します。ジョブキューの **[状態]** が無効になったら、**[削除]** を選択できます。

1. ジョブキューが削除されたら、ナビゲーションペインで **[コンピューティング環境]** を選択します。

1. このチュートリアル用に作成したコンピューティング環境を選択し、**[無効化]** を選択します。コンピューティング環境が無効になるまでに 1～2 分かかる場合があります。

1. コンピューティング環境の **[状態]** が無効になったら、**[削除]** を選択します。コンピューティング環境が削除されるまでに 1～2 分かかる場合があります。

## その他のリソース
<a name="fargate-additional-resources"></a>

チュートリアルが完了したら、次のトピックを試すことができます。
+ [ベストプラクティス](best-practices.md)について詳しく説明します。
+  AWS Batch コアコンポーネントについて説明します。詳細については、「[のコンポーネント AWS Batch](batch_components.md)」を参照してください。
+  AWS Batchで使用できるさまざまな[コンピューティング環境](compute_environments.md)について説明します。
+ [[ジョブキュー]](job_queues.md) とそのさまざまなスケジューリングオプションについて詳しく説明します。
+ [[ジョブ定義]](job_definitions.md) とそのさまざまな設定オプションについて詳しく説明します。
+ さまざまなタイプの [[ジョブ]](jobs.md) について詳しく説明します。

# を使用した AWS Batch と Fargate の開始方法 AWS CLI
<a name="getting-started-with-fargate-using-the-aws-cli"></a>

このチュートリアルでは、 AWS Fargate オーケストレーション AWS Batch を使用して をセットアップし、 AWS Command Line Interface () を使用して単純な「Hello World」ジョブを実行する方法を示しますAWS CLI。コンピューティング環境、ジョブキュー、ジョブ定義を作成し、 AWS Batchにジョブを送信する方法を学びます。

**Topics**
+ [前提条件](#prerequisites)
+ [IAM 実行ロールを作成する](#tutorial-fargate-using-the-aws-cli-create-an-iam-execution-role)
+ [コンピューティング環境を作成する](#create-a-compute-environment)
+ [ジョブキューを作成する](#cli-create-a-job-queue)
+ [ジョブ定義の作成](#cli-create-a-job-definition)
+ [ジョブを送信し、モニタリングする](#cli-submit-and-monitor-a-job)
+ [ジョブ出力を表示する](#cli-view-job-output)
+ [リソースをクリーンアップする](#cli-clean-up-resources)
+ [本番環境への移行](#cli-going-to-production)
+ [次の手順](#cli-next-steps)

## 前提条件
<a name="prerequisites"></a>

このチュートリアルを開始する前に、以下の要件を満たしていることを確認してください。

1.  AWS CLI。インストールする必要がある場合は、「[AWS CLI の最新バージョンのインストールまたは更新](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」に従ってください。を含む [を使用 AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)することもできます AWS CLI。

1. 適切な認証情報 AWS CLI を使用して を設定しました。認証情報をまだ設定していない場合は、`aws configure` を実行します。

1. コマンドラインインターフェイスとコンテナ化の概念に関する基本的な知識。

1. [AWS Batch が IAM と連携する方法](security_iam_service-with-iam.md) を使用して、 の AWS Batch リソース、IAM ロール、VPC リソースを作成および管理します AWS アカウント。

1. の VPC からのサブネット ID とセキュリティグループ ID AWS アカウント。VPC がない場合は[作成できます](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)。を使用してこれらのリソース ID AWS CLI を取得する方法の詳細については、*AWS CLI 「 コマンドリファレンス*」の[「describe-subnets](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-subnets.html)」と[describe-security-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-security-groups.html)」を参照してください。 IDs

**所要時間**: このチュートリアルの所要時間は約 15～20 分です。

**コスト**: このチュートリアルでは、Fargate コンピューティングリソースを使用します。このチュートリアルの完了にかかる推定コストは、クリーンアップの指示に従って完了直後にリソースを削除すると想定した場合、0.01 USD 未満です。Fargate の料金は、消費された vCPU リソースとメモリリソースに基づいており、1 秒あたりで課金されます。最低課金時間は 1 分です。最新の料金については、「[AWS Fargate の料金](https://aws.amazon.com/fargate/pricing/)」を参照してください。

## IAM 実行ロールを作成する
<a name="tutorial-fargate-using-the-aws-cli-create-an-iam-execution-role"></a>

AWS Batch には、Amazon Elastic Container Service (Amazon ECS) エージェントがユーザーに代わって AWS API コールを実行できるようにする実行ロールが必要です。このロールは、Fargate タスクがコンテナイメージをプルし、Amazon CloudWatch にログを書き込む上で必要です。

**信頼ポリシードキュメントを作成する**

最初に、Amazon ECS タスクがロールを引き受けることを許可する信頼ポリシーを作成します。

```
cat > batch-execution-role-trust-policy.json << EOF
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
```

**実行ロールを作成する**

前のステップで作成した信頼ポリシーを使用して、`BatchEcsTaskExecutionRoleTutorial` という名前の IAM ロールを作成するには、次のコマンドを使用します。

```
aws iam create-role \
    --role-name BatchEcsTaskExecutionRoleTutorial \
    --assume-role-policy-document file://batch-execution-role-trust-policy.json
```

**必要なポリシーをアタッチする**

Amazon ECS タスク実行に必要なアクセス許可を提供する AWS マネージドポリシーをアタッチします。

```
aws iam attach-role-policy \
    --role-name BatchEcsTaskExecutionRoleTutorial \
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
```

これで、 AWS Batch Fargate タスク実行のために がロールを使用する準備ができました。

## コンピューティング環境を作成する
<a name="create-a-compute-environment"></a>

コンピューティング環境は、バッチジョブを実行するコンピューティングリソースを定義します。このチュートリアルでは、ジョブの要件に基づいてリソースを自動的にプロビジョニングおよびスケールするマネージド Fargate コンピューティング環境を作成します。

**コンピューティング環境を作成する**

次のコマンドを使用して Fargate コンピューティング環境を作成します。例のサブネット ID とセキュリティグループ ID を [前提条件](#prerequisites) ごとに実際に使用する値に置き換えます。

```
aws batch create-compute-environment \
    --compute-environment-name my-fargate-compute-env \
    --type MANAGED \
    --state ENABLED \
    --compute-resources type=FARGATE,maxvCpus=128,subnets=subnet-a123456b,securityGroupIds=sg-a12b3456
```

コマンドが正常に実行されたときの出力の様子を以下に示します。

```
{
    "computeEnvironmentName": "my-fargate-compute-env",
    "computeEnvironmentArn": "arn:aws:batch:us-west-2:123456789012:compute-environment/my-fargate-compute-env"
}
```

**コンピューティング環境の準備が整うまで待ちます。**

先に進む前に、コンピューティング環境のステータスをチェックして、準備が整っていることを確認します。

```
aws batch describe-compute-environments \
    --compute-environments my-fargate-compute-env \
    --query 'computeEnvironments[0].status'
```

```
"VALID"
```

ステータスが `VALID` と表示されると、コンピューティング環境はジョブを受け入れる準備が整っています。

## ジョブキューを作成する
<a name="cli-create-a-job-queue"></a>

ジョブキューは、ス AWS Batch ケジューラがコンピューティング環境のリソースで実行するまで、送信されたジョブを保存します。ジョブはキュー内の優先順位に従って処理されます。

**ジョブキューを作成する**

次のコマンドは、Fargate コンピューティング環境を使用する優先度 900 のジョブキューを作成します。

```
aws batch create-job-queue \
    --job-queue-name my-fargate-job-queue \
    --state ENABLED \
    --priority 900 \
    --compute-environment-order order=1,computeEnvironment=my-fargate-compute-env
```

コマンドが正常に実行されたときの出力の様子を以下に示します。

```
{
    "jobQueueName": "my-fargate-job-queue",
    "jobQueueArn": "arn:aws:batch:us-west-2:123456789012:job-queue/my-fargate-job-queue"
}
```

**ジョブキューの準備が整っていることを確認します**

ジョブキューが `ENABLED` 状態であり、ジョブを受け入れる準備が整っていることを確認します。

```
aws batch describe-job-queues \
    --job-queues my-fargate-job-queue \
    --query 'jobQueues[0].state' "ENABLED"
```

## ジョブ定義の作成
<a name="cli-create-a-job-definition"></a>

ジョブ定義は、使用する Docker イメージ、リソース要件、その他のパラメータなど、ジョブの実行方法を指定します。Fargate では、従来の vCPU およびメモリパラメータの代わりにリソース要件を使用します。

**ジョブ定義を作成する**

次のコマンドは、ビジーボックスコンテナイメージを使用して単純な「hello world」コマンドを実行するジョブ定義を作成します。を実際の AWS アカウント ID `123456789012`に置き換え、例を独自の ID AWS リージョン に置き換えます。

```
aws batch register-job-definition \
    --job-definition-name my-fargate-job-def \
    --type container \
    --platform-capabilities FARGATE \
    --container-properties '{
        "image": "busybox",
        "resourceRequirements": [
            {"type": "VCPU", "value": "0.25"},
            {"type": "MEMORY", "value": "512"}
        ],
        "command": ["echo", "hello world"],
        "networkConfiguration": {
            "assignPublicIp": "ENABLED"
        },
        "executionRoleArn": "arn:aws:iam::123456789012:role/BatchEcsTaskExecutionRoleTutorial"
    },
{
    "jobDefinitionName": "my-fargate-job-def",
    "jobDefinitionArn": "arn:aws:batch:us-west-2:123456789012:job-definition/my-fargate-job-def:1",
    "revision": 1
}'
```

ジョブ定義は、Fargate タスクの最小リソースである 0.25 vCPU と 512 MB のメモリを指定します。`assignPublicIp` の設定が有効になっているため、コンテナは Docker Hub からビジーボックスイメージをプルできます。

## ジョブを送信し、モニタリングする
<a name="cli-submit-and-monitor-a-job"></a>

必要なコンポーネントがすべて揃ったので、ジョブをキューに送信し、その進行状況をモニタリングできます。

**ジョブを送信する**

次のコマンドは、作成したジョブ定義を使用してジョブをキューに送信します。

```
aws batch submit-job \
    --job-name my-hello-world-job \
    --job-queue my-fargate-job-queue \
    --job-definition my-fargate-job-def
```

コマンドが正常に実行されたときの出力の様子を以下に示します。

```
{
    "jobArn": "arn:aws:batch:us-west-2:123456789012:job/my-hello-world-job",
    "jobName": "my-hello-world-job",
    "jobId": "1509xmpl-4224-4da6-9ba9-1d1acc96431a"
}
```

レスポンスで返された `jobId` を書き留めておきます。これを使用してジョブの進行状況をモニタリングします。

**ジョブステータスをモニタリングする**

ジョブ ID を使用して、ジョブのステータスを確認します。ジョブは、`SUBMITTED`、`PENDING`、`RUNNABLE`、`STARTING`、`RUNNING`、および最後に `SUCCEEDED` または `FAILED` のいくつかの状態を進行します。

```
aws batch describe-jobs --jobs 1509xmpl-4224-4da6-9ba9-1d1acc96431a
```

コマンドが正常に実行されたときの出力の様子を以下に示します。

```
{
    "jobs": [
        {
            "jobArn": "arn:aws:batch:us-west-2:123456789012:job/my-hello-world-job",
            "jobName": "my-hello-world-job",
            "jobId": "1509xmpl-4224-4da6-9ba9-1d1acc96431a",
            "jobQueue": "arn:aws:batch:us-west-2:123456789012:job-queue/my-fargate-job-queue",
            "status": "SUCCEEDED",
            "createdAt": 1705161908000,
            "jobDefinition": "arn:aws:batch:us-west-2:123456789012:job-definition/my-fargate-job-def:1"
        }
    ]
}
```

ステータスが `SUCCEEDED` と表示されると、ジョブは正常に完了しています。

## ジョブ出力を表示する
<a name="cli-view-job-output"></a>

ジョブが完了したら、Amazon CloudWatch Logs でその出力を表示できます。

**ログストリーム名を取得する**

まず、ジョブの詳細からログストリーム名を取得します。ジョブ ID の例を実際に使用する値に置き換えます。

```
aws batch describe-jobs --jobs 1509xmpl-4224-4da6-9ba9-1d1acc96431a \
    --query 'jobs[0].attempts[0].containers[0].logStreamName' \
    --output text
```

```
my-fargate-job-def/default/1509xmpl-4224-4da6-9ba9-1d1acc96431a
```

**ジョブのログを表示する**

ログストリーム名を使用して、CloudWatch Logs からジョブの出力を取得します。

```
aws logs get-log-events \
    --log-group-name /aws/batch/job \
    --log-stream-name my-fargate-job-def/default/1509xmpl-4224-4da6-9ba9-1d1acc96431a \
    --query 'events[*].message' \
    --output text
```

出力には「hello world」と表示され、ジョブが正常に実行されたことを確認できます。

## リソースをクリーンアップする
<a name="cli-clean-up-resources"></a>

このチュートリアルで作成したリソースは、継続的な料金の発生を回避するためにクリーンアップしてください。依存関係の理由により、正しい順序でリソースを削除する必要があります。

**ジョブキューを無効化して削除する**

まず、ジョブキューを無効にして削除します。

```
aws batch update-job-queue \
    --job-queue my-fargate-job-queue \
    --state DISABLED
```

```
aws batch delete-job-queue \
    --job-queue my-fargate-job-queue
```

**コンピューティング環境を無効化して削除する**

ジョブキューが削除されたら、コンピューティング環境を無効化して削除します。

```
aws batch update-compute-environment \
    --compute-environment my-fargate-compute-env \
    --state DISABLED
```

```
aws batch delete-compute-environment \
    --compute-environment my-fargate-compute-env
```

**IAM ロールをクリーンアップする**

ポリシーアタッチメントを削除し、IAM ロールを削除します。

```
aws iam detach-role-policy \
    --role-name BatchEcsTaskExecutionRoleTutorial \
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
```

```
aws iam delete-role \
    --role-name BatchEcsTaskExecutionRoleTutorial
```

**一時ファイルを削除する**

作成した信頼ポリシーファイルを削除します。

```
rm batch-execution-role-trust-policy.json
```

すべてのリソースが正常にクリーンアップされました。

## 本番環境への移行
<a name="cli-going-to-production"></a>

このチュートリアルは、 が Fargate と AWS Batch どのように連携するかを理解するのに役立つように設計されています。本番デプロイでは、次の追加要件を考慮してください。

**セキュリティに関する考慮事項:**
+ デフォルトのセキュリティグループを使用する代わりに、アクセスを必要最低限に抑えた専用セキュリティグループを作成する
+ コンテナのパブリック IP 割り当ての代わりに NAT Gateway でプライベートサブネットを使用する
+ パブリックリポジトリを使用する代わりに Amazon ECR にコンテナイメージを保存する
+ インターネットトラフィックを回避するために AWS 、サービス通信用の VPC エンドポイントを実装する

**アーキテクチャ上の考慮事項:**
+ 可用性を高めるため、複数のアベイラビリティーゾーンにデプロイする
+ エラー処理のためにジョブの再試行戦略とデッドレターキューを実装する
+ ワークロード管理の優先順位が異なる複数のジョブキューを使用する
+ キューの深さとリソース使用率に基づいて自動スケーリングポリシーを設定する
+ ジョブの失敗とリソース使用率のモニタリングとアラートを実装する

**運用上の考慮事項:**
+ モニタリング用の CloudWatch ダッシュボードとアラームを設定する
+ 適切なログ記録と監査証跡を実装する
+ Infrastructure as Code AWS CDK に CloudFormation または を使用する
+ バックアップとディザスタリカバリの手順を策定する

本番環境に対応したアーキテクチャに関する包括的なガイダンスについては、「[AWS Well-Architected フレームワーク](https://aws.amazon.com/architecture/well-architected/)」と「[AWS セキュリティのベストプラクティス](https://aws.amazon.com/architecture/security-identity-compliance/)」を参照してください。

## 次の手順
<a name="cli-next-steps"></a>

このチュートリアルを完了したので、より高度な AWS Batch 機能を調べることができます。
+ [ジョブキュー](job_queues.md) – ジョブキューのスケジュールと優先度管理について説明します。
+ [ジョブ定義](job_definitions.md) – 環境変数、ボリューム、再試行戦略など、高度なジョブ定義設定について説明します。
+ [のコンピューティング環境 AWS Batch](compute_environments.md) – さまざまなコンピューティング環境タイプとスケーリングオプションを理解できます。
+ [マルチノード並列ジョブ](multi-node-parallel-jobs.md) – 複数のコンピューティングノードにまたがるジョブを実行します。
+ [配列ジョブ](array_jobs.md) – 多数の類似ジョブを効率的に送信します。
+ [AWS Batch のベストプラクティス](best-practices.md) – 本番ワークロードの最適化手法について説明します。

# Amazon EKS AWS Batch での の開始方法
<a name="getting-started-eks"></a>

AWS Batch on Amazon EKS は、バッチワークロードを既存の Amazon EKS クラスターにスケジューリングおよびスケーリングするためのマネージドサービスです。ユーザーに代わって Amazon EKS クラスターのライフサイクルオペレーションを作成、管理、または実行 AWS Batch しません。 AWS Batch orchestration は、 によって管理されるノードをスケールアップおよびスケールダウン AWS Batch し、それらのノードでポッドを実行します。

AWS Batch は、Amazon EKS クラスター内の AWS Batch コンピューティング環境に関連付けられていないノード、自動スケーリングノードグループ、またはポッドのライフサイクルには影響しません。が効果的に動作 AWS Batch するには、[サービスにリンクされたロール](using-service-linked-roles.md)に、既存の Amazon EKS クラスターでKubernetesロールベースのアクセスコントロール (RBAC) アクセス許可が必要です。詳細については、「*Kubernetes ドキュメント*」の「[RBAC 認可を使用する](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)」を参照してください。

AWS Batch には、ポッドを AWS Batch ジョブとしてスコープできるKubernetes名前空間が必要です。 AWS Batch ポッドを他のクラスターワークロードから分離するには、専用の名前空間を使用することをお勧めします。

 AWS Batch に RBAC アクセスが付与され、名前空間が確立されたら、[CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html) API オペレーションを使用して、その Amazon EKS クラスターを AWS Batch コンピューティング環境に関連付けることができます。ジョブキューは、この新しい Amazon EKS コンピューティング環境に関連付けることができます。 AWS Batch ジョブは、[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) API オペレーションを使用して Amazon EKS ジョブ定義に基づいてジョブキューに送信されます。 AWS Batch は AWS Batch マネージドノードを起動し、ジョブキューからポッドとしてジョブを AWS Batch コンピューティング環境に関連付けられた EKS Kubernetes クラスターに配置します。

以下のセクションでは、Amazon EKS AWS Batch で をセットアップする方法について説明します。

**Contents**
+ [概要](#getting-started-eks-context)
+ [前提条件](#getting-started-eks-prerequisites)
+ [ステップ 1: 用の Amazon EKS クラスターを作成する AWS Batch](#getting-started-eks-step-0)
+ [ステップ 2: 用の Amazon EKS クラスターを準備する AWS Batch](#getting-started-eks-step-1)
+ [ステップ 3: Amazon EKS コンピューティング環境を作成する](#getting-started-eks-step-2)
+ [ステップ 4: ジョブキューを作成し、コンピューティング環境をアタッチする](#getting-started-eks-step-3)
+ [ステップ 5: ジョブ定義を作成する](#getting-started-eks-step-4)
+ [ステップ 6: ジョブを送信する](#getting-started-eks-step-5)
+ [ステップ 7: ジョブの出力を表示する](#getting-started-eks-step-7)
+ [ステップ 8: (オプション) オーバーライドを含むジョブを送信する](#getting-started-eks-step-6)
+ [ステップ 9: チュートリアルのリソースをクリーンアップする](#getting-started-eks-step-8)
+ [その他のリソース](#getting-started-eks-additional-resources)

## 概要
<a name="getting-started-eks-context"></a>

このチュートリアルでは、、 AWS CLI、`kubectl`および を使用して Amazon EKS AWS Batch で を設定する方法を示します`eksctl`。

**対象者**  
このチュートリアルは、 AWS Batchのセットアップ、テスト、デプロイを担当するシステム管理者とデベロッパーを対象としています。

**使用される機能**  
このチュートリアルでは AWS CLI、 を使用して以下を行う方法を示します。  
+ Amazon EKS コンピューティング環境を作成して設定する
+ ジョブキューの作成。
+ ジョブ定義の作成
+ ジョブを作成して実行する
+ オーバーライドを含むジョブを送信する

**所要時間**  
このチュートリアルを完了するには、約 30～40 分かかります。

**リージョンの制限**  
このソリューションの使用に関連する国やリージョン別の制限はありません。

**リソースの使用コスト**  
 AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装することにより、次の表に記載されるコストの一部またはすべてが発生する可能性があります。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/getting-started-eks.html)

## 前提条件
<a name="getting-started-eks-prerequisites"></a>

このチュートリアルを開始する前に、 と Amazon EKS リソースの両方を作成および管理するために必要な以下のツール AWS Batch とリソースをインストールして設定する必要があります。
+ **AWS CLI** – Amazon EKS など AWS のサービスを操作するためのコマンドラインツールです。このガイドでは、バージョン 2.8.6 以降または 1.26.0 以降の使用を想定しています。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLIのインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。をインストールしたら AWS CLI、 も設定することをお勧めします。詳細については、*AWS Command Line Interface ユーザーガイド*の [`aws configure` を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)を参照してください。
+ **`kubectl`** - Kubernetes クラスターを操作するためのコマンドラインツール。このガイドでは、バージョン `1.23` 以降の使用を想定しています。詳細については、「*Amazon EKS ユーザーガイド*」の「[`kubectl` のインストールまたは更新](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)」を参照してください。
+ **`eksctl`** – Amazon EKS クラスターで多くの個別のタスクを自動化するために使用するコマンドラインツール。このガイドでは、バージョン `0.115.0` 以降の使用を想定しています。詳細については、「**Amazon EKS ユーザーガイド**」の「[`eksctl` のインストールまたは更新](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)」を参照してください。
+ **必要な IAM アクセス許可** – 使用している IAM セキュリティプリンシパルには、Amazon EKS IAM ロールとサービスにリンクされたロール CloudFormation、および VPC と関連するリソースを操作するためのアクセス許可が必要です。詳細については、「*IAM ユーザーガイド*」の「[Actions, resources, and condition keys for Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html)」と「[サービスにリンクされたロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)」を参照してください。このガイドのすべてのステップは 1 つのユーザーとして実行する必要があります。
+ **権限** — [CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html) API オペレーションを呼び出して Amazon EKS リソースを使用するコンピューティング環境を作成するユーザーには、`eks:DescribeCluster` API オペレーションに対する権限が必要です。
+ **AWS アカウント number** – AWS アカウント ID を知る必要があります。「[AWS アカウント ID の表示](https://docs.aws.amazon.com/IAM/latest/UserGuide/console-account-id.html)」の指示に従います。
+ **(オプション) CloudWatch** – [(オプション) [オーバーライドを含むジョブを送信する]](#getting-started-eks-step-6) の詳細を確認するには、ログ記録を設定する必要があります。詳細については、「[CloudWatch Logs を使用して Amazon EKS ジョブ AWS Batch をモニタリングする](batch-eks-cloudwatch-logs.md)」を参照してください。

## ステップ 1: 用の Amazon EKS クラスターを作成する AWS Batch
<a name="getting-started-eks-step-0"></a>

**重要**  
可能な限りシンプルかつ迅速に使用を開始するため、このチュートリアルでは、デフォルトの設定で作成するステップについて説明します。本番での使用に向けて作成する前に、すべての設定内容に習熟した上で、要件を満たす設定でデプロイすることをお勧めします。

前提条件をインストールしたら、`eksctl` を使用してクラスターを作成する必要があります。クラスターの作成には 10～15 分かかる場合があります。

```
$  eksctl create cluster --name my-cluster-name --region region-code
```

上記のコマンドでは:
+ *my-cluster-name* は、使用したいクラスターの名前に置き換えます。
+ *region-code* を に置き換え AWS リージョン て、 などの でクラスターを作成します`us-west-2`。

このチュートリアルの後半では、クラスター名とリージョンが必要です。

## ステップ 2: 用の Amazon EKS クラスターを準備する AWS Batch
<a name="getting-started-eks-step-1"></a>

すべての手順を実行する必要があります。

1. 

**AWS Batch ジョブ専用の名前空間を作成する**

   `kubectl` を使用して新しい名前空間を作成します。

   ```
   $ namespace=my-aws-batch-namespace
   ```

   ```
   $ cat - <<EOF | kubectl create -f -
   {
     "apiVersion": "v1",
     "kind": "Namespace",
     "metadata": {
       "name": "${namespace}",
       "labels": {
         "name": "${namespace}"
       }
     }
   }
   EOF
   ```

   出力:

   ```
   namespace/my-aws-batch-namespace created
   ```

1. 

**ロールベースアクセス制御 (RBAC) を有効にします。**

   `kubectl` を使用してクラスターのKubernetesロールを作成し、 AWS Batch がノードとポッドを監視し、ロールをバインドできるようにします。これを EKS クラスターごとに 1 回実行する必要があります。

   ```
   $ cat - <<EOF | kubectl apply -f -
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRole
   metadata:
     name: aws-batch-cluster-role
   rules:
     - apiGroups: [""]
       resources: ["namespaces"]
       verbs: ["get"]
     - apiGroups: [""]
       resources: ["nodes"]
       verbs: ["get", "list", "watch"]
     - apiGroups: [""]
       resources: ["pods"]
       verbs: ["get", "list", "watch"]
     - apiGroups: [""]
       resources: ["events"]
       verbs: ["list"]
     - apiGroups: [""]
       resources: ["configmaps"]
       verbs: ["get", "list", "watch"]
     - apiGroups: ["apps"]
       resources: ["daemonsets", "deployments", "statefulsets", "replicasets"]
       verbs: ["get", "list", "watch"]
     - apiGroups: ["rbac.authorization.k8s.io"]
       resources: ["clusterroles", "clusterrolebindings"]
       verbs: ["get", "list"]
   ---
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRoleBinding
   metadata:
     name: aws-batch-cluster-role-binding
   subjects:
   - kind: User
     name: aws-batch
     apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: ClusterRole
     name: aws-batch-cluster-role
     apiGroup: rbac.authorization.k8s.io
   EOF
   ```

   出力:

   ```
   clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created
   clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
   ```

1. の名前空間スコープKubernetesロールを作成して、ポッド AWS Batch を管理およびライフサイクルし、バインドします。これは固有の名前空間ごとに 1 回行う必要があります。

   ```
   $ namespace=my-aws-batch-namespace
   ```

   ```
   $ cat - <<EOF | kubectl apply -f - --namespace "${namespace}"
   apiVersion: rbac.authorization.k8s.io/v1
   kind: Role
   metadata:
     name: aws-batch-compute-environment-role
     namespace: ${namespace}
   rules:
     - apiGroups: [""]
       resources: ["pods"]
       verbs: ["create", "get", "list", "watch", "delete", "patch"]
     - apiGroups: [""]
       resources: ["serviceaccounts"]
       verbs: ["get", "list"]
     - apiGroups: ["rbac.authorization.k8s.io"]
       resources: ["roles", "rolebindings"]
       verbs: ["get", "list"]
   ---
   apiVersion: rbac.authorization.k8s.io/v1
   kind: RoleBinding
   metadata:
     name: aws-batch-compute-environment-role-binding
     namespace: ${namespace}
   subjects:
   - kind: User
     name: aws-batch
     apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: Role
     name: aws-batch-compute-environment-role
     apiGroup: rbac.authorization.k8s.io
   EOF
   ```

   出力:

   ```
   role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created
   rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
   ```

1. Kubernetes `aws-auth` 設定マップを更新して、前述の RBAC アクセス許可を AWS Batch サービスにリンクされたロールにマッピングします。

   以下のコマンドで、下記のような置き換えを行います。
   + *<your-account-number>* を AWS アカウント 番号に置き換えます。

   ```
   $ eksctl create iamidentitymapping \
       --cluster my-cluster-name \
       --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \
       --username aws-batch
   ```

   出力:

   ```
   2022-10-25 20:19:57 [ℹ]  adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMap
   ```
**注記**  
パス `aws-service-role/batch.amazonaws.com/` が、サービスにリンクされたロールの ARN から削除されました。これは `aws-auth` 設定マップに問題があるためです。詳細については、「[Roles with paths don't work when the path is included in their ARN in the aws-authconfigmap](https://github.com/kubernetes-sigs/aws-iam-authenticator/issues/268)」を参照してください。

## ステップ 3: Amazon EKS コンピューティング環境を作成する
<a name="getting-started-eks-step-2"></a>

AWS Batch コンピューティング環境は、バッチワークロードのニーズに合わせてコンピューティングリソースパラメータを定義します。マネージド型のコンピューティング環境 AWS Batch では、Amazon EKS クラスター内のコンピューティングリソース (Kubernetes ノード) の容量とインスタンスタイプを管理できます。これは、コンピューティング環境の作成時に定義するコンピューティングリソースの仕様に基づいています。EC2 オンデマンドインスタンスまたは EC2 スポットインスタンスを選択できます。

**AWSServiceRoleForBatch** サービスにリンクされたロールが Amazon EKS クラスターにアクセスできるようになったので、 AWS Batch リソースを作成できます。まず、Amazon EKS クラスターを指すコンピューティング環境を作成します。
+ `subnets` で `eksctl get cluster my-cluster-name` を実行し、クラスターで使用されるサブネットを取得します。
+ `securityGroupIds` パラメータには、Amazon EKS クラスターと同じセキュリティグループを使用できます。このコマンドは、クラスターのセキュリティグループ ID を取得します。

  ```
  $ aws eks describe-cluster \
      --name my-cluster-name \
      --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  ```
+ `instanceRole` は、クラスターの作成時に作成されます。`AmazonEKSWorkerNodePolicy` ポリシーを使用するすべてのエンティティをリストした `instanceRole` を検索するには: 

  ```
  $  aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
  ```

  ポリシーロールの名前には、`eksctl-my-cluster-name-nodegroup-example` を作成したクラスターの名前が含まれます。

  `instanceRole` の ARN を検索するには、以下のコマンドを実行します。

  ```
  $  aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-example        
  ```

  出力:

  ```
  INSTANCEPROFILES        arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12example
  ```

  詳しくは、「*Amazon EKS ユーザーガイド*」の「[Amazon EKS ノード IAM ロールの作成](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html#create-worker-node-role)」と「[クラスターへの IAM プリンシパルアクセスを有効にする](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)」を参照してください。ポッドネットワークを使用している場合は、「**Amazon EKS ユーザーガイド**」の「[サービスアカウントで IAM ロールを使用するための Kubernetes の Amazon VPC CNI プラグインを設定する](https://docs.aws.amazon.com/eks/latest/userguide/cni-iam-role.html)」を参照してください。

```
$ cat <<EOF > ./batch-eks-compute-environment.json
{
  "computeEnvironmentName": "My-Eks-CE1",
  "type": "MANAGED",
  "state": "ENABLED",
  "eksConfiguration": {
    "eksClusterArn": "arn:aws:eks:region-code:your-account-number:cluster/my-cluster-name",
    "kubernetesNamespace": "my-aws-batch-namespace"
  },
  "computeResources": {
    "type": "EC2",
    "allocationStrategy": "BEST_FIT_PROGRESSIVE",
    "minvCpus": 0,
    "maxvCpus": 128,
    "instanceTypes": [
        "m5"
    ],
    "subnets": [
        "<eks-cluster-subnets-with-access-to-internet-for-image-pull>"
    ],
    "securityGroupIds": [
        "<eks-cluster-sg>"
    ],
    "instanceRole": "<eks-instance-profile>"
  }
}
EOF
```

```
$ aws batch create-compute-environment --cli-input-json file://./batch-eks-compute-environment.json
```

**注意事項**
+ Amazon EKS コンピューティング環境のメンテナンスは共同責任です。詳細については、「[Kubernetes ノードの責任分担](eks-ce-shared-responsibility.md)」を参照してください。

## ステップ 4: ジョブキューを作成し、コンピューティング環境をアタッチする
<a name="getting-started-eks-step-3"></a>

**重要**  
処理を進める前に、コンピューティング環境が正常であることを確認することが重要です。これには [DescribeComputeEnvironments](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeComputeEnvironments.html) API オペレーションを使用できます。  

```
$ aws batch describe-compute-environments --compute-environments My-Eks-CE1
```
`status` パラメータが `INVALID` ではないことを確認してください。そうであれば、`statusReason` パラメータを調べて原因を調べてください。詳細については、「[トラブルシューティング AWS Batch](troubleshooting.md)」を参照してください。

この新しいジョブキューに送信されたジョブは、コンピューティング環境に関連付けられている Amazon EKS クラスターに参加した AWS Batch マネージドノードでポッドとして実行されます。

```
$ cat <<EOF > ./batch-eks-job-queue.json
 {
    "jobQueueName": "My-Eks-JQ1",
    "priority": 10,
    "computeEnvironmentOrder": [
      {
        "order": 1,
        "computeEnvironment": "My-Eks-CE1"
      }
    ]
  }
EOF
```

```
$ aws batch create-job-queue --cli-input-json file://./batch-eks-job-queue.json
```

## ステップ 5: ジョブ定義を作成する
<a name="getting-started-eks-step-4"></a>

次のジョブ定義は、ポッドに 60 秒間スリープするように指示します。

```
$ cat <<EOF > ./batch-eks-job-definition.json
{
  "jobDefinitionName": "MyJobOnEks_Sleep",
  "type": "container",
  "eksProperties": {
    "podProperties": {
      "hostNetwork": true,
      "containers": [
        {
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "sleep",
            "60"
          ],
          "resources": {
            "limits": {
              "cpu": "1",
              "memory": "1024Mi"
            }
          }
        }
      ],
      "metadata": {
        "labels": {
          "environment": "test"
        }
      }
    }
  }
}
EOF
```

```
$ aws batch register-job-definition --cli-input-json file://./batch-eks-job-definition.json
```

**注意事項**
+ `cpu` および `memory` パラメータには考慮事項があります。詳細については、「[Amazon EKS の AWS Batch におけるメモリと vCPU に関する考慮事項](memory-cpu-batch-eks.md)」を参照してください。

## ステップ 6: ジョブを送信する
<a name="getting-started-eks-step-5"></a>

次の AWS CLI コマンドを実行して、新しいジョブを送信します。

```
$ aws batch submit-job --job-queue My-Eks-JQ1 \
    --job-definition MyJobOnEks_Sleep --job-name My-Eks-Job1
```

ジョブのステータスを確認するには:

```
$ aws batch describe-jobs --job <jobId-from-submit-response>
```

**注意事項**
+ Amazon EKS リソースでのジョブ実行の詳細については、[Amazon EKS ジョブ](eks-jobs.md) を参照してください。

## ステップ 7: ジョブの出力を表示する
<a name="getting-started-eks-step-7"></a>

ジョブの出力を表示するには、以下を実行します。

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

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

1. **[ジョブキュー]** ドロップダウンで、チュートリアル用に作成したジョブキューを選択します。

1. **[ジョブ]** テーブルには、すべてのジョブとその現在のステータスが一覧表示されます。ジョブの **[ステータス]** が **[成功]** したら、ジョブの **[名前]**、*[My-Eks-JQ1]* を選択してジョブの詳細を表示します。

1. **[詳細]** ペインでは、**[開始時刻]** と **[停止時刻]** を 1 分間隔で指定する必要があります。

## ステップ 8: (オプション) オーバーライドを含むジョブを送信する
<a name="getting-started-eks-step-6"></a>

このジョブは、コンテナに渡されたコマンドを上書きします。 は、ジョブの完了後にポッドを AWS Batch 厳しくクリーンアップして、 への負荷を軽減しますKubernetes。ジョブの詳細を確認するには、ログ記録を設定する必要があります。詳細については、「[CloudWatch Logs を使用して Amazon EKS ジョブ AWS Batch をモニタリングする](batch-eks-cloudwatch-logs.md)」を参照してください。

```
$ cat <<EOF > ./submit-job-override.json
{
  "jobName": "EksWithOverrides",
  "jobQueue": "My-Eks-JQ1",
  "jobDefinition": "MyJobOnEks_Sleep",
  "eksPropertiesOverride": {
    "podProperties": {
      "containers": [
        {
          "command": [
            "/bin/sh"
          ],
          "args": [
            "-c",
            "echo hello world"
          ]
        }
      ]
    }
  }
}
EOF
```

```
$ aws batch submit-job --cli-input-json file://./submit-job-override.json
```

**注意事項**
+ 操作の詳細を把握しやすくするには、Amazon EKS コントロールプレーンのログ記録を有効にします。詳細については、「*Amazon EKS ユーザーガイド*」の「[Amazon EKS コントロールプレーンのログ](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html)」を参照してください。
+ Daemonsets と kubelets オーバーヘッドは、使用可能な vCPU とメモリのリソース、特にスケーリングとジョブの配置に影響します。詳細については、「[Amazon EKS の AWS Batch におけるメモリと vCPU に関する考慮事項](memory-cpu-batch-eks.md)」を参照してください。

ジョブの出力を表示するには、以下を実行します。

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

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

1. **[ジョブキュー]** ドロップダウンで、チュートリアル用に作成したジョブキューを選択します。

1. **[ジョブ]** テーブルには、すべてのジョブとその現在のステータスが一覧表示されます。ジョブの **[ステータス]** が **[成功]** であれば、ジョブの **[名前]** を選択してジョブの詳細を表示します。

1. **[詳細]** ペインで、**ログストリーム名**を選択します。ジョブの CloudWatch コンソールが開き、`hello world` の **[メッセージ]** またはカスタムメッセージを含むイベントが 1 つあるはずです。

## ステップ 9: チュートリアルのリソースをクリーンアップする
<a name="getting-started-eks-step-8"></a>

Amazon EC2 インスタンスが有効になっている間は課金されます。インスタンスを削除して、料金の発生を停止できます。

作成したリソースを削除するには、次の作業を行います。

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

1. ナビゲーションペインで **[ジョブキュー]** を選択します。

1. **[ジョブキュー]** テーブルで、チュートリアル用に作成したジョブキューを選択します。

1. **[Disable]** (無効化) を選択します。ジョブキューの **[状態]** が無効になったら、**[削除]** を選択できます。

1. ジョブキューが削除されたら、ナビゲーションペインで **[コンピューティング環境]** を選択します。

1. このチュートリアル用に作成したコンピューティング環境を選択し、**[無効化]** を選択します。コンピューティング環境が無効になるまでに 1～2 分かかる場合があります。

1. コンピューティング環境の **[状態]** が無効になったら、**[削除]** を選択します。コンピューティング環境が削除されるまでに 1～2 分かかる場合があります。

## その他のリソース
<a name="getting-started-eks-additional-resources"></a>

チュートリアルが完了したら、次のトピックを試すことができます。
+ [ベストプラクティス](best-practices.md)について詳しく説明します。
+  AWS Batch コアコンポーネントについて説明します。詳細については、「[のコンポーネント AWS Batch](batch_components.md)」を参照してください。
+  AWS Batchで使用できるさまざまな[コンピューティング環境](compute_environments.md)について説明します。
+ [[ジョブキュー]](job_queues.md) とそのさまざまなスケジューリングオプションについて詳しく説明します。
+ [[ジョブ定義]](job_definitions.md) とそのさまざまな設定オプションについて詳しく説明します。
+ さまざまなタイプの [[ジョブ]](jobs.md) について詳しく説明します。

# Amazon EKS プライベートクラスター AWS Batch での の開始方法
<a name="getting-started-eks-privateclusters"></a>

AWS Batch は、Amazon Elastic Kubernetes Service (Amazon EKS) クラスター内のバッチワークロードをオーケストレーションするマネージドサービスです。このサービスにはキューイング、依存関係の追跡、ジョブの再試行と優先順位の管理、ポッド管理、ノードスケーリングが含まれます。この機能は、既存のプライベート Amazon EKS クラスターを に接続 AWS Batch して、大規模なジョブを実行します。(Amazon EKS の[https://eksctl.io/usage/eks-private-cluster/](https://eksctl.io/usage/eks-private-cluster/)コマンドラインインターフェイス）、 AWS コンソール、または [AWS Command Line Interface](https://aws.amazon.com/cli/) を使用して、他のすべての必要なリソースを含むプライベート Amazon EKS クラスターを作成できます。

[Amazon EKS プライベート専用クラスター](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html#private-access)には、デフォルトではインバウンド/アウトバウンドインターネットアクセスがなく、VPC 内または接続されたネットワーク内からのみ API サーバーにアクセスできます。他の AWS サービスへのプライベートアクセスを有効にするには Amazon VPC エンドポイントを使用します。`eksctl` は既存の Amazon VPC とサブネットを使用した完全なプライベートクラスターの作成をサポートします。`eksctl` はまた、提供された Amazon VPC に Amazon VPC エンドポイントを作成し、提供されたサブネットのルートテーブルを変更します。

`eksctl` はメインルートテーブルを変更しないため、各サブネットには明示的に関連付けられたルートテーブルが必要です。[クラスター](#getting-started-eks-privateclusters)は Amazon VPC 内のコンテナレジストリからイメージを取得する必要があります。Amazon VPC 内に Amazon Elastic Container Registry を作成し、そこにコンテナイメージをコピーしてノードの取得元にすることもできます。詳細については、「[あるリポジトリから別のリポジトリにコンテナイメージをコピーする](https://docs.aws.amazon.com/eks/latest/userguide/copy-image-to-repository.html)」を参照してください。Amazon ECR のプライベートリポジトリの使用を開始するには、「[Amazon ECR private repositories](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html)」を参照してください。

必要に応じて、Amazon ECR を使用して[プルスルーキャッシュルール](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html)を作成することもできます。外部パブリックレジストリのプルスルーキャッシュルールを作成したら、Amazon ECR プライベートレジストリの URI を使用して、その外部パブリックレジストリからイメージをプルできます。その後、Amazon ECR でリポジトリが作成され、イメージがキャッシュされます。キャッシュされたイメージが Amazon ECR プライベートレジストリ URI を使用してプルされると、Amazon ECR はリモートレジストリをチェックしてイメージの新しいバージョンがあるかどうかを確認し、24 時間ごとに最大 1 回、プライベートレジストリを更新します。

**Contents**
+ [概要](#getting-started-eks-context)
+ [前提条件](#getting-started-eks-privateclusters-prerequisites)
+ [ステップ 1: の EKS クラスターを作成する AWS Batch](#getting-started-eks-privateclusters-step-0)
+ [ステップ 2: 用の EKS クラスターを準備する AWS Batch](#getting-started-eks-privateclusters-step-1)
+ [ステップ 3: Amazon EKS コンピューティング環境を作成する](#getting-started-eks-privateclusters-2)
+ [ステップ 4: ジョブキューを作成し、コンピューティング環境をアタッチする](#getting-started-eks-privateclusters-step-3)
+ [ステップ 5: プルスルーキャッシュを使用して Amazon ECR を作成する](#getting-started-eks-privateclusters-step-ecr)
+ [ステップ 6: ジョブ定義を登録する](#getting-started-eks-privateclusters-step-4)
+ [ステップ 7: ジョブ実行を送信する](#getting-started-eks-privateclusters-step-5)
+ [ステップ 8: ジョブの出力を表示する](#getting-started-eks-privateclusters-step-7)
+ [ステップ 9: (オプション) オーバーライドを含むジョブを送信する](#getting-started-eks-privateclusters-step-6)
+ [ステップ 10: チュートリアルのリソースをクリーンアップする](#getting-started-eks-privateclusters-step-8)
+ [その他のリソース](#getting-started-eks-additional-resources)
+ [トラブルシューティング](#getting-started-eks-privateclusters-troubleshooting)

## 概要
<a name="getting-started-eks-context"></a>

このチュートリアルでは、、 AWS CloudShell、`kubectl`および を使用してプライベート Amazon EKS AWS Batch で を設定する方法を示します`eksctl`。

**対象者**  
このチュートリアルは、 AWS Batchのセットアップ、テスト、デプロイを担当するシステム管理者とデベロッパーを対象としています。

**使用される機能**  
このチュートリアルでは AWS CLI、 を使用して以下を行う方法を示します。  
+ Amazon Elastic Container Registry (Amazon ECR) を使用してコンテナイメージを保存する 
+ Amazon EKS コンピューティング環境を作成して設定する
+ ジョブキューの作成。
+ ジョブ定義の作成
+ ジョブを作成して実行する
+ オーバーライドを含むジョブを送信する

**所要時間**  
このチュートリアルを完了するには、約 40～50 分かかります。

**リージョンの制限**  
このソリューションの使用に関連する国やリージョン別の制限はありません。

**リソースの使用コスト**  
 AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装することにより、次の表に記載されるコストの一部またはすべてが発生する可能性があります。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/getting-started-eks-privateclusters.html)

## 前提条件
<a name="getting-started-eks-privateclusters-prerequisites"></a>

このチュートリアルでは、 AWS CloudShell から直接起動するブラウザベースの事前認証済みシェルである を使用します AWS マネジメントコンソール。これにより、パブリックインターネットアクセスがなくなると、クラスターにアクセスできます。 AWS CLI、`kubectl`、および は、 の一部として既にインストールされている`eksctl`場合があります AWS CloudShell。詳細については AWS CloudShell、[AWS CloudShell*「 ユーザーガイド*](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)」を参照してください。代わりに AWS CloudShell 、クラスターの VPC または[接続されたネットワークに接続](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/introduction.html)します。

kubectl コマンドを実行するには Amazon EKS クラスターへのプライベートアクセスが必要です。つまり、クラスター API サーバーへのすべてのトラフィックは、クラスターの VPC または接続されたネットワーク内から送信する必要があります。
+ **AWS CLI** – Amazon EKS を含む AWS のサービスを操作するためのコマンドラインツール。このガイドでは、バージョン 2.8.6 以降または 1.26.0 以降の使用を想定しています。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLIのインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。をインストールしたら AWS CLI、 も設定することをお勧めします。詳細については、*AWS Command Line Interface ユーザーガイド*の [`aws configure` を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)を参照してください。
+ **`kubectl`** - Kubernetes クラスターを操作するためのコマンドラインツール。このガイドでは、バージョン `1.23` 以降の使用を想定しています。詳細については、「*Amazon EKS ユーザーガイド*」の「[`kubectl` のインストールまたは更新](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)」を参照してください。
+ **`eksctl`** – Amazon EKS クラスターで多くの個別のタスクを自動化するために使用するコマンドラインツール。このガイドでは、バージョン `0.115.0` 以降の使用を想定しています。詳細については、「**Amazon EKS ユーザーガイド**」の「[`eksctl` のインストールまたは更新](https://eksctl.io/installation/)」を参照してください。
+ **権限** – [CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html) API オペレーションを呼び出して Amazon EKS リソースを使用するコンピューティング環境を作成するユーザーには、`eks:DescribeCluster` および `eks:ListClusters` API オペレーションに対する権限が必要です。[AWSBatchFullAccess](batch_managed_policies.md) マネージドポリシーをユーザーアカウントにアタッチするには、「*IAM ユーザーガイド*」の「[IAM ID アクセス許可の追加と削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」の指示に従います。
+ **InstanceRole** – `AmazonEKSWorkerNodePolicy` および `AmazonEC2ContainerRegistryPullOnly` ポリシーを持つ Amazon EKS ノードの `InstanceRole` を作成する必要があります。`InstanceRole` の作成方法については、「[Amazon EKS ノード IAM ロールの作成](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html#create-worker-node-role)」を参照してください。`InstanceRole` の ARN が必要です。
+ **AWS アカウント ID** – AWS アカウント ID を知る必要があります。[AWS アカウント 「ID の表示](https://docs.aws.amazon.com/IAM/latest/UserGuide/console-account-id.html)」の指示に従います。
+ **(オプション) CloudWatch** – [(オプション) [オーバーライドを含むジョブを送信する]](getting-started-eks.md#getting-started-eks-step-6) の詳細を確認するには、ログ記録を設定する必要があります。詳細については、「[CloudWatch Logs を使用して Amazon EKS ジョブ AWS Batch をモニタリングする](batch-eks-cloudwatch-logs.md)」を参照してください。

## ステップ 1: の EKS クラスターを作成する AWS Batch
<a name="getting-started-eks-privateclusters-step-0"></a>

**重要**  
可能な限りシンプルかつ迅速に使用を開始するため、このチュートリアルでは、デフォルトの設定で作成するステップについて説明します。本番での使用に向けて作成する前に、すべての設定内容に習熟した上で、要件を満たす設定でデプロイすることをお勧めします。

クラスターを作成するには、`eksctl` と次の設定ファイルを使用することをお勧めします。クラスターを手動でセットアップするには、「*Amazon EKS ユーザーガイド*」の「[インターネットアクセスが制限されたプライベートクラスターをデプロイする](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html)」の指示に従います。

1. [[AWS CloudShell コンソール]](https://console.aws.amazon.com/cloudshell/home) を開き、リージョンを [`us-east-1`] に設定します。チュートリアルの残りの部分では、`us-east-1` を使用していることを確認してください。

1. サンプルの `eksctl` 設定ファイルを使用して `us-east-1` リージョンにプライベート EKS クラスターを作成します。yaml ファイルを AWS CloudShell 環境に保存し、`clusterConfig.yaml` という名前を付けます。*[my-test-cluster]* は、クラスターに使用する名前で変更できます。

   ```
   kind: ClusterConfig 
   apiVersion: eksctl.io/v1alpha5
   metadata:
       name: my-test-cluster 
       region: us-east-1
   availabilityZones: 
       - us-east-1a 
       - us-east-1b 
       - us-east-1c
   managedNodeGroups:
       - name: ng-1
         privateNetworking: true 
   privateCluster: 
       enabled: true 
       skipEndpointCreation: false
   ```

1. `eksctl create cluster -f clusterConfig.yaml` のコマンドを使用してリソースを作成します。クラスターの作成には、10～15 分かかる場合があります。

1. クラスターの作成が完了したら、 AWS CloudShell IP アドレスを許可リストに追加する必要があります。 AWS CloudShell IP アドレスを検索するには、次のコマンドを実行します。

   ```
   curl http://checkip.amazonaws.com
   ```

   パブリック IP アドレスを取得したら、許可リストルールを作成する必要があります。

   ```
   aws eks update-cluster-config \
     --name my-test-cluster \
     --region us-east-1 \
     --resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true,publicAccessCidrs=["<Public IP>/32"]
   ```

   次に、kubectl 設定ファイルに更新を適用します。

   ```
   aws eks update-kubeconfig --name my-test-cluster --region us-east-1
   ```

1. ノードにアクセスできることをテストするには、次のコマンドを実行します。

   ```
   kubectl get nodes
   ```

   コマンドの出力:

   ```
   NAME                              STATUS   ROLES    AGE     VERSION
   ip-192-168-107-235.ec2.internal   Ready    none     1h   v1.32.3-eks-473151a
   ip-192-168-165-40.ec2.internal    Ready    none     1h   v1.32.3-eks-473151a
   ip-192-168-98-54.ec2.internal     Ready    none     1h   v1.32.1-eks-5d632ec
   ```

## ステップ 2: 用の EKS クラスターを準備する AWS Batch
<a name="getting-started-eks-privateclusters-step-1"></a>

すべてのステップが必要であり、 で実行する必要があります AWS CloudShell。

1. 

**AWS Batch ジョブ専用の名前空間を作成する**

   `kubectl` を使用して新しい名前空間を作成します。

   ```
   $ namespace=my-aws-batch-namespace
   ```

   ```
   $ cat - <<EOF | kubectl create -f -
   {
     "apiVersion": "v1",
     "kind": "Namespace",
     "metadata": {
       "name": "${namespace}",
       "labels": {
         "name": "${namespace}"
       }
     }
   }
   EOF
   ```

   出力:

   ```
   namespace/my-aws-batch-namespace created
   ```

1. 

**ロールベースアクセス制御 (RBAC) を有効にします。**

   `kubectl` を使用して、クラスターの Kubernetes ロールを作成すると、 AWS Batch はノードとポッドを監視したり、ロールをバインドしたりできるようになります。これを Amazon EKS クラスターごとに 1 回実行する必要があります。

   ```
   $ cat - <<EOF | kubectl apply -f -
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRole
   metadata:
     name: aws-batch-cluster-role
   rules:
     - apiGroups: [""]
       resources: ["namespaces"]
       verbs: ["get"]
     - apiGroups: [""]
       resources: ["nodes"]
       verbs: ["get", "list", "watch"]
     - apiGroups: [""]
       resources: ["pods"]
       verbs: ["get", "list", "watch"]
     - apiGroups: [""]
       resources: ["events"]
       verbs: ["list"]
     - apiGroups: [""]
       resources: ["configmaps"]
       verbs: ["get", "list", "watch"]
     - apiGroups: ["apps"]
       resources: ["daemonsets", "deployments", "statefulsets", "replicasets"]
       verbs: ["get", "list", "watch"]
     - apiGroups: ["rbac.authorization.k8s.io"]
       resources: ["clusterroles", "clusterrolebindings"]
       verbs: ["get", "list"]
   ---
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRoleBinding
   metadata:
     name: aws-batch-cluster-role-binding
   subjects:
   - kind: User
     name: aws-batch
     apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: ClusterRole
     name: aws-batch-cluster-role
     apiGroup: rbac.authorization.k8s.io
   EOF
   ```

   出力:

   ```
   clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created
   clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
   ```

   の名前空間スコープKubernetesロールを作成して、ポッド AWS Batch を管理およびライフサイクルし、バインドします。これは固有の名前空間ごとに 1 回行う必要があります。

   ```
   $ namespace=my-aws-batch-namespace
   ```

   ```
   $ cat - <<EOF | kubectl apply -f - --namespace "${namespace}"
   apiVersion: rbac.authorization.k8s.io/v1
   kind: Role
   metadata:
     name: aws-batch-compute-environment-role
     namespace: ${namespace}
   rules:
     - apiGroups: [""]
       resources: ["pods"]
       verbs: ["create", "get", "list", "watch", "delete", "patch"]
     - apiGroups: [""]
       resources: ["serviceaccounts"]
       verbs: ["get", "list"]
     - apiGroups: ["rbac.authorization.k8s.io"]
       resources: ["roles", "rolebindings"]
       verbs: ["get", "list"]
   ---
   apiVersion: rbac.authorization.k8s.io/v1
   kind: RoleBinding
   metadata:
     name: aws-batch-compute-environment-role-binding
     namespace: ${namespace}
   subjects:
   - kind: User
     name: aws-batch
     apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: Role
     name: aws-batch-compute-environment-role
     apiGroup: rbac.authorization.k8s.io
   EOF
   ```

   出力:

   ```
   role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created
   rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
   ```

   Kubernetes `aws-auth` 設定マップを更新して、前述の RBAC アクセス許可を AWS Batch サービスにリンクされたロールにマッピングします。

   ```
   $ eksctl create iamidentitymapping \
       --cluster my-test-cluster \
       --arn "arn:aws:iam::<your-account-ID>:role/AWSServiceRoleForBatch" \
       --username aws-batch
   ```

   出力:

   ```
   2022-10-25 20:19:57 [ℹ]  adding identity "arn:aws:iam::<your-account-ID>:role/AWSServiceRoleForBatch" to auth ConfigMap
   ```
**注記**  
パス `aws-service-role/batch.amazonaws.com/` が、サービスにリンクされたロールの ARN から削除されました。これは `aws-auth` 設定マップに問題があるためです。詳細については、「[Roles with paths don't work when the path is included in their ARN in the aws-authconfigmap](https://github.com/kubernetes-sigs/aws-iam-authenticator/issues/268)」を参照してください。

## ステップ 3: Amazon EKS コンピューティング環境を作成する
<a name="getting-started-eks-privateclusters-2"></a>

AWS Batch コンピューティング環境は、バッチワークロードのニーズに合わせてコンピューティングリソースパラメータを定義します。マネージド型のコンピューティング環境 AWS Batch では、Amazon EKS クラスター内のコンピューティングリソース (Kubernetes ノード) の容量とインスタンスタイプを管理できます。これは、コンピューティング環境の作成時に定義するコンピューティングリソースの仕様に基づいています。EC2 オンデマンドインスタンスまたは EC2 スポットインスタンスを選択できます。

**AWSServiceRoleForBatch** サービスにリンクされたロールが Amazon EKS クラスターにアクセスできるようになったので、 AWS Batch リソースを作成できます。まず、Amazon EKS クラスターを指すコンピューティング環境を作成します。
+ `subnets` で `eksctl get cluster my-test-cluster` を実行し、クラスターで使用されるサブネットを取得します。
+ `securityGroupIds` パラメータには、Amazon EKS クラスターと同じセキュリティグループを使用できます。このコマンドは、クラスターのセキュリティグループ ID を取得します。

  ```
  $ aws eks describe-cluster \
      --name my-test-cluster \
      --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  ```
+ 前提条件で作成した `instanceRole` の ARN を使用します。

```
$ cat <<EOF > ./batch-eks-compute-environment.json
{
  "computeEnvironmentName": "My-Eks-CE1",
  "type": "MANAGED",
  "state": "ENABLED",
  "eksConfiguration": {
    "eksClusterArn": "arn:aws:eks:us-east-1:<your-account-ID>:cluster/my-test-cluster",
    "kubernetesNamespace": "my-aws-batch-namespace"
  },
  "computeResources": {
    "type": "EC2",
    "allocationStrategy": "BEST_FIT_PROGRESSIVE",
    "minvCpus": 0,
    "maxvCpus": 128,
    "instanceTypes": [
        "m5"
    ],
    "subnets": [
        "<eks-cluster-subnets-with-access-to-the-image-for-image-pull>"
    ],
    "securityGroupIds": [
        "<eks-cluster-sg>"
    ],
    "instanceRole": "<eks-instance-profile>"
  }
}
EOF
```

```
$ aws batch create-compute-environment --cli-input-json file://./batch-eks-compute-environment.json
```

**注意事項**
+ Amazon EKS コンピューティング環境のメンテナンスは共同責任です。詳細については「[Amazon EKS のセキュリティ](https://docs.aws.amazon.com/eks/latest/userguide/security.html)」をご参照ください。

## ステップ 4: ジョブキューを作成し、コンピューティング環境をアタッチする
<a name="getting-started-eks-privateclusters-step-3"></a>

**重要**  
処理を進める前に、コンピューティング環境が正常であることを確認することが重要です。これには [DescribeComputeEnvironments](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeComputeEnvironments.html) API オペレーションを使用できます。  

```
$ aws batch describe-compute-environments --compute-environments My-Eks-CE1
```
`status` パラメータが `INVALID` ではないことを確認してください。そうであれば、`statusReason` パラメータを調べて原因を調べてください。詳細については、「[トラブルシューティング AWS Batch](troubleshooting.md)」を参照してください。

この新しいジョブキューに送信されたジョブは、コンピューティング環境に関連付けられている Amazon EKS クラスターに参加した AWS Batch マネージドノードでポッドとして実行されます。

```
$ cat <<EOF > ./batch-eks-job-queue.json
 {
    "jobQueueName": "My-Eks-JQ1",
    "priority": 10,
    "computeEnvironmentOrder": [
      {
        "order": 1,
        "computeEnvironment": "My-Eks-CE1"
      }
    ]
  }
EOF
```

```
$ aws batch create-job-queue --cli-input-json file://./batch-eks-job-queue.json
```

## ステップ 5: プルスルーキャッシュを使用して Amazon ECR を作成する
<a name="getting-started-eks-privateclusters-step-ecr"></a>

クラスターにはパブリックインターネットアクセスがないため、コンテナイメージ用の Amazon ECR を作成する必要があります。以下の手順では、イメージを保存するプルスルーキャッシュルールを使用して Amazon ECR を作成します。

1. 次のコマンドを使用してプルスルーキャッシュルールを作成します。*[tutorial-prefix]* は別のプレフィックスに置き換えることができます。

   ```
   aws ecr create-pull-through-cache-rule \
       --ecr-repository-prefix "my-prefix" \
       --upstream-registry-url "public.ecr.aws" \
       --region us-east-1
   ```

1. パブリック ECR で認証します。

   ```
   aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <your-account-ID>.dkr.ecr.us-east-1.amazonaws.com
   ```

   これで、イメージをプルできます。

   ```
   docker pull <your-account-ID>.dkr.ecr.us-east-1.amazonaws.com/my-prefix/amazonlinux/amazonlinux:2
   ```

1. リポジトリとイメージを確認するには、次のコマンドを実行します。

   ```
   aws ecr describe-repositories
   ```

   ```
   aws ecr describe-images --repository-name my-prefix/amazonlinux/amazonlinux
   ```

1. コンテナのプルに使用するイメージ文字列は、次の形式です。

   ```
   <your-account-ID>.dkr.ecr.us-east-1.amazonaws.com/my-prefix/amazonlinux/amazonlinux:2
   ```

## ステップ 6: ジョブ定義を登録する
<a name="getting-started-eks-privateclusters-step-4"></a>

次のジョブ定義は、ポッドに 60 秒間スリープするように指示します。

ジョブ定義のイメージフィールドに、パブリック ECR リポジトリのイメージへのリンクではなく、プライベート ECR リポジトリに保存されているイメージへのリンクを指定します。以下はジョブ定義の例です。

```
$ cat <<EOF > ./batch-eks-job-definition.json
{
  "jobDefinitionName": "MyJobOnEks_Sleep",
  "type": "container",
  "eksProperties": {
    "podProperties": {
      "hostNetwork": true,
      "containers": [
        {
          "image": "<your-account-ID>.dkr.ecr.us-east-1.amazonaws.com/my-prefix/amazonlinux/amazonlinux:2",
          "command": [
            "sleep",
            "60"
          ],
          "resources": {
            "limits": {
              "cpu": "1",
              "memory": "1024Mi"
            }
          }
        }
      ],
      "metadata": {
        "labels": {
          "environment": "test"
        }
      }
    }
  }
}
EOF
```

```
$ aws batch register-job-definition --cli-input-json file://./batch-eks-job-definition.json
```



**注意事項**
+ `cpu` および `memory` パラメータには考慮事項があります。詳細については、「[Amazon EKS の AWS Batch におけるメモリと vCPU に関する考慮事項](memory-cpu-batch-eks.md)」を参照してください。

## ステップ 7: ジョブ実行を送信する
<a name="getting-started-eks-privateclusters-step-5"></a>

で次の AWS CLI コマンドを実行して新しいジョブを送信し AWS CloudShell 、一意の JobID を返します。

```
$ aws batch submit-job --job-queue My-Eks-JQ1 \
    --job-definition MyJobOnEks_Sleep - -job-name My-Eks-Job1
```

**注意事項**
+ Amazon EKS リソースでのジョブ実行の詳細については、[Amazon EKS ジョブ](eks-jobs.md) を参照してください。

## ステップ 8: ジョブの出力を表示する
<a name="getting-started-eks-privateclusters-step-7"></a>

ジョブのステータスを確認するには:

```
$ aws batch describe-jobs --job <JobID-from-submit-response>
```

`startedAt` と `stoppedAt` は 1 分間隔で配置する必要があります。

## ステップ 9: (オプション) オーバーライドを含むジョブを送信する
<a name="getting-started-eks-privateclusters-step-6"></a>

このジョブは、コンテナに渡されたコマンドをオーバーライドします。

```
$ cat <<EOF > ./submit-job-override.json
{
  "jobName": "EksWithOverrides",
  "jobQueue": "My-Eks-JQ1",
  "jobDefinition": "MyJobOnEks_Sleep",
  "eksPropertiesOverride": {
    "podProperties": {
      "containers": [
        {
          "command": [
            "/bin/sh"
          ],
          "args": [
            "-c",
            "echo hello world"
          ]
        }
      ]
    }
  }
}
EOF
```

```
$ aws batch submit-job - -cli-input-json file://./submit-job-override.json
```

**注意事項**
+ 操作の詳細を把握しやすくするには、Amazon EKS コントロールプレーンのログ記録を有効にします。詳細については、「**Amazon EKS ユーザーガイド**」の「[Amazon EKS コントロールプレーンのログ](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html)」を参照してください。
+ Daemonsets と kubelets オーバーヘッドは、使用可能な vCPU とメモリのリソース、特にスケーリングとジョブの配置に影響します。詳細については、「[Amazon EKS の AWS Batch におけるメモリと vCPU に関する考慮事項](memory-cpu-batch-eks.md)」を参照してください。

## ステップ 10: チュートリアルのリソースをクリーンアップする
<a name="getting-started-eks-privateclusters-step-8"></a>

Amazon EC2 インスタンスが有効になっている間は課金されます。インスタンスを削除して、料金の発生を停止できます。

作成したリソースを削除するには、次の作業を行います。

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

1. ナビゲーションペインで **[ジョブキュー]** を選択します。

1. **[ジョブキュー]** テーブルで、チュートリアル用に作成したジョブキューを選択します。

1. **[アクション]** で、**[無効化]** を選択します。ジョブキューの **[状態]** が無効になったら、**[削除]** を選択できます。

1. ジョブキューが削除されたら、ナビゲーションペインで **[コンピューティング環境]** を選択します。

1. このチュートリアル用に作成したコンピューティング環境を選択し、**[アクション]** から **[無効化]** を選択します。コンピューティング環境が無効になるまでに 1～2 分かかる場合があります。

1. コンピューティング環境の **[状態]** が無効になったら、**[削除]** を選択します。コンピューティング環境が削除されるまでに 1～2 分かかる場合があります。

## その他のリソース
<a name="getting-started-eks-additional-resources"></a>

チュートリアルが完了したら、次のトピックを試すことができます。
+ [ベストプラクティス](best-practices.md)について詳しく説明します。
+  AWS Batch コアコンポーネントについて説明します。詳細については、「[のコンポーネント AWS Batch](batch_components.md)」を参照してください。
+  AWS Batchで使用できるさまざまな[コンピューティング環境](compute_environments.md)について説明します。
+ [[ジョブキュー]](job_queues.md) とそのさまざまなスケジューリングオプションについて詳しく説明します。
+ [[ジョブ定義]](job_definitions.md) とそのさまざまな設定オプションについて詳しく説明します。
+ さまざまなタイプの [[ジョブ]](jobs.md) について詳しく説明します。

## トラブルシューティング
<a name="getting-started-eks-privateclusters-troubleshooting"></a>

によって起動されたノードが、イメージを保存する Amazon ECR リポジトリ (または他のリポジトリ) にアクセス AWS Batch できない場合、ジョブは STARTING 状態のままになる可能性があります。これは、ポッドがイメージをダウンロードして AWS Batch ジョブを実行できないためです。によって起動されたポッド名をクリックすると AWS Batch 、エラーメッセージが表示され、問題を確認できます。エラーメッセージは次のようになります。

```
Failed to pull image "public.ecr.aws/amazonlinux/amazonlinux:2": rpc error: code =
Unknown desc = failed to pull and unpack image
"public.ecr.aws/amazonlinux/amazonlinux:2": failed to resolve reference
"public.ecr.aws/amazonlinux/amazonlinux:2": failed to do request: Head
"https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/2": dial tcp: i/o timeout
```

その他の一般的なトラブルシューティングのシナリオについては、「[AWS Batchのトラブルシューティング](https://docs.aws.amazon.com/batch/latest/userguide/batch-eks-troubleshooting.html)」を参照してください。ポッドステータスに基づくトラブルシューティングについては、「[https://repost.aws/knowledge-center/eks-pod-status-troubleshooting](https://repost.aws/knowledge-center/eks-pod-status-troubleshooting)」を参照してください。

# SageMaker AI AWS Batch での の開始方法
<a name="getting-started-sagemaker"></a>

AWS Batch サービスジョブを使用すると、スケジューリング、優先順位付け、キューイング機能を備えた AWS Batch ジョブキューを介して SageMaker トレーニングジョブを送信できます。このチュートリアルでは、 AWS Batch サービスジョブを使用してシンプルな SageMaker トレーニングジョブをセットアップして実行する方法を示します。

**Contents**
+ [概要:](#getting-started-sagemaker-context)
+ [前提条件](#getting-started-sagemaker-prerequisites)
+ [ステップ 1: SageMaker AI 実行ロールを作成する](#getting-started-sagemaker-step-1)
+ [ステップ 2: サービス環境を作成する](#getting-started-sagemaker-step-2)
+ [ステップ 3: SageMaker ジョブキューを作成する](#getting-started-sagemaker-step-3)
+ [ステップ 4: トレーニングジョブを作成して送信する](#getting-started-sagemaker-step-4)
+ [ステップ 5: ジョブステータスをモニタリングする](#getting-started-sagemaker-step-5)
+ [ステップ 6: ジョブ出力を表示する](#getting-started-sagemaker-step-6)
+ [ステップ7: チュートリアルのリソースをクリーンアップする](#getting-started-sagemaker-step-7)
+ [その他のリソース](#getting-started-sagemaker-additional-resources)

## 概要:
<a name="getting-started-sagemaker-context"></a>

このチュートリアルでは、 を使用して SageMaker トレーニングジョブ AWS Batch のサービスジョブを設定する方法を示します AWS CLI。

**対象者**  
このチュートリアルは、大規模な機械学習トレーニングジョブのセットアップと実行を担当するデータサイエンティストと開発者を対象としています。

**使用される機能**  
このチュートリアルでは、 を使用して以下 AWS CLI を行う方法を示します。  
+ SageMaker トレーニングジョブのサービス環境を作成する
+ SageMaker トレーニングジョブのキューを作成する
+ `SubmitServiceJob` API を使用してサービスジョブを送信する
+ ジョブステータスをモニタリングし、出力を表示する
+ トレーニングジョブに関する CloudWatch Logs にアクセスする

**所要時間**  
このチュートリアルは完了までに約 15 分かかります。

**リージョンの制限**  
このチュートリアルは、 AWS Batch と SageMaker AI の両方が利用可能な任意の AWS リージョンで完了できます。

**リソースの使用コスト**  
 AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装することによって、以下のリソースにコストが発生する可能性があります。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/getting-started-sagemaker.html)

## 前提条件
<a name="getting-started-sagemaker-prerequisites"></a>

このチュートリアルを開始する前に、 と SageMaker AI リソースの両方を作成および管理するために必要な以下のツール AWS Batch とリソースをインストールして設定する必要があります。
+ **AWS CLI** – AWS Batch や SageMaker AI などの AWS サービスを操作するためのコマンドラインツールです。このガイドでは、バージョン 2.8.6 以降を使用する必要があります。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLIのインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。をインストールしたら AWS CLI、 も設定することをお勧めします。詳細については、*AWS Command Line Interface ユーザーガイド*の [`aws configure` を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)を参照してください。

## ステップ 1: SageMaker AI 実行ロールを作成する
<a name="getting-started-sagemaker-step-1"></a>

SageMaker AI は実行ロールを使用して、他の AWS サービスを使用するユーザーに代わって操作を実行します。実行ロールを作成し、トレーニングジョブに必要なサービスとリソースを使用するためのアクセス許可を SageMaker AI に付与する必要があります。Amazon S3 のアクセス許可が含まれているため、`AmazonSageMakerFullAccess` マネージドポリシーを使用します。

**注記**  
次の手順に従って、このチュートリアルの SageMaker AI 実行ロールを作成します。  
本番環境の実行ロールを作成する前に、「*[SageMaker AI デベロッパーガイド](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)*」の「[SageMaker AI 実行ロールの使用方法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)」を確認することをお勧めします。

1. 

**IAM ロールの作成**

   以下の信頼ポリシーを持つ、`sagemaker-trust-policy.json` という名前の JSON ファイルを作成します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "sagemaker.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

   信頼ポリシーを使用して IAM ロールを作成します。

   ```
   aws iam create-role \
       --role-name SageMakerExecutionRole \
       --assume-role-policy-document file://sagemaker-trust-policy.json \
       --description "Execution role for SageMaker training jobs"
   ```

1. 

**マネージドポリシーをアタッチする**

   必要なマネージドポリシーをロールにアタッチします。

   ```
   aws iam attach-role-policy \
       --role-name SageMakerExecutionRole \
       --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
   ```

   ```
   aws iam attach-role-policy \
       --role-name SageMakerExecutionRole \
       --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
   ```

1. 

**ロールの ARN を書き留めておきます。**

   ロール ARN を取得します。これは後のステップで必要になります。

   ```
   aws iam get-role --role-name SageMakerExecutionRole --query 'Role.Arn' --output text
   ```

   トレーニングジョブペイロードを作成するときに使用するので、この ARN を保存します。

## ステップ 2: サービス環境を作成する
<a name="getting-started-sagemaker-step-2"></a>

サービス環境は、SageMaker トレーニングジョブの容量制約を定義します。サービス環境は、同時に実行できるトレーニングインスタンスの最大数をカプセル化します。

**重要**  
SageMaker トレーニング用の最初のサービス環境を作成すると、 AWS Batch はアカウントで `AWSServiceRoleForAWSBatchWithSagemaker` という名前の、サービスにリンクされたロールを自動的に作成します。このロールにより、 AWS Batch はユーザーに代わって SageMaker トレーニングジョブをキューに入れ、管理できます。サービスにリンクされたロールおよびその許可の詳細については、「[SageMaker AI AWS Batch での のロールの使用](using-service-linked-roles-batch-sagemaker.md)」を参照してください。

最大 5 つのインスタンスを処理できるサービス環境を作成します。

```
aws batch create-service-environment \
    --service-environment-name TutorialServiceEnvironment \
    --service-environment-type SAGEMAKER_TRAINING \
    --capacity-limits capacityUnit=NUM_INSTANCES,maxCapacity=5
```

出力:

```
{
    "serviceEnvironmentName": "TutorialServiceEnvironment",
    "serviceEnvironmentArn": "arn:aws:batch:your-region:your-account-id:service-environment/TutorialServiceEnvironment"
}
```

サービス環境が正常に作成されたことを確認します。

```
aws batch describe-service-environments --service-environments TutorialServiceEnvironment
```

出力:

```
{
    "serviceEnvironments": [
        {
            "serviceEnvironmentName": "TutorialServiceEnvironment",
            "serviceEnvironmentArn": "arn:aws:batch:your-region:your-account-id:service-environment/TutorialServiceEnvironment",
            "serviceEnvironmentType": "SAGEMAKER_TRAINING",
            "state": "ENABLED",
            "status": "VALID",
            "capacityLimits": [
                {
                    "maxCapacity": 5,
                    "capacityUnit": "NUM_INSTANCES"
                }
            ],
            "tags": {}
        }
    ]
}
```

サービス環境の詳細については、「[のサービス環境 AWS Batch](service-environments.md)」を参照してください。

## ステップ 3: SageMaker ジョブキューを作成する
<a name="getting-started-sagemaker-step-3"></a>

SageMaker ジョブキューは、サービスジョブのスケジューリングと実行を管理します。このキューに送信されたジョブは、使用可能な容量に基づいてサービス環境にディスパッチされます。

SageMaker トレーニングジョブのキューを作成します。

```
aws batch create-job-queue \
    --job-queue-name my-sm-training-fifo-jq \
    --job-queue-type SAGEMAKER_TRAINING \
    --priority 1 \
    --service-environment-order order=1,serviceEnvironment=TutorialServiceEnvironment
```

出力:

```
{
    "jobQueueName": "my-sm-training-fifo-jq",
    "jobQueueArn": "arn:aws:batch:your-region:your-account-id:job-queue/my-sm-training-fifo-jq"
}
```

ジョブのキューが正常に作成されたことを確認します。

```
aws batch describe-job-queues --job-queues my-sm-training-fifo-jq
```

出力:

```
{
    "jobQueues": [
        {
            "jobQueueName": "my-sm-training-fifo-jq",
            "jobQueueArn": "arn:aws:batch:your-region:your-account-id:job-queue/my-sm-training-fifo-jq",
            "state": "ENABLED",
            "status": "VALID",
            "statusReason": "JobQueue Healthy",
            "priority": 1,
            "computeEnvironmentOrder": [],
            "serviceEnvironmentOrder": [
                {
                    "order": 1,
                    "serviceEnvironment": "arn:aws:batch:your-region:your-account-id:service-environment/TutorialServiceEnvironment"
                }
            ],
            "jobQueueType": "SAGEMAKER_TRAINING",
            "tags": {}
        }
    ]
}
```

SageMaker ジョブのキューの詳細については、「[AWS Batch で SageMaker トレーニングジョブのキューを作成する](create-sagemaker-job-queue.md)」を参照してください。

## ステップ 4: トレーニングジョブを作成して送信する
<a name="getting-started-sagemaker-step-4"></a>

次に、シンプルなトレーニングジョブを作成し、ジョブキューに送信します。この例では、サービスジョブの機能を示す基本的な「hello world」トレーニングジョブを使用しています。

`my_training_job.json` という名前のファイルを作成し、次の内容を記述します。*your-account-id* は、自分の AWS アカウント ID に置き換えます。

**注記**  
`S3OutputPath` は SageMaker トレーニングジョブの作成に必要ですが、このチュートリアルの結果は Amazon S3 バケットに保存されず、次の JSON でパスを使用できます。本番環境では、必要に応じて出力を保存するために有効な Amazon S3 バケットが必要です。

```
{
    "TrainingJobName": "my-simple-training-job",
    "RoleArn": "arn:aws:iam::your-account-id:role/SageMakerExecutionRole",
    "AlgorithmSpecification": {
        "TrainingInputMode": "File",
        "TrainingImage": "763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:2.0.0-cpu-py310",
        "ContainerEntrypoint": [
            "echo",
            "hello world"
        ]
    },
    "ResourceConfig": {
        "InstanceType": "ml.c5.xlarge",
        "InstanceCount": 1,
        "VolumeSizeInGB": 1
    },
    "OutputDataConfig": {
        "S3OutputPath": "s3://your-s3-bucket/output"
    },
    "StoppingCondition": {
        "MaxRuntimeInSeconds": 30
    }
}
```

[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API を使用してトレーニングジョブを送信します。

```
aws batch submit-service-job \
    --job-queue my-sm-training-fifo-jq \
    --job-name my-batch-sm-job \
    --service-job-type SAGEMAKER_TRAINING \
    --retry-strategy attempts=1 \
    --timeout-config attemptDurationSeconds=60 \
    --service-request-payload file://my_training_job.json
```

出力:

```
{
    "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
    "jobName": "my-batch-sm-job",
    "jobId": "your-job-id"
}
```

サービスジョブのペイロードの詳細については、「[のサービスジョブペイロード AWS Batch](service-job-payload.md)」を参照してください。サービスジョブの送信の詳細については、「[でサービスジョブを送信する AWS Batch](service-job-submit.md)」を参照してください。

## ステップ 5: ジョブステータスをモニタリングする
<a name="getting-started-sagemaker-step-5"></a>

トレーニングジョブは、[DescribeServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html) AWS Batch APIs を使用してモニタリングできます。 [ListServiceJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_ListServiceJobs.html) [GetJobQueueSnapshot](https://docs.aws.amazon.com/batch/latest/APIReference/API_GetJobQueueSnapshot.html) このセクションでは、ジョブのステータスとキュー情報を確認するさまざまな方法を示します。

キューで実行中のジョブを表示します。

```
aws batch list-service-jobs \
    --job-queue my-sm-training-fifo-jq --job-status RUNNING
```

出力:

```
{
    "jobSummaryList": [
        {
            "latestAttempt": {
                "serviceResourceId": {
                    "name": "TrainingJobArn",
                    "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
                }
            },
            "createdAt": 1753718760,
            "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
            "jobId": "your-job-id",
            "jobName": "my-batch-sm-job",
            "serviceJobType": "SAGEMAKER_TRAINING",
            "status": "RUNNING",
            "startedAt": 1753718820
        }
    ]
}
```

`RUNNABLE` 状態にあるジョブを表示します。

```
aws batch list-service-jobs \
    --job-queue my-sm-training-fifo-jq --job-status RUNNABLE
```

キュー内の今後のジョブのスナップショットを取得します。

```
aws batch get-job-queue-snapshot --job-queue my-sm-training-fifo-jq
```

出力:

```
{
    "frontOfQueue": {
        "jobs": [
            {
                "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
                "earliestTimeAtPosition": 1753718880
            },
            {
                "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id-2",
                "earliestTimeAtPosition": 1753718940
            }
        ],
        "lastUpdatedAt": 1753718970
    }
}
```

名前でジョブを検索します。

```
aws batch list-service-jobs \
    --job-queue my-sm-training-fifo-jq \
    --filters name=JOB_NAME,values="my-batch-sm-job"
```

出力:

```
{
    "jobSummaryList": [
        {
            "latestAttempt": {
                "serviceResourceId": {
                    "name": "TrainingJobArn",
                    "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
                }
            },
            "createdAt": 1753718760,
            "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
            "jobId": "your-job-id",
            "jobName": "my-batch-sm-job",
            "serviceJobType": "SAGEMAKER_TRAINING",
            "status": "RUNNING"
        }
    ]
}
```

ジョブ状態のマッピングの詳細については、「[AWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする](service-job-status.md)」を参照してください。

## ステップ 6: ジョブ出力を表示する
<a name="getting-started-sagemaker-step-6"></a>

ジョブが完了すると、 と SageMaker AI APIs の両方を通じて、その出力 AWS Batch とログを表示できます。

ジョブの詳細については、以下を参照してください AWS Batch。

```
aws batch describe-service-job \
    --job-id your-job-id
```

出力:

```
{
    "attempts": [
        {
            "serviceResourceId": {
                "name": "TrainingJobArn",
                "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
            },
            "startedAt": 1753718820,
            "stoppedAt": 1753718880,
            "statusReason": "Received status from SageMaker: Training job completed"
        }
    ],
    "createdAt": 1753718760,
    "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
    "jobId": "your-job-id",
    "jobName": "my-batch-sm-job",
    "jobQueue": "arn:aws:batch:your-region:your-account-id:job-queue/my-sm-training-fifo-jq",
    "latestAttempt": {
        "serviceResourceId": {
            "name": "TrainingJobArn",
            "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
        }
    },
    "retryStrategy": {
        "attempts": 1,
        "evaluateOnExit": []
    },
    "serviceRequestPayload": "your-training-job-request-json",
    "serviceJobType": "SAGEMAKER_TRAINING",
    "startedAt": 1753718820,
    "status": "SUCCEEDED",
    "statusReason": "Received status from SageMaker: Training job completed",
    "stoppedAt": 1753718880,
    "tags": {},
    "timeoutConfig": {
        "attemptDurationSeconds": 60
    }
}
```

このコマンドは、SageMaker AI を介してジョブに直接アクセスするために使用できる SageMaker トレーニングジョブ ARN を含む包括的なジョブ情報を返します。

```
aws sagemaker describe-training-job \
    --training-job-name AWSBatch<my-simple-training-job><your-attempt-id>
```

トレーニングジョブの CloudWatch ログを表示するには、まずログストリーム名を取得します。

```
aws logs describe-log-streams \
    --log-group-name /aws/sagemaker/TrainingJobs \
    --log-stream-name-prefix AWSBatchmy-simple-training-job
```

出力:

```
{
    "logStreams": [
        {
            "logStreamName": "your-log-stream-name",
            "creationTime": 1753718830,
            "firstEventTimestamp": 1753718840,
            "lastEventTimestamp": 1753718850,
            "lastIngestionTime": 1753718860,
            "uploadSequenceToken": upload-sequence-token,
            "arn": "arn:aws:logs:your-region:your-account-id:log-group:/aws/sagemaker/TrainingJobs:log-stream:AWSBatch<my-simple-training-job><your-attempt-id>/algo-1-algo-id",
            "storedBytes": 0
        }
    ]
}
```

次に、前のレスポンスのログストリーム名を使用してログを取得します。

```
aws logs get-log-events \
    --log-group-name /aws/sagemaker/TrainingJobs \
    --log-stream-name your-log-stream-name
```

出力:

```
{
    "events": [
        {
            "timestamp": 1753718845,
            "message": "hello world",
            "ingestionTime": 1753718865
        }
    ],
    "nextForwardToken": "next-forward-token",
    "nextBackwardToken": "next-backward-token"
}
```

ログ出力には、トレーニングジョブからの「hello world」メッセージが表示され、ジョブが正常に実行されたことを確認します。

## ステップ7: チュートリアルのリソースをクリーンアップする
<a name="getting-started-sagemaker-step-7"></a>

このチュートリアルを完了したら、不要な課金が発生しないよう、作成したリソースをクリーンアップします。

まず、ジョブキューを無効にして削除します。

```
aws batch update-job-queue \
    --job-queue my-sm-training-fifo-jq \
    --state DISABLED
```

ジョブキューが無効になるまで待ってから、それを削除します。

```
aws batch delete-job-queue \
    --job-queue my-sm-training-fifo-jq
```

次に、サービス環境を無効にして削除します。

```
aws batch update-service-environment \
    --service-environment TutorialServiceEnvironment \
    --state DISABLED
```

サービス環境が無効になるまで待ってから、それを削除します。

```
aws batch delete-service-environment \
    --service-environment TutorialServiceEnvironment
```

## その他のリソース
<a name="getting-started-sagemaker-additional-resources"></a>

チュートリアルが完了したら、次のトピックを試すことができます。
+ PySDK にはヘルパークラスとユーティリティがあるため、サービスジョブの作成とジョブキューへの送信に PySDK を使用することをお勧めします。PySDK の使用例については、GitHub の「[SageMaker AI の例](https://github.com/aws/amazon-sagemaker-examples)」を参照してください。
+ [のサービスジョブ AWS Batch](service-jobs.md) の詳細を確認してください。
+ より複雑なトレーニングジョブ設定については、「[のサービスジョブペイロード AWS Batch](service-job-payload.md)」を参照してください。
+ [でサービスジョブを送信する AWS Batch](service-job-submit.md) と `SubmitServiceJob` API について説明します。
+ ジョブ状態の遷移を理解するには、「[AWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする](service-job-status.md)」を参照してください。
+ Python を使用して SageMaker トレーニングジョブを作成および送信するその他の機能豊富な方法については、「[SageMaker AI Python SDK ドキュメント](https://sagemaker.readthedocs.io/en/stable/)」を参照してください。
+ より複雑な機械学習ワークフローについては、「[SageMaker サンプルノートブック](https://github.com/aws/amazon-sagemaker-examples)」をご覧ください。