

# CloudFormation または Helm を使用して Enhanced Container Insights (Classic) をデプロイする
<a name="container-insights-eks-classic-iac"></a>

CloudFormation テンプレートまたは Helm チャートを使用して、Enhanced Container Insights (Classic) を Infrastructure as Code としてデプロイできます。このアプローチでは、v6.2.0 より前のバージョンで `amazon-cloudwatch-observability` アドオンをインストールして Classic メトリクスパイプラインを有効にします。IaC パイプラインを介してクラスターを管理し、バージョン管理された反復可能なデプロイが必要な場合は、このアプローチを選択します。

**推奨事項**  
新しいデプロイでは、OTel ベースのパイプラインでアドオンバージョン 6.2.0 以降を使用する [OTel Container Insights (推奨)](container-insights-eks-otel.md) をお勧めします。

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

CloudFormation または Helm を使用して Enhanced Container Insights (Classic) をデプロイする前に、次の要件を満たしていることを確認します。
+ Kubernetes バージョン 1.25 以降を実行している既存の Amazon EKS クラスター
+ AWS CLI バージョン 2.12.0 以降
+ `kubectl` がターゲットクラスターと通信できるように設定されていること
+ CloudFormation スタック作成の IAM アクセス許可 (CloudFormation メソッドの場合)
+ Helm v3.8 以降 (Helm メソッドの場合)
+ クラスターから CloudWatch エンドポイントへのアウトバウンドインターネットアクセス

## CloudFormation でデプロイする
<a name="container-insights-eks-classic-iac-cloudformation"></a>

CloudFormation テンプレートを使用して、Classic 設定で CloudWatch Observability アドオンをデプロイします。このテンプレートは `AWS::EKS::Addon` リソースを使用して、v6.2.0 より前のバージョンでアドオンをインストールします。

### CloudFormation テンプレート
<a name="container-insights-eks-classic-iac-cfn-template"></a>

次のテンプレートは、Amazon EKS クラスターで Enhanced Container Insights (Classic) を有効にするために必要なリソースを作成します。

```
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy Enhanced Container Insights (Classic) on an EKS cluster

Parameters:
  ClusterName:
    Type: String
    Description: The name of your EKS cluster

Resources:
  CloudWatchAgentRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: EKS-CloudWatch-Agent-Role
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: pods.eks.amazonaws.com
            Action:
              - sts:AssumeRole
              - sts:TagSession
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

  PodIdentityAssociation:
    Type: AWS::EKS::PodIdentityAssociation
    Properties:
      ClusterName: !Ref ClusterName
      Namespace: amazon-cloudwatch
      ServiceAccount: cloudwatch-agent
      RoleArn: !GetAtt CloudWatchAgentRole.Arn

  CloudWatchObservabilityAddon:
    Type: AWS::EKS::Addon
    DependsOn: PodIdentityAssociation
    Properties:
      ClusterName: !Ref ClusterName
      AddonName: amazon-cloudwatch-observability
      AddonVersion: v5.4.0-eksbuild.1
      ServiceAccountRoleArn: !GetAtt CloudWatchAgentRole.Arn
      ResolveConflicts: OVERWRITE
```

このテンプレートによって以下のリソースが作成されます。
+ `CloudWatchAgentServerPolicy` 管理ポリシーがアタッチされた IAM ロール
+ ロールを CloudWatch エージェントサービスアカウントにマッピングする EKS Pod Identity の関連付け
+ Classic バージョン (v6.2.0 より前) の `amazon-cloudwatch-observability` EKS アドオン

### CloudFormation スタックをデプロイするには
<a name="container-insights-eks-classic-iac-cfn-deploy"></a>

AWS CLI を使用してテンプレートから CloudFormation スタックを作成します。

**スタックをデプロイするには**

