

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

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

# クラスターの AWS Fargate の使用を開始する
<a name="fargate-getting-started"></a>

このトピックでは、Amazon EKS クラスターを使用して AWS Fargate で Pod の実行を開始する方法について説明します。

CIDR ブロックを使用してクラスターのパブリックエンドポイントへのアクセスを制限する場合は、プライベートエンドポイントアクセスも有効にすることをお勧めします。こうすることで、Fargate Pod がクラスターと通信できるようになります。プライベートエンドポイントが有効になっていない場合、パブリックアクセスに指定する CIDR ブロックに、VPC からのアウトバウンドソースを含める必要があります。詳細については、「[クラスター API サーバーエンドポイント](cluster-endpoint.md)」を参照してください。

**前提条件**  
既存のクラスター。既存の Amazon EKS クラスターがなければ、[Amazon EKS の使用を開始する](getting-started.md) を参照してください。

## ステップ 1: 既存のノードが Fargate Pod と通信できることを確認する
<a name="fargate-gs-check-compatibility"></a>

ノードのない新しいクラスター、またはマネージド型ノードグループ ([マネージドノードグループを使用してノードライフサイクルを簡素化する](managed-node-groups.md) を参照) のみを持つクラスターを使用している場合は、「[ステップ 2: Fargate Pod 実行ロールを作成する](#fargate-sg-pod-execution-role)」に進みます。

既にそれに関連付けられているノードがある既存のクラスターで作業していると仮定します。これらのノードの Pod が Fargate で実行されている Pod と自由に通信できることを確認する必要があります。Fargate で実行されている Pod は、関連付けられているクラスターのクラスターセキュリティグループを使用するように自動的に設定されます。クラスター内の既存のノードが、クラスターセキュリティグループとの間でトラフィックを送受信できることを確認します。マネージドノードグループもクラスターセキュリティグループを使用するように自動的に設定されるため、この互換性を変更または確認する必要はありません (「[マネージドノードグループを使用してノードライフサイクルを簡素化する](managed-node-groups.md)」を参照)。

`eksctl` または Amazon EKS マネージド型 AWS CloudFormation テンプレートで作成された既存のノードグループの場合、クラスターセキュリティグループをノードに手動で追加できます。または、ノードグループの Auto Scaling グループ起動テンプレートを変更して、クラスターセキュリティグループをインスタンスにアタッチすることもできます。詳細については、Amazon VPC ユーザーガイドの[インスタンスのセキュリティグループを変更する](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SG_Changing_Group_Membership)を参照してください。

AWS マネジメントコンソール で、クラスターの **[Networking]** (ネットワーク) セクションでクラスターのクラスターセキュリティグループを確認できます。これを行うには、次の AWS CLI コマンドを実行します。このコマンドを使用する場合は、`<my-cluster>` を自分のクラスター名に置き換えます。

```
aws eks describe-cluster --name <my-cluster> --query cluster.resourcesVpcConfig.clusterSecurityGroupId
```

## ステップ 2: Fargate Pod 実行ロールを作成する
<a name="fargate-sg-pod-execution-role"></a>

クラスターが AWS Fargate で Pod を作成する場合、Fargate インフラストラクチャで実行されるコンポーネントは、ユーザーに代わって AWS API を呼び出す必要があります。Amazon EKS の Pod 実行ロールにより、これらを行うための IAM アクセス許可が付与されます。AWS Fargate Pod 実行ロールを作成するには、「[Amazon EKS Pod 実行 IAM ロール](pod-execution-role.md)」を参照してください。

**注記**  
`--fargate` オプションを使用して `eksctl` でクラスターを作成した場合は、クラスターに Pod 実行ロールが既にあり、これは `eksctl-my-cluster-FargatePodExecutionRole-ABCDEFGHIJKL` というパターンで IAM コンソールに表示されます。同様に、`eksctl` を使用して Fargate プロファイルを作成する場合、`eksctl` では Pod 実行ロールを作成します (まだ存在しない場合)。

## ステップ 3: クラスターの Fargate プロファイルを作成する
<a name="fargate-gs-create-profile"></a>

クラスターの Fargate で実行されている Pod をスケジューリングする前に、起動時に Fargate を使用する Pod を指定する Fargate プロファイルを定義する必要があります。詳細については、「[起動時にどの Pod が AWS Fargate を使用するのかを定義する](fargate-profile.md)」を参照してください。

**注記**  
`--fargate` オプションを使用して `eksctl` でクラスターを作成した場合、クラスターの Fargate プロファイルは、`kube-system` と `default` の名前空間のすべての Pod のセレクターを使用して既に作成されています。Fargate で使用するその他の名前空間の Fargate プロファイルを作成するには、以下の手順に従います。

Fargate プロファイルを作成するには、次のツールのいずれかを使用します。
+  [`eksctl`](#eksctl_fargate_profile_create) 
+  [AWS マネジメントコンソール](#console_fargate_profile_create) 

### `eksctl`
<a name="eksctl_fargate_profile_create"></a>

この手順には、`eksctl` バージョン `0.215.0` 以降が必要です。お使いのバージョンは、以下のコマンドを使用して確認できます。

```
eksctl version
```

`eksctl` のインストールまたはアップグレードの手順については、`eksctl` ドキュメントの「[インストール](https://eksctl.io/installation)」を参照してください。

 ** で、Fargate プロファイルを作成するには`eksctl`** 

以下の `eksctl` コマンドで Fargate プロファイルを作成し、すべての `<example value>` を自分の値に置き換えます。名前空間を指定する必要があります。ただし、`--labels` オプションは必須ではありません。

```
eksctl create fargateprofile \
    --cluster <my-cluster> \
    --name <my-fargate-profile> \
    --namespace <my-kubernetes-namespace> \
    --labels <key=value>
```

`<my-kubernetes-namespace>` および `<key=value>` ラベルには、特定のワイルドカードを使用できます。詳細については、「[Fargate プロファイルのワイルドカード](fargate-profile.md#fargate-profile-wildcards)」を参照してください。

### AWS マネジメントコンソール
<a name="console_fargate_profile_create"></a>

 ** で、Fargate プロファイルを作成するにはAWS マネジメントコンソール** 

1. [Amazon EKS コンソール](https://console.aws.amazon.com/eks/home#/clusters)を開きます。

1. Fargate プロファイルを作成するクラスターを選択します。

1. **[コンピューティング]** タブを開きます。

1. **[Fargate プロファイル]** で、**[Fargate プロファイルを追加]** を選択します。

1. **[Fargate プロファイルを設定]** ページで、次の操作を行います。

   1. **[名前]** に Fargate プロファイルの名前を入力します。名前は一意である必要があります。

   1. **[Pod 実行ロール]** で、Fargate プロファイルで使用する Pod 実行ロールを選択します。`eks-fargate-pods.amazonaws.com` サービスプリンシパルを持つ IAM ロールのみが表示されます。ここにロールが表示されない場合は、ロールを作成する必要があります。詳細については、「[Amazon EKS Pod 実行 IAM ロール](pod-execution-role.md)」を参照してください。

   1. 選択した **[サブネット]** を必要に応じて変更します。
**注記**  
Fargate で実行される Pod では、プライベートサブネットのみがサポートされます。

   1. **[Tags]** (タグ) では、オプションで Fargate プロファイルにタグを付けることができます。これらのタグは、Pod など、プロファイルに関連付けられた他のリソースには伝達されません。

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

1. **[Pod の選択を設定]** ページで、次の操作を行います。

   1. **[名前空間]** に、Pod と照合する名前空間を入力します。
      + `kube-system` または `default` など、特定の名前空間を使用して照合できます。
      + 特定のワイルドカード (例: `prod-*`) を使用して、複数の名前空間 (例: `prod-deployment` および `prod-test`) と照合することができます。詳細については、「[Fargate プロファイルのワイルドカード](fargate-profile.md#fargate-profile-wildcards)」を参照してください。

   1. (オプション) セレクタに Kubernetes ラベルを追加します。特に、指定された名前空間内の Pod が一致する必要があるものにそれらを追加します。
      + ラベル `infrastructure: fargate` をセレクターに追加して、`infrastructure: fargate` Kubernetes ラベルも持つ指定された名前空間の Pod のみがセレクターと一致するようにすることができます。
      + 特定のワイルドカード (例: `key?: value?`) を使用して、複数の名前空間 (例: `keya: valuea` および `keyb: valueb`) と照合することができます。詳細については、「[Fargate プロファイルのワイルドカード](fargate-profile.md#fargate-profile-wildcards)」を参照してください。

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

1. **[確認と作成]** ページで、Fargate プロファイルの情報を確認し、**[作成]** を選択します。

## ステップ 4: CoreDNS を更新する
<a name="fargate-gs-coredns"></a>

デフォルトでは、CoreDNS は Amazon EKS クラスターの Amazon EC2 インフラストラクチャで実行するように設定されています。クラスター内で Fargate で*のみ* Pod を実行する場合は、次の手順を実行します。

**注記**  
`--fargate` オプションを使用して `eksctl` でクラスターを作成した場合は、[次のステップ](#fargate-gs-next-steps) にスキップできます。

1. 次のコマンドを使用して、CoreDNS の Fargate プロファイルを作成します。`<my-cluster>` をクラスター名、`<111122223333>` をアカウント ID、`<AmazonEKSFargatePodExecutionRole>` をポッド実行ロール名に置き換え、また、`<000000000000000a>`、`<000000000000000b>`、`<000000000000000c>` をプライベートサブネットの ID に置き換えます。Pod 実行ロールがない場合は、最初に作成する必要があります (「[ステップ 2: Fargate Pod 実行ロールを作成する](#fargate-sg-pod-execution-role)」を参照)。
**重要**  
ロール ARN に `/` 以外の[パス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-friendly-names)を含めることはできません。例えば、ロールの名前が `development/apps/AmazonEKSFargatePodExecutionRole` の場合、ロールの ARN を指定するときに `AmazonEKSFargatePodExecutionRole` に変更する必要があります。ロール ARN の形式は ` arn:aws:iam::<111122223333>:role/<AmazonEKSFargatePodExecutionRole>` であることが必要です。

   ```
   aws eks create-fargate-profile \
       --fargate-profile-name coredns \
       --cluster-name <my-cluster> \
       --pod-execution-role-arn arn:aws:iam::<111122223333>:role/<AmazonEKSFargatePodExecutionRole> \
       --selectors namespace=kube-system,labels={k8s-app=kube-dns} \
       --subnets subnet-<000000000000000a> subnet-<000000000000000b> subnet-<000000000000000c>
   ```

1. `coredns` デプロイのロールアウトをトリガーします。

   ```
   kubectl rollout restart -n kube-system deployment coredns
   ```

## 次のステップ
<a name="fargate-gs-next-steps"></a>
+ 以下のワークフローを使用すると、Fargate で実行するために既存のアプリケーションの移行を開始できます。

  1.  アプリケーションの Kubernetes 名前空間と Kubernetes ラベルに一致する [Fargate プロファイルの作成](fargate-profile.md#create-fargate-profile)。

  1. 既存のいずれかの Pod を削除および再作成し、Fargate でスケジューリングされるようにします。`<namespace>` と `<deployment-type>` を変更して、特定のポッドを更新します。

     ```
     kubectl rollout restart -n <namespace> deployment <deployment-type>
     ```
+ [Application Load Balancer を使用してアプリケーションと HTTP トラフィックをルーティングする](alb-ingress.md) をデプロイして、Fargate で実行されている Pod が Ingress オブジェクトを使用できるようにします。
+ [Vertical Pod Autoscaler を使用してポッドリソースを調整する](vertical-pod-autoscaler.md) を使用して Fargate Pod の CPU とメモリの適切な初期サイズを設定し、[Horizontal Pod Autoscaler を使用してポッドデプロイをスケールする](horizontal-pod-autoscaler.md) を使用してそれらの Pod をスケールできます。Vertical Pod Autoscaler で、より上位の CPU とメモリの組み合わせを持つ Fargate に Pod を自動的に再デプロイする場合は、Vertical Pod Autoscaler のモードを `Auto` または `Recreate` に設定します。これは、正しい機能を保証するためです。詳細については、GitHub で [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler#quick-start) のドキュメントを参照してください。
+ [これらの手順](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-otel.html)に従って、アプリケーションをモニタリングするための [AWS Distro for OpenTelemetry](https://aws.amazon.com/otel) (ADOT) コレクターをセットアップします。