

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

# 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)」を参照してください。