1. 上記のテンプレートを `classic-container-insights.yaml` という名前のファイルに保存します。

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

   ```
   aws cloudformation create-stack \
     --stack-name classic-container-insights \
     --template-body file://classic-container-insights.yaml \
     --parameters ParameterKey=ClusterName,ParameterValue={{cluster-name}} \
     --capabilities CAPABILITY_NAMED_IAM
   ```

1. スタックの作成が完了するのを待機します。

   ```
   aws cloudformation wait stack-create-complete \
     --stack-name classic-container-insights
   ```

1. スタックのステータスが `CREATE_COMPLETE` になっていることを確認します。

   ```
   aws cloudformation describe-stacks \
     --stack-name classic-container-insights \
     --query "Stacks[0].StackStatus" \
     --output text
   ```

## Helm を使用してデプロイする
<a name="container-insights-eks-classic-iac-helm"></a>

Helm で Kubernetes ワークロードを管理する場合は、Helm チャートを使用して Enhanced Container Insights (Classic) をデプロイします。このチャートは、Classic メトリクスパイプラインを使用して CloudWatch Observability オペレーターをインストールします。

**注記**  
Helm を使用する場合は、IAM ロールと Pod Identity の関連付けを別途作成する必要があります。Helm チャートは、Kubernetes リソースのみをインストールします。

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

Helm チャートをインストールする前に、CloudWatch エージェント用の IAM ロールを作成します。

**IAM ロールと Pod Identity の関連付けを作成するには**

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
   ```

1. 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
   ```

### ステップ 2: Helm チャートをインストールする
<a name="container-insights-eks-classic-iac-helm-install"></a>

Classic バージョン (v6.2.0 より前) で CloudWatch Observability Helm チャートをインストールします。

**Helm チャートをインストールするには**

1. 以下のコマンドを実行してください。{{cluster-name}} を Amazon EKS クラスターの名前に、{{region}} を AWS リージョンに置き換えます。

   ```
   helm install amazon-cloudwatch-observability \
     oci://public.ecr.aws/cloudwatch-agent/amazon-cloudwatch-observability-helm-chart \
     --namespace amazon-cloudwatch \
     --create-namespace \
     --set clusterName={{cluster-name}} \
     --set region={{region}} \
     --version 5.4.0
   ```

1. Helm リリースが正常にデプロイされたことを確認します。

   ```
   helm list -n amazon-cloudwatch
   ```

   ステータスは `deployed` であることが必要です。

## デプロイメントを確認する
<a name="container-insights-eks-classic-iac-verify"></a>

CloudFormation スタックの作成または Helm のインストールが完了したら、アドオンが実行され、CloudWatch にデータが送信されていることを確認します。

**デプロイを確認するには**

1. CloudWatch エージェントポッドが実行されていることを確認します。

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

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

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

1. ナビゲーションペインで、**[Metrics]** (メトリクス)、**[All metrics]** (すべてのメトリクス) の順に選択します。

1. メトリクスがクラスター `ContainerInsights` の名前空間に表示されることを確認します。

メトリクスは通常、デプロイ完了後 3～5 分以内に CloudWatch に表示されます。

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

Enhanced Container Insights (Classic) をデプロイしたら、次のトピックを確認できます。
+ コンソールベースのセットアップについては、「[コンソールから Enhanced Container Insights (Classic) を有効にする](container-insights-eks-classic-console.md)」を参照してください。
+ AWS CLI ベースのセットアップについては、「[セットアップガイド (AWS CLI)](container-insights-eks-classic-setup.md)」を参照してください。
+ Enhanced Container Insights (Classic) が収集するメトリクスについては、「[Enhanced Container Insights (Classic) メトリクスのリファレンス](container-insights-eks-classic-metrics.md)」を参照してください。
+ OTel Container Insights に移行するには、「[Enhanced Container Insights (Classic) から OTel Container Insights に移行する](container-insights-eks-migrate-from-classic.md)」を参照してください。
+ OTel Container Insights の詳細については、「[OTel Container Insights (推奨)](container-insights-eks-otel.md)」を参照してください。