

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# AWS CLI を使用して EKS Auto Mode クラスターを作成する
<a name="automode-get-started-cli"></a>

EKS Auto Mode クラスターは、コンピューティング、ストレージ、ネットワーキングのルーティン化されたクラスター管理タスクを自動化します。例えば、EKS Auto Mode クラスターは、追加のノードが必要なタイミングを自動的に検出し、ワークロードの需要に合わせて新しい EC2 インスタンスをプロビジョニングします。

このトピックでは、AWS CLI を使用して新しい EKS Auto Mode クラスターを作成し、必要に応じてサンプルワークロードをデプロイする方法について説明します。

## 前提条件
<a name="_prerequisites"></a>
+ AWS コマンドラインインターフェイス (AWS CLI) の最新バージョンがデバイスにインストールおよび設定されていること。現在のバージョンを確認するには「`aws --version`」を参照してください。最新バージョンをインストールするには、「AWS コマンドラインインターフェイスユーザーガイド」の「[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」および「[aws configure を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-configure-quickstart-config)」を参照してください。
  + 十分な IAM アクセス許可を使用して CLI にログインし、IAM ポリシー、IAM ロール、EKS クラスターなどの AWS リソースを作成します。
+ kubectl コマンドラインツールがデバイスにインストールされている。AWS では、EKS クラスターの Kubernetes バージョンと同じ kubectl バージョンを使用することをお勧めします。kubectl をインストールまたはアップグレードするには、「[`kubectl` および `eksctl` のセットアップ](install-kubectl.md)」を参照してください。

## VPC サブネットを指定する
<a name="_specify_vpc_subnets"></a>

Amazon EKS Auto Mode は、VPC サブネットにノードをデプロイします。EKS クラスターの作成時に、ノードをデプロイする VPC サブネットを指定する必要があります。AWS アカウントでデフォルトの VPC サブネットを使用するか、重要なワークロード専用の VPC を作成することができます。
+  AWS では、クラスター専用の VPC を作成することをお勧めします。「[Amazon EKS クラスターの Amazon VPC を作成する](creating-a-vpc.md)」ではその方法を説明しています。
+ EKS コンソールは、新しい VPC の作成に役立ちます。「[AWS マネジメントコンソール を使用して EKS Auto Mode クラスターを作成する](automode-get-started-console.md)」ではその方法を説明しています。
+ また、AWS アカウントのデフォルト VPC を使用することができます。サブネット ID を検出するには、以下の手順を使用します。

### デフォルト VPC のサブネット ID を検出するには
<a name="auto-find-subnet"></a>

 **AWS CLI の使用:** 

1. 次のコマンドを実行して、デフォルト VPC とそのサブネットを一覧表示します。

   ```
   aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text)" --query 'Subnets[*].{ID:SubnetId,AZ:AvailabilityZone}' --output table
   ```

1. 出力を保存し、**サブネット ID** をメモします。

   サンプル出力:

   ```
   ----------------------------------------
   |             DescribeSubnets          |
   ----------------------------------------
   |   SubnetId        |   AvailabilityZone  |
   |--------------------|---------------------|
   |   subnet-012345678 |   us-west-2a        |
   |   subnet-234567890 |   us-west-2b        |
   |   subnet-345678901 |   us-west-2c        |
   ----------------------------------------
   ```

## EKS Auto Mode クラスターの IAM ロール
<a name="auto-mode-create-roles"></a>

### クラスター IAM ロール
<a name="auto-roles-cluster-iam-role"></a>

EKS Auto Mode では、新しい EC2 インスタンスのプロビジョニングなど、AWS アカウントでアクションを実行するのにクラスター IAM ロールが必要です。必要なアクセス許可を EKS に付与するには、このロールを作成する必要があります。AWS では、クラスター IAM ロールに次の AWS マネージドポリシーをアタッチすることをお勧めします。
+  [AmazonEKSComputePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSComputePolicy) 
+  [Amazon EKSブロックストレージポリシー](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSBlockStoragePolicy) 
+  [Amazon EKSロードバランシングポリシー](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSLoadBalancingPolicy) 
+  [Amazon EKSネットワーキングポリシー](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSNetworkingPolicy) 
+  [AmazonEKSClusterPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-amazoneksclusterpolicy) 

### ノード IAM ロール
<a name="auto-roles-node-iam-role"></a>

EKS Auto Mode クラスターを作成する際に、ノード IAM ロールを指定します。EKS Auto Mode が保留中のワークロードを処理するノードを作成すると、新しい EC2 インスタンスノードごとにノード IAM ロールが割り当てられます。このロールにより、ノードは EKS と通信できますが、通常、ノードで実行されているワークロードからはアクセスされません。

ノードで実行されているワークロードにアクセス許可を付与する場合は、EKS Pod Identity を使用します。詳細については、「[EKS Pod Identity が Pod に AWS サービスへのアクセス権を付与する仕組みを学ぶ](pod-identities.md)」を参照してください。

このロールを作成し、次の AWS マネージドポリシーをアタッチする必要があります。
+  [AmazonEKSWorkerNodeMinimalPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSWorkerNodeMinimalPolicy) 
+  [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonEC2ContainerRegistryPullOnly) 

EKS Auto Mode には、AWS によって自動的に作成および設定されるサービスリンクロールも必要です。詳細については、「[AWSServiceRoleForAmazonEKS](using-service-linked-roles-eks.md)」 に関するページを参照してください。

## EKS Auto Mode クラスター IAM ロールを作成する
<a name="_create_an_eks_auto_mode_cluster_iam_role"></a>

### ステップ 1: 信頼ポリシーを作成する
<a name="_step_1_create_the_trust_policy"></a>

Amazon EKS サービスがロールを引き受けることを許可する信頼ポリシーを作成します。ポリシーを `trust-policy.json` として保存します。

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

### ステップ 2: IAM ロールを作成する
<a name="_step_2_create_the_iam_role"></a>

信頼ポリシーを使用して、クラスター IAM ロールを作成します。

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

### ステップ 3: ロール ARN をメモする
<a name="_step_3_note_the_role_arn"></a>

以降のステップで使用する新しいロールの ARN を取得して保存します。

```
aws iam get-role --role-name AmazonEKSAutoClusterRole --query "Role.Arn" --output text
```

### ステップ 4: 必要なポリシーをアタッチする
<a name="_step_4_attach_required_policies"></a>

次の AWS マネージドポリシーをクラスター IAM ロールにアタッチして、必要なアクセス許可を付与します。

 **AmazonEKSClusterPolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
```

 **AmazonEKSコンピュートポリシー**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSComputePolicy
```

 **AmazonEKSブロックストレージポリシー**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicy
```

 **AmazonEKSロードバランシングポリシー**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy
```

 **AmazonEKSNetworkingPolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy
```

## EKS Auto Mode ノード IAM ロールを作成する
<a name="_create_an_eks_auto_mode_node_iam_role"></a>

### ステップ 1: 信頼ポリシーを作成する
<a name="_step_1_create_the_trust_policy_2"></a>

Amazon EKS サービスがロールを引き受けることを許可する信頼ポリシーを作成します。ポリシーを `node-trust-policy.json` として保存します。

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

#### ステップ 2: ノード IAM ロールを作成する
<a name="_step_2_create_the_node_iam_role"></a>

前のステップの **node-trust-policy.json** ファイルを使用して、ロールを引き受けることができるエンティティを定義します。次のコマンドを実行してノード IAM ロールを作成します。

```
aws iam create-role \
    --role-name AmazonEKSAutoNodeRole \
    --assume-role-policy-document file://node-trust-policy.json
```

#### ステップ 3: ロール ARN をメモする
<a name="_step_3_note_the_role_arn_2"></a>

ロールを作成したら、ノード IAM ロールの ARN を取得して保存します。以降のステップでこの ARN が必要になります。次のコマンドを使用して ARN を取得します。

```
aws iam get-role --role-name AmazonEKSAutoNodeRole --query "Role.Arn" --output text
```

#### ステップ 4: 必要なポリシーをアタッチする
<a name="_step_4_attach_required_policies_2"></a>

次の AWS マネージドポリシーをノード IAM ロールにアタッチして、必要なアクセス許可を付与します。

 **AmazonEKSWorkerNodeMinimalPolicy**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodeMinimalPolicy
```

 **AmazonEC2ContainerRegistryPullOnly**:

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
```

## EKS Auto Mode クラスターを作成する
<a name="_create_an_eks_auto_mode_cluster"></a>

### 概要:
<a name="_overview"></a>

AWS CLI を使用して EKS Auto Mode クラスターを作成するには、次のパラメータが必要になります。
+  `cluster-name`: クラスターの名前。
+  `k8s-version`: Kubernetes バージョン (1.31 など)。
+  `subnet-ids`: 前のステップで特定したサブネット ID。
+  `cluster-role-arn`: クラスター IAM ロールの ARN。
+  `node-role-arn`: ノード IAM ロールの ARN。

#### デフォルトのクラスター設定
<a name="_default_cluster_configurations"></a>

クラスターを作成する前に、以下のデフォルト値および機能を確認してください。
+  `nodePools`: EKS Auto Mode には、汎用ノードプールとシステムデフォルトノードプールが含まれています。「[ノードプール](create-node-pool.md)」の詳細を確認してください。

 **注:** EKS Auto Mode のノードプールは Amazon EKS マネージドノードグループとは異なりますが、同じクラスター内で共存できます。
+  `computeConfig.enabled`: EC2 インスタンスの作成や削除などのルーティン化されたコンピューティングタスクを自動化します。
+  `kubernetesNetworkConfig.elasticLoadBalancing.enabled`: Elastic Load Balancer の作成や削除などのロードバランシングタスクを自動化します。
+  `storageConfig.blockStorage.enabled`: Amazon EBS ボリュームの作成や削除などのストレージタスクを自動化します。
+  `accessConfig.authenticationMode`: EKS アクセスエントリを要求します。[EKS 認証モード](grant-k8s-access.md)の詳細を確認してください。

#### コマンドを実行する
<a name="_run_the_command"></a>

次のコマンドを使用してクラスターを作成します。

```
aws eks create-cluster \
  --region ${AWS_REGION} \
  --cli-input-json \
  "{
      \"name\": \"${CLUSTER_NAME}\",
      \"version\": \"${K8S_VERSION}\",
      \"roleArn\": \"${CLUSTER_ROLE_ARN}\",
      \"resourcesVpcConfig\": {
        \"subnetIds\": ${SUBNETS_JSON},
        \"endpointPublicAccess\": true,
        \"endpointPrivateAccess\": true
      },
      \"computeConfig\": {
        \"enabled\": true,
        \"nodeRoleArn\":\"${NODE_ROLE_ARN}\",
        \"nodePools\": [\"general-purpose\", \"system\"]
      },
      \"kubernetesNetworkConfig\": {
        \"elasticLoadBalancing\": {
          \"enabled\": true
        }
      },
      \"storageConfig\": {
        \"blockStorage\": {
          \"enabled\": true
        }
      },
      \"accessConfig\": {
        \"authenticationMode\": \"API\"
      }
    }"
```

### クラスターのステータスを確認する
<a name="_check_cluster_status"></a>

#### ステップ 1: クラスターの作成を確認する
<a name="_step_1_verify_cluster_creation"></a>

次のコマンドを実行して、クラスターのステータスを確認します。通常、クラスターの作成には約 15 分かかります。

```
aws eks describe-cluster --name "${CLUSTER_NAME}" --output json
```

#### ステップ 2: kubeconfig を更新する
<a name="_step_2_update_kubeconfig"></a>

クラスターの準備ができたら、ローカルの kubeconfig ファイルを更新して、`kubectl` がクラスターと通信できるようにします。この設定では、認証に AWS CLI を使用します。

```
aws eks update-kubeconfig --name "${CLUSTER_NAME}"
```

#### ステップ 3: ノードプールを検証する
<a name="_step_3_verify_node_pools"></a>

次のコマンドを使用して、クラスター内のノードプールを一覧表示します。

```
kubectl get nodepools
```

## 次のステップ
<a name="_next_steps"></a>
+ 新しい EKS Auto Mode クラスターに[サンプルワークロードをデプロイ](automode-workload.md)する方法について説明します。