

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

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

# クイックスタート: ウェブアプリケーションをデプロイしてデータを保存する
<a name="quickstart"></a>

このクイックスタートチュートリアルでは、[eksctl](https://eksctl.io/) を使用して 2048 ゲームサンプルアプリケーションをデプロイし、そのデータを Amazon EKS Auto Mode クラスターに保持する手順について説明します。

 [Amazon EKS Auto Mode](automode.md) は、ブロックストレージ、ネットワーク、ロードバランシング、コンピューティングの自動スケーリングなどのルーチンタスクを自動化することで、クラスター管理を簡素化します。セットアップ中、EC2 マネージドインスタンス、Application Load Balancer、EBS ボリュームを使用したノードの作成を処理します。

要約すると、AWS サービスとのシームレスな統合に必要なカスタム注釈を含むサンプルワークロードをデプロイします。

## このチュートリアルでは
<a name="_in_this_tutorial"></a>

次の `eksctl` クラスターテンプレートを使用して、自動ノードプロビジョニング用の EKS 自動モードでクラスターを構築します。
+  **VPC 設定**: 以下の eksctl クラスターテンプレートを使用すると、eksctl はクラスターの IPv4 仮想プライベートクラウド (VPC) を自動的に作成します。デフォルトでは、eksctl はパブリックエンドポイントとプライベートエンドポイントの両方を作成するだけでなく、すべてのネットワーク要件に対応する VPC を設定します。
+  **インスタンス管理**: EKS Auto Mode は、Kubernetes アプリケーションの需要に基づいて、EKS クラスター内のノードを動的に追加または削除します。
+  **データ永続性**: EKS Auto Mode のブロックストレージ機能を使用して、ポッドの再起動や障害が発生するシナリオでも、アプリケーションデータの永続性を確保します。
+  **外部アプリケーションアクセス**: EKS Auto Mode の負荷分散機能を使用して、Application Load Balancer (ALB) を動的にプロビジョニングします。

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

始める前に、次のタスクを実行していることを確認してください。
+  [Amazon EKS の環境をセットアップする](https://docs.aws.amazon.com/eks/latest/userguide/setting-up.html) 
+  [eksctl の最新バージョンをインストールする](https://eksctl.io/installation/) 

## クラスターを設定する
<a name="_configure_the_cluster"></a>

このセクションでは、動的ノードプロビジョニングに EKS Auto Mode を使用してクラスターを作成します。

`cluster-config.yaml` ファイルを作成して、次の内容を貼り付けます。`region-code` を有効なリージョン (例: `us-east-1`) に置き換えます。

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: web-quickstart
  region: <region-code>

autoModeConfig:
  enabled: true
```

これで、クラスターを作成する準備が整いました。

`cluster-config.yaml`` を使用して EKS クラスターを作成します。

```
eksctl create cluster -f cluster-config.yaml
```

**重要**  
eksctl を使用してクラスターを作成しない場合は、VPC サブネットに手動でタグ付けする必要があります。

## IngressClass を作成する
<a name="_create_ingressclass"></a>

EKS Auto Mode の Kubernetes `IngressClass` を作成します。IngressClass は、EKS Auto Mode が Ingress リソースを処理する方法を定義します。このステップでは、EKS Auto Mode の負荷分散機能を設定します。アプリケーションの Ingress リソースを作成すると、EKS Auto Mode はこの IngressClass を使用してロードバランサーを自動的にプロビジョニングおよび管理し、Kubernetes アプリケーションを AWS ロードバランシングサービスと統合します。

次の yaml ファイルを `ingressclass.yaml` として保存します。

```
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: eks.amazonaws.com/alb
```

IngressClass をクラスターに適用します。

```
kubectl apply -f ingressclass.yaml
```

## 2048 ゲームサンプルアプリケーションをデプロイする
<a name="_deploy_the_2048_game_sample_application"></a>

このセクションでは、人気のある「2048 ゲーム」をクラスター内のサンプルアプリケーションとしてデプロイする手順について説明します。提供されたマニフェストには、Application Load Balancer (ALB) のカスタム注釈が含まれています。これらの注釈は EKS と統合され、受信 HTTP トラフィックを「internet-facing」として処理し、ターゲットタイプ「ip」を使用して `game-2048` 名前空間の適切なサービスにルーティングするように指示します。

**注記**  
この例の `docker-2048` イメージは `x86_64` コンテナイメージであり、他のアーキテクチャでは実行できません。

1. `--save-config` フラグを付けて `game-2048` という Kubernetes 名前空間を作成します。

   ```
   kubectl create namespace game-2048 --save-config
   ```

   以下のようなレスポンス出力が表示されます。

   ```
   namespace/game-2048 created
   ```

1. [2048 ゲームサンプルアプリケーション](https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml)をデプロイします。

   ```
   kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml
   ```

   このマニフェストは、`game-2048` 名前空間の Kubernetes デプロイ、サービス、およびイングレスをセットアップし、クラスター内で `game-2048` アプリケーションをデプロイして公開するために必要なリソースを作成します。これには、ポート `80` でのデプロイを公開する `service-2048` という名前のサービスの作成と、受信 HTTP トラフィックのルーティングルールと internet-facing Application Load Balancer (ALB) の注釈を定義する `ingress-2048` という名前のイングレスリソースの作成が含まれます。以下のようなレスポンス出力が表示されます。

   ```
   namespace/game-2048 configured
   deployment.apps/deployment-2048 created
   service/service-2048 created
   ingress.networking.k8s.io/ingress-2048 created
   ```

1. 次のコマンドを実行して、`game-2048` 名前空間のイングレスリソースを取得します。

   ```
   kubectl get ingress -n game-2048
   ```

   以下のようなレスポンス出力が表示されます。

   ```
   NAME           CLASS   HOSTS   ADDRESS                                                                    PORTS   AGE
   ingress-2048   alb     *       k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com   80      31s
   ```

   Application Load Balancer (ALB) がプロビジョニングされるまで数分待ってから、次のステップを開始する必要があります。

1. ウェブブラウザを開き、前のステップの `ADDRESS` を入力してウェブアプリケーションにアクセスします。例えば、次のようになります。

   ```
   k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com
   ```

   ブラウザに 2048 ゲームが表示されるはずです。プレイしてください\$1  
![\[2048 ゲームをプレイする\]](http://docs.aws.amazon.com/ja_jp/eks/latest/userguide/images/quick2048.png)

## Amazon EKS 自動モードを使用してデータを永続化する
<a name="_persist_data_using_amazon_eks_auto_mode"></a>

2048 ゲームが Amazon EKS クラスターで稼働しているので、Amazon EKS Auto Mode のブロックストレージ機能を使用してゲームデータが安全に保持されるようにします。

1. `storage-class.yaml` という名前のファイルを作成します：

   ```
   apiVersion: storage.k8s.io/v1
   kind: StorageClass
   metadata:
     name: auto-ebs-sc
     annotations:
       storageclass.kubernetes.io/is-default-class: "true"
   provisioner: ebs.csi.eks.amazonaws.com
   volumeBindingMode: WaitForFirstConsumer
   parameters:
     type: gp3
     encrypted: "true"
   ```

1. `StorageClass` を適用します。

   ```
   kubectl apply -f storage-class.yaml
   ```

1. ゲームデータのストレージをリクエストするには、永続ボリュームのクレーム (PVC) を作成します。`ebs-pvc.yaml` という名前のファイルを作成し、そのファイルに以下の内容を追加します。

   ```
   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: game-data-pvc
     namespace: game-2048
   spec:
     accessModes:
       - ReadWriteOnce
     resources:
       requests:
         storage: 10Gi
     storageClassName: auto-ebs-sc
   ```

1. PVC をクラスターに適用します。

   ```
   kubectl apply -f ebs-pvc.yaml
   ```

   以下のようなレスポンス出力が表示されます。

   ```
   persistentvolumeclaim/game-data-pvc created
   ```

1. 次に、データの保存にこの PVC を使用するように 2048 ゲームデプロイを更新する必要があります。次のデプロイは、ゲームデータの保存に PVC を使用するように設定されています。`ebs-deployment.yaml` という名前のファイルを作成し、そのファイルに以下の内容を追加します。

   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     namespace: game-2048
     name: deployment-2048
   spec:
     replicas: 3  # Adjust the number of replicas as needed
     selector:
       matchLabels:
         app.kubernetes.io/name: app-2048
     template:
       metadata:
         labels:
           app.kubernetes.io/name: app-2048
       spec:
         containers:
           - name: app-2048
             image: public.ecr.aws/l6m2t8p7/docker-2048:latest
             imagePullPolicy: Always
             ports:
               - containerPort: 80
             volumeMounts:
               - name: game-data
                 mountPath: /var/lib/2048
         volumes:
           - name: game-data
             persistentVolumeClaim:
               claimName: game-data-pvc
   ```

1. 更新されたデプロイを適用します。

   ```
   kubectl apply -f ebs-deployment.yaml
   ```

   以下のようなレスポンス出力が表示されます。

   ```
   deployment.apps/deployment-2048 configured
   ```

これらのステップでは、クラスター上の 2048 ゲームが、Amazon EKS Auto Mode のブロックストレージ機能を使用してデータを保持するように設定されました。これにより、ポッドやノードに障害が発生した場合でも、ゲームの進行状況とデータは安全になります。

このチュートリアルが気に入った場合は、フィードバックを提供してお知らせください。これにより、このようなユースケース固有のクイックスタートチュートリアルをより多く提供できるようになります。

## クリーンアップ
<a name="_clean_up"></a>

今後の料金が発生しないようにするには、関連する CloudFormation スタックを手動で削除して、VPC ネットワークを含め、このガイドで作成したすべてのリソースを削除する必要があります。

CloudFormation スタックを削除します。

```
eksctl delete cluster -f ./cluster-config.yaml
```