

# セットアップガイド (AWS CLI)
<a name="container-insights-eks-classic-setup"></a>

このガイドでは、AWS CLI を使用して、既存の Amazon EKS クラスターに Enhanced Container Insights (Classic) をインストールする方法について説明します。アドオンは、インフラストラクチャメトリクス、コンテナログ、パフォーマンスデータを収集する DaemonSet として CloudWatch エージェントをデプロイします。

**メンテナンスモード**  
Enhanced Container Insights (Classic) はメンテナンスモードになっています。新しいデプロイには [OTel Container Insights (推奨)](container-insights-eks-otel.md) をお勧めします。

## 前提条件
<a name="container-insights-eks-classic-setup-prereqs"></a>

開始する前に、以下の前提条件を満たしていることを確認します。
+ Kubernetes バージョン 1.25 以降を実行している既存の Amazon EKS クラスター
+ プラットフォームバージョン `eks.1` 以降
+ AWS CLI バージョン 2.12.0 以降
+ `kubectl` がターゲットクラスターと通信できるように設定されていること
+ IAM アクセス許可: `eks:CreateAddon`、`eks:DescribeAddon`、`iam:CreateServiceLinkedRole`、`iam:CreateRole`、および `iam:AttachRolePolicy`
+ クラスターにインストールされた EKS Pod Identity Agent アドオン、または設定済みのサービスアカウントの IAM ロール (IRSA)
+ クラスターから CloudWatch エンドポイントへのアウトバウンドインターネットアクセス

## ステップ 1: IAM ロールを作成する
<a name="container-insights-eks-classic-setup-step1"></a>

CloudWatch エージェントが CloudWatch にデータを送信できるようにする IAM ロールを作成します。

**CloudWatch エージェント IAM ロールを作成するには**

1. EKS Pod Identity 用の信頼ポリシーを持つロールを作成するには、次のコマンドを実行します。

   ```
   aws iam create-role \
     --role-name EKS-CloudWatch-Agent-Role \
     --assume-role-policy-document '{
       "Version": "2012-10-17",
       "Statement": [{
         "Effect": "Allow",
         "Principal": { "Service": "pods.eks.amazonaws.com" },
         "Action": ["sts:AssumeRole", "sts:TagSession"]
       }]
     }'
   ```

1. `CloudWatchAgentServerPolicy` 管理ポリシーをロールにアタッチします。

   ```
   aws iam attach-role-policy \
     --role-name EKS-CloudWatch-Agent-Role \
     --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
   ```

## ステップ 2: Pod Identity の関連付けを作成する
<a name="container-insights-eks-classic-setup-step2"></a>

IAM ロールをクラスター内の CloudWatch エージェントサービスアカウントに関連付けます。

**Pod Identity の関連付けを作成するには**
+ 以下のコマンドを実行してください。{{cluster-name}} を Amazon EKS クラスターの名前に、{{account-id}} を AWS アカウント ID に置き換えます。

  ```
  aws eks create-pod-identity-association \
    --cluster-name {{cluster-name}} \
    --namespace amazon-cloudwatch \
    --service-account cloudwatch-agent \
    --role-arn arn:aws:iam::{{account-id}}:role/EKS-CloudWatch-Agent-Role
  ```

## ステップ 3: Amazon CloudWatch Observability アドオンをインストールする
<a name="container-insights-eks-classic-setup-step3"></a>

クラスターに `amazon-cloudwatch-observability` アドオンをインストールします。

**アドオンをインストールするには**
+ 以下のコマンドを実行してください。{{cluster-name}} は、自分の Amazon EKS クラスターに置き換えます。

  ```
  aws eks create-addon \
    --cluster-name {{cluster-name}} \
    --addon-name amazon-cloudwatch-observability \
    --addon-version {{v5.x.x-eksbuild.x}}
  ```

  {{v5.x.x-eksbuild.x}} を利用可能な最新の v5.x バージョンに置き換えます。`--addon-version` なしでインストールすると、最新バージョン (v6.2.0 以降) がインストールされ、Classic ではなく OTel パイプラインがアクティブ化されます。

## ステップ 4: アドオンのステータスを確認する
<a name="container-insights-eks-classic-setup-step4"></a>

アドオンが正常にインストールされたことを確認します。

**アドオンのステータスを確認するには**
+ 以下のコマンドを実行してください。{{cluster-name}} は、自分の Amazon EKS クラスターに置き換えます。

  ```
  aws eks describe-addon \
    --cluster-name {{cluster-name}} \
    --addon-name amazon-cloudwatch-observability \
    --query "addon.status" \
    --output text
  ```

  期待される出力は `ACTIVE` です。

