

# CloudFormation 또는 헬름을 사용하여 Enhanced Container Insights(Classic) 배포
<a name="container-insights-eks-classic-iac"></a>

CloudFormation 템플릿 또는 헬름 차트를 사용하여 Enhanced Container Insights(Classic)를 코드형 인프라로 배포할 수 있습니다. 이러한 접근 방식은 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 또는 헬름을 사용하여 Enhanced Container Insights(Classic)를 배포하기 전에 다음 요구 사항을 충족하는지 확인합니다.
+ Kubernetes 버전 1.25 이상을 실행하는 기존의 Amazon EKS 클러스터
+ AWS CLI 버전 2.12.0 이상
+ 대상 클러스터와 통신하도록 구성된 `kubectl`
+ CloudFormation 스택 생성에 대한 IAM 권한(CloudFormation 메서드의 경우)
+ 헬름 v3.8 이상(헬름 메서드의 경우)
+ 클러스터에서 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 버전을 사용하는 `amazon-cloudwatch-observability` EKS 추가 기능(v6.2.0 이전)

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

## 헬름을 사용하여 배포
<a name="container-insights-eks-classic-iac-helm"></a>

헬름으로 Kubernetes 워크로드를 관리하는 경우 헬름 차트를 사용하여 Enhanced Container Insights(Classic)를 배포합니다. 차트는 Classic 지표 파이프라인과 함께 CloudWatch Observability 오퍼레이터를 설치합니다.

**참고**  
헬름을 사용하는 경우 IAM 역할과 Pod Identity 연결을 별도로 생성해야 합니다. 헬름 차트는 Kubernetes 리소스만 설치합니다.

### 1단계 - IAM 역할 생성
<a name="container-insights-eks-classic-iac-helm-iam"></a>

헬름 차트를 설치하기 전에 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단계: 헬름 차트 설치
<a name="container-insights-eks-classic-iac-helm-install"></a>

Classic 버전(v6.2.0 이전)을 사용하여 CloudWatch Observability 헬름 차트를 설치합니다.

**헬름 차트 설치**

1. 다음 명령을 실행합니다. {{cluster-name}}을 Amazon EKS 클러스터의 이름으로 바꾸고 {{리전}}을 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 list -n amazon-cloudwatch
   ```

   상태는 `deployed`여야 합니다.

## 배포 확인
<a name="container-insights-eks-classic-iac-verify"></a>

CloudFormation 스택 생성 또는 헬름 설치가 완료되면 추가 기능이 실행 중이고 CloudWatch로 데이터를 전송하는지 확인합니다.

**배포를 확인하려면**

1. CloudWatch 에이전트 포드가 실행 중인지 확인합니다.

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

   모든 포드에 `Running` 상태가 표시되어야 합니다.

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **지표**를 선택한 다음 **모든 지표**를 선택합니다.

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-eks-migrate-from-classic.md) 섹션을 참조하세요.
+ OTel Container Insights에 대한 자세한 정보는 [OTel Container Insights(권장)](container-insights-eks-otel.md) 섹션을 참조하세요.