

# Implementación de Información de contenedores de OTel con CloudFormation
<a name="container-insights-eks-otel-cfn"></a>

Puede implementar Información de contenedores de OTel como infraestructura como código mediante una plantilla de CloudFormation. Este enfoque es ideal para los equipos que administran clústeres a través de canalizaciones de IaC y desean implementaciones repetibles y controladas por versiones.

La plantilla instala el complemento `amazon-cloudwatch-observability` de EKS con Información de contenedores de OTel activado. Si prefiere la administración de paquetes nativa de Kubernetes, consulte [Implementación de Información de contenedores de OTel con Helm](container-insights-eks-otel-helm.md).

## Requisitos previos
<a name="container-insights-eks-otel-cfn-prereqs"></a>

Antes de implementar Información de contenedores de OTel con CloudFormation, asegúrese de satisfacer los siguientes requisitos.
+ Un clúster de Amazon EKS existente que ejecuta la versión 1.28 de Kubernetes o una posterior
+ AWS CLI versión 2.15.0 o posterior
+ `kubectl` configurado para comunicarse con el clúster de destino
+ Permisos de IAM para crear pilas de CloudFormation
+ Acceso de salida a Internet desde el clúster a los puntos de conexión de CloudWatch

## Deploy with CloudFormation
<a name="container-insights-eks-otel-cfn-cloudformation"></a>

Utilice una plantilla de CloudFormation para implementar el complemento de observabilidad de CloudWatch, el rol de IAM necesario y la asociación de Pod Identity en una sola pila. La plantilla usa el recurso `AWS::EKS::Addon` para instalar el complemento con Información de contenedores de OTel activado.

### CloudFormationPlantilla de
<a name="container-insights-eks-otel-cfn-template"></a>

La siguiente plantilla crea el conjunto completo de recursos que necesita para habilitar Información de contenedores de OTel en el clúster de Amazon EKS.

```
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy OTel Container Insights 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-Observability-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: v6.2.0-eksbuild.1
      ConfigurationValues: '{"otelContainerInsights":{"enabled":true}}'
      ServiceAccountRoleArn: !GetAtt CloudWatchAgentRole.Arn
      ResolveConflicts: OVERWRITE
```

Esta plantilla crea los siguientes recursos:
+ Un rol de IAM con la política administrada `CloudWatchAgentServerPolicy` adjunta
+ Una asociación de Pod Identity de EKS que asigna el rol a la cuenta de servicio del agente de CloudWatch
+ El complemento `amazon-cloudwatch-observability` de EKS con Información de contenedores de OTel activado

### Para implementar la pila de CloudFormation
<a name="container-insights-eks-otel-cfn-deploy-stack"></a>

Use la AWS CLI para crear la pila de CloudFormation a partir de la plantilla.

**Para implementar la pila**

1. Guarde la plantilla anterior en un archivo llamado `otel-container-insights.yaml`.

1. Ejecute el siguiente comando. Reemplace {{cluster-name}} por el nombre del clúster de Amazon EKS.

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

1. Espere a que se complete la creación de la pila.

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

1. Compruebe que el estado de la pila sea `CREATE_COMPLETE`.

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

## Verifique la implementación
<a name="container-insights-eks-otel-cfn-verify"></a>

Una vez finalizada la creación de la pila de CloudFormation, compruebe que el complemento se esté ejecutando y enviando datos a CloudWatch.

**Verificación de la implementación**

1. Confirme que los pods de agentes de CloudWatch estén en ejecución.

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

   Todos los pods deben mostrar el estado `Running`.

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Información de contenedores**.

1. Compruebe que el clúster aparezca en la lista de clústeres y que las métricas se estén rellenando.

Las métricas suelen aparecer en CloudWatch entre 3 y 5 minutos después de que se complete la implementación.

## Eliminación de la implementación
<a name="container-insights-eks-otel-cfn-cleanup"></a>

Para eliminar todos los recursos que creó la plantilla de CloudFormation, elimine la pila.

```
aws cloudformation delete-stack \
  --stack-name otel-container-insights
```