## ステップ 5: エージェントポッドが実行されていることを確認する
<a name="container-insights-eks-classic-setup-step5"></a>

CloudWatch エージェントポッドが `amazon-cloudwatch` 名前空間で実行されていることを確認します。

**エージェントポッドが実行されていることを確認するには**
+ 以下のコマンドを実行してください。

  ```
  kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent
  ```

  すべてのエージェントポッドが `Running` ステータスになっている必要があります。

## CloudWatch でデータを確認する
<a name="container-insights-eks-classic-setup-verify"></a>

セットアップを完了すると、3～5 分以内に Container Insights データが CloudWatch に表示されます。

**Container Insights データを確認するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Container Insights]** を選択します。

1. `node_cpu_utilization` や `pod_memory_utilization` など、クラスターのメトリクスが表示されることを確認します。

## トラブルシューティング
<a name="container-insights-eks-classic-setup-troubleshoot"></a>

Amazon EKS に Enhanced Container Insights (Classic) をインストールするときに発生する一般的な問題を解決するには、次のガイダンスを使用します。

### アドオンのステータスが CREATE\_FAILED または DEGRADED と表示される
<a name="container-insights-eks-classic-setup-ts-create-failed"></a>

**症状:** `aws eks describe-addon` を実行すると、ステータスに `CREATE_FAILED` または `DEGRADED` が表示されます。

**原因:** IAM アクセス許可が不十分であるか、Pod Identity の関連付けがないため、アドオンのインストールに失敗したためです。

**解決策:** この問題を解決するには、次の手順に従います。

1. 次のコマンドを実行して、詳細なエラー情報を確認します。{{cluster-name}} をクラスターの名前に置き換えます。

   ```
   aws eks describe-addon \
     --cluster-name {{cluster-name}} \
     --addon-name amazon-cloudwatch-observability \
     --query "addon.health"
   ```

1. IAM ロールが存在し、`CloudWatchAgentServerPolicy` がアタッチされていることを確認します。

1. Pod Identity の関連付けが正しい名前空間 (`amazon-cloudwatch`) とサービスアカウント (`cloudwatch-agent`) を対象としていることを確認します。

1. 障害が発生したアドオンを削除し、問題を解決した後に再インストールします。

   ```
   aws eks delete-addon \
     --cluster-name {{cluster-name}} \
     --addon-name amazon-cloudwatch-observability
   ```

### 5 分経過しても CloudWatch にメトリクスが表示されない
<a name="container-insights-eks-classic-setup-ts-no-metrics"></a>

**症状:** エージェントポッドは `Running` ステータスを表示しますが、5 分後に CloudWatch にメトリクスが表示されません。

**原因:** ネットワークの制限または IAM アクセス許可が正しくないため、エージェントが CloudWatch にデータを送信できないためです。

**解決策:** この問題を解決するには、次の手順に従います。

1. VPC セキュリティグループとネットワーク ACL が CloudWatch エンドポイントへのアウトバウンド HTTPS トラフィック (ポート 443) を許可していることを確認します。

1. アクセス許可エラーまたは接続タイムアウトがないか、エージェントログで確認します。

   ```
   kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "error\|timeout\|denied"
   ```

1. IAM ロールに `CloudWatchAgentServerPolicy` ポリシーがアタッチされており、信頼ポリシーで `pods.eks.amazonaws.com` が許可されていることを確認します。

### エージェントポッドが保留中または CrashLoopBackOff でスタックする
<a name="container-insights-eks-classic-setup-ts-crashloop"></a>

**症状:** `kubectl get pods -n amazon-cloudwatch` を実行すると、1 つまたは複数のポッドに `Pending` または `CrashLoopBackOff` ステータスが表示されます。

**原因:** ノードリソースの不足、イメージプルの失敗、またはアクセス許可がないため、エージェントポッドを起動できないためです。

**解決策:** この問題を解決するには、次の手順に従います。

1. ポッドイベントで詳細なエラーメッセージを確認します。

   ```
   kubectl describe pod -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent
   ```

1. エージェントポッドで使用できる十分な CPU とメモリがノードにあることを確認します。

1. EKS Pod Identity Agent アドオンがインストールされ、実行されていることを確認します。

   ```
   kubectl get pods -n kube-system -l app.kubernetes.io/name=eks-pod-identity-agent
   ```

## 次のステップ
<a name="container-insights-eks-classic-setup-next"></a>

すぐにアップグレードしますか? Enhanced Container Insights (Classic) から OTel Container Insights に移行するステップバイステップの手順については、「[Enhanced Container Insights (Classic) から OTel Container Insights に移行する](container-insights-eks-migrate-from-classic.md)」を参照してください。