

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

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

# 起動時にどの Pod が AWS Fargate を使用するのかを定義する
<a name="fargate-profile"></a>

クラスターの Fargate で Pod をスケジューリングする前に、起動時に Fargate を使用するPod を指定する Fargate プロファイルを少なくとも 1 つ定義する必要があります。

管理者は、Fargate プロファイルを使用してどの Pod が Fargate で実行されるかを宣言できます。これはプロファイルのセレクターを介して行うことができます。1 つのプロファイルに最大 5 つのセレクターを追加できます。各セレクターには名前空間が含まれている必要があります。セレクターにはラベルを含めることもできます。ラベルフィールドは、複数のオプションのキーと値のペアで構成されます。セレクターに一致するポッドは Fargate でスケジュールされます。ポッドは、セレクターで指定された名前空間とラベルを使用して照合されます。名前空間セレクターがラベルなしで定義されている場合、Amazon EKS は、プロファイルを使用して、その名前空間で実行されるすべての Pod を Fargate にスケジュールしようとします。スケジューリングされる Pod が Fargate プロファイル内のいずれかのセレクターと一致する場合、その Pod は Fargate でスケジューリングされます。

Pod が複数の Fargate プロファイルと一致する場合、次の Kubernetes ラベルを Pod 仕様に追加することで、Pod がどのプロファイルを使用するかを指定することができます: `eks.amazonaws.com/fargate-profile: my-fargate-profile`。Pod を Fargate にスケジューリングするには、そのプロファイル内のセレクターと一致する必要があります。Kubernetes アフィニティ/アンチアフィニティルールは適用されないため、Amazon EKS Fargate Pod では必要ありません。

Fargate プロファイルを作成する際は、Pod 実行ロールを指定する必要があります。この実行ロールは、プロファイルを使用して Fargate インフラストラクチャで実行される Amazon EKS コンポーネントのためのものです。承認のためにクラスターの Kubernetes [ロールベースのアクセスコントロール](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) (RBAC) に追加されます。これにより、Fargate インフラストラクチャで実行されている `kubelet` が Amazon EKS クラスターに登録され、クラスター内でノードとして表示されるようになります。Pod 実行ロールは、Amazon ECR イメージリポジトリへの読み取りアクセスを許可するために、Fargate インフラストラクチャへの IAM アクセス許可も提供します。詳細については、「[Amazon EKS Pod 実行 IAM ロール](pod-execution-role.md)」を参照してください。

Fargate プロファイルは変更できません。ただし、新しい更新されたプロファイルを作成して既存のプロファイルを置き換え、その後元のプロファイルを削除することはできます。

**注記**  
Fargate プロファイルを使用して実行中の Pod は、プロファイルが削除されると停止され、保留状態になります。

クラスターのいずれかの Fargate プロファイルが `DELETING` ステータスである場合は、Fargate プロファイルの削除が完了するのを待ってから、そのクラスターに他のプロファイルを作成する必要があります。

**注記**  
Fargate は現在 Kubernetes [topologySpreadConstraints](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/) をサポートしていません。

Amazon EKS と Fargate は、Fargate プロファイルで定義されている各サブネットに Pod を分散させます。ただし、分散が偏ってしまう場合があります。均等な分散が必要な場合は、2 つの Fargate プロファイルを使用してください。2 つのレプリカをデプロイし、ダウンタイムを発生させたくないシナリオでは、均等な分散が重要になります。各プロファイルにはサブネットを 1 つだけ含めることをお勧めします。

## Fargate プロファイルのコンポーネント
<a name="fargate-profile-components"></a>

Fargate プロファイルには、次のコンポーネントが含まれています。

 **ポッド実行ロール**   
クラスターが AWS Fargate で Pod を作成するとき、Fargate インフラストラクチャ上で実行されている `kubelet` は、ユーザーに代わって AWS API を呼び出す必要があります。例えば、Amazon ECR からコンテナイメージを取得するためのコールを行う必要があります。Amazon EKS の Pod 実行ロールにより、これらを行うための IAM アクセス許可が付与されます。  
Fargate プロファイルを作成する際は、Pod で使用する Pod 実行ロールを指定する必要があります。このロールは、承認のためにクラスターの Kubernetes [ロールベースのアクセスコントロール](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) (RBAC) に追加されます。これにより、Fargate インフラストラクチャで実行されている `kubelet` が Amazon EKS クラスターに登録され、クラスター内でノードとして表示されるようになります。詳細については、「[Amazon EKS Pod 実行 IAM ロール](pod-execution-role.md)」を参照してください。

 **サブネット**   
このプロファイルを使用する Pod を起動するサブネットの ID。現時点では、Fargate で実行されている Pod にはパブリック IP アドレスが割り当てられていません。したがって、このパラメータには、プライベートサブネット (インターネットゲートウェイへの直接ルートなし) のみが受け入れられます。

 **セレクター**   
この Fargate プロファイルを使用するために Pod に一致するセレクター。1 つの Fargate プロファイルに最大 5 つのセレクターを指定できます。セレクターには次のコンポーネントがあります:  
+  **名前空間** – セレクターの名前空間を指定する必要があります。セレクターはこの名前空間で作成された Pod のみを照合します。ただし、複数のセレクターを作成して複数の名前空間をターゲットにすることはできます。
+  **ラベル** – オプションで、セレクターに一致する Kubernetes ラベルを指定できます。セレクターは、セレクターで指定されているすべてのラベルを持つ Pod のみに一致します。

## Fargate プロファイルのワイルドカード
<a name="fargate-profile-wildcards"></a>

名前空間、ラベルキー、およびラベル値のセレクター基準では、Kubernetes で許可されている文字に加えて、`*` および `?` の使用が許可されています。
+  `*` は、文字なし、1 文字、または複数の文字を表します。例: `prod*` は `prod` および `prod-metrics` を表します。
+  `?` は 1 文字を表します (例: `value?` は `valuea` を表します)。しかし、`value` および `value-a` を表すことはできません。`?` は厳密に 1 文字だけを表すためです。

これらのワイルドカード文字は、任意の位置や組み合わせで使用できます (例: `prod*`、`*dev`、および `frontend*?`)。正規表現など、他のワイルドカードやパターンマッチング形式はサポートされていません。

Pod 仕様内の名前空間とラベルに一致するプロファイルが複数ある場合、Fargate はプロファイル名による英数字ソートに基づいてプロファイルを選択します。例えば、(`beta-workload` という名前の) プロファイル A と (`prod-workload` という名前の) プロファイル B の両方に、起動する Pod に一致するセレクターがある場合、Fargate は Pod にプロファイル A (`beta-workload`) を選択します。Pod には、プロファイル A のラベルが付いています (例: `eks.amazonaws.com/fargate-profile=beta-workload`)。

ワイルドカードを使用する新しいプロファイルに既存の Fargate Pod を移行するには、次の 2 つの方法があります。
+ 一致するセレクターを持つ新しいプロファイルを作成し、古いプロファイルを削除します。古いプロファイルでラベル付けされたポッドは、一致する新しいプロファイルに再スケジュールされます。
+ ワークロードを移行したいものの、各 Fargate Pod にどの Fargate ラベルが付いているかわからない場合は、次の方法を使用できます。新しいプロファイルを作成し、同じクラスター上のプロファイルの中でアルファベット順で最初に並べられる名前を付けます。次に、新しいプロファイルに移行する必要がある Fargate Pod をリサイクルします。

## Fargate プロファイルの作成
<a name="create-fargate-profile"></a>

このセクションでは、Fargate プロファイルを作成する方法について説明します。また、Fargate プロファイルに使用する Pod 実行ロールを作成しておく必要があります。詳細については、「[Amazon EKS Pod 実行 IAM ロール](pod-execution-role.md)」を参照してください。Fargate で実行されている Pod は、プライベートサブネットでのみサポートされています (AWS サービスへの [NAT ゲートウェイ](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)アクセスはできますが、インターネットゲートウェイへの直接ルーティングはできません)。これは、クラスターの VPC がプライベートサブネットを使用できるようにするためです。

プロファイルは以下を使用して作成できます。
+  [`eksctl`](#eksctl_create_a_fargate_profile) 
+  [AWS マネジメントコンソール](#console_create_a_fargate_profile) 

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

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

以下の `eksctl` コマンドで Fargate プロファイルを作成し、すべてのサンプル値を自分の値に置き換えます。名前空間を指定する必要があります。ただし、`--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-wildcards)」を参照してください。

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

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

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

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

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

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

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

   1. **[名前]** に、Fargate プロファイルの一意の名前 (`my-profile` など) を入力します。

   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. [**Next**] を選択します。

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

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

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

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

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