

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Implementazione dell' CloudWatch agente per raccogliere parametri a livello di istanza EC2 su Amazon ECS
<a name="deploy-container-insights-ECS-instancelevel"></a>

Per distribuire l' CloudWatch agente per raccogliere parametri a livello di istanza dai cluster Amazon ECS ospitati su un'istanza EC2, utilizza una configurazione di avvio rapido con una configurazione predefinita o installa l'agente manualmente per poterlo personalizzare.

Entrambi i metodi richiedono che tu disponga già di almeno un cluster Amazon ECS distribuito con un tipo di avvio EC2 e che il contenitore dell' CloudWatch agente abbia accesso all'Amazon EC2 Instance Metadata Service (IMDS). Per ulteriori informazioni su IMDS, consulta [Metadati dell'istanza e dati utente](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html).

Questi metodi presuppongono inoltre che tu abbia installato il. AWS CLI Inoltre, per eseguire i comandi nelle procedure seguenti, devi accedere a un account o ruolo con le politiche **IAMFullAccess** e **FullAccessAmazoneCS\$1**.

**Importante**  
Quando definisci il contenitore dell' CloudWatch agente nella definizione dell'attività, imposta. `essential: false` Ciò impedisce l'interruzione dell'intero servizio Amazon ECS in caso di guasto del contenitore CloudWatch Agent. Anche se l'agente è temporaneamente non disponibile, altri container di applicazioni critiche continueranno a funzionare.

**Topics**
+ [Configurazione rapida utilizzando CloudFormation](#deploy-container-insights-ECS-instancelevel-quickstart)
+ [Configurazione manuale e personalizzata](#deploy-container-insights-ECS-instancelevel-manual)

## Configurazione rapida utilizzando CloudFormation
<a name="deploy-container-insights-ECS-instancelevel-quickstart"></a>

Per utilizzare la configurazione rapida, inserisci il seguente comando da utilizzare per installare l'agente. CloudFormation Sostituisci *cluster-name* e *cluster-region* con il nome e la regione del tuo cluster Amazon ECS.

Questo comando crea i ruoli IAM **CWAgentECSTaskRole** e **CWAgentECSExecutionRole**. Se questi ruoli esistono già nell'account, utilizza `ParameterKey=CreateIAMRoles,ParameterValue=False` anziché `ParameterKey=CreateIAMRoles,ParameterValue=True` quando immetti il comando. In caso contrario, il comando avrà esito negativo.

```
ClusterName=cluster-name
Region=cluster-region
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=CreateIAMRoles,ParameterValue=True \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**(Alternativa) Utilizzo dei propri ruoli IAM**

Se desideri utilizzare il tuo ruolo di attività ECS personalizzato e il tuo ruolo di esecuzione dell'attività ECS anziché i ruoli **CWAgentECSTaskRuolo** e **CWAgentECSExecutionRuolo**, assicurati innanzitutto che il ruolo da utilizzare come ruolo di attività ECS sia associato. **CloudWatchAgentServerPolicy** Inoltre, assicurati che al ruolo da utilizzare come ruolo di esecuzione delle attività ECS siano associate **CloudWatchAgentServerPolicy**sia le ECSTask ExecutionRolePolicy policy che quelle di **Amazon**. Quindi, immetti il comando seguente: Nel comando, sostituisci *task-role-arn* con l'ARN del tuo ruolo di attività ECS personalizzato e sostituiscilo con *execution-role-arn* l'ARN del tuo ruolo di esecuzione dell'attività ECS personalizzato.

```
ClusterName=cluster-name
Region=cluster-region
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=TaskRoleArn,ParameterValue=${TaskRoleArn} \
                 ParameterKey=ExecutionRoleArn,ParameterValue=${ExecutionRoleArn} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**Risoluzione dei problemi relativi alla configurazione rapida**

Per verificare lo stato dello CloudFormation stack, inserisci il seguente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stacks --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Se `StackStatus` è diverso da `CREATE_COMPLETE` o `CREATE_IN_PROGRESS`, controlla gli eventi di stack per trovare l'errore. Inserire il seguente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stack-events --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Per verificare lo stato del servizio daemon `cwagent`, immetti il seguente comando. Nell'output, deve essere mostrato che `runningCount` è uguale a `desiredCount` nella sezione `deployment`. In caso contrario, controlla la sezione `failures` nell'output.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs describe-services --services cwagent-daemon-service --cluster $ClusterName --region $Region
```

Puoi anche utilizzare la console CloudWatch Logs per controllare il registro dell'agente. Cerca il gruppo di log **ecs-cwagent-daemon-service/ecs/.**

**Eliminazione dello stack per l'agente CloudFormation CloudWatch **

Se è necessario eliminare lo CloudFormation stack, immettere il seguente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation delete-stack --stack-name CWAgentECS-${ClusterName}-${Region} --region ${Region}
```

## Configurazione manuale e personalizzata
<a name="deploy-container-insights-ECS-instancelevel-manual"></a>

Segui i passaggi in questa sezione per distribuire manualmente l' CloudWatch agente per raccogliere parametri a livello di istanza dai tuoi cluster Amazon ECS ospitati su istanze EC2.

### Ruoli e policy IAM necessari
<a name="deploy-container-insights-ECS-instancelevel-IAMRoles"></a>

Sono richiesti due ruoli IAM. Se non esistono già è necessario crearli. Per ulteriori informazioni su questi ruoli, consulta [Ruoli IAM per attività](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) e [Ruolo per l'esecuzione di attività Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html).
+ Un *ruolo di attività ECS*, utilizzato dall'agente per pubblicare le metriche. CloudWatch Se questo ruolo esiste già, è necessario assicurarsi che ad esso sia collegata la policy `CloudWatchAgentServerPolicy`.
+ Un *ruolo di esecuzione delle attività ECS*, utilizzato dall'agente Amazon ECS per avviare l' CloudWatch agente. Se questo ruolo esiste già, è necessario assicurarsi che le policy `AmazonECSTaskExecutionRolePolicy` e `CloudWatchAgentServerPolicy` siano collegate ad esso.

Se questi ruoli non sono ancora disponibili, puoi utilizzare i seguenti comandi per crearli e collegare le policy necessarie. Questo primo comando crea il ruolo attività ECS.

```
aws iam create-role --role-name CWAgentECSTaskRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Dopo aver immesso il comando precedente, annota il valore dell'output `Arn` del comando come "»TaskRoleArn. Questo sarà richiesto in seguito durante la creazione della definizione di attività. Quindi immetti il seguente comando per collegare le policy necessarie.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSTaskRole
```

Questo comando successivo crea il ruolo per l'esecuzione di attività ECS.

```
aws iam create-role --role-name CWAgentECSExecutionRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Dopo aver immesso il comando precedente, annotate il valore `Arn` dell'output del comando come "ExecutionRoleArn». Questo sarà richiesto in seguito durante la creazione della definizione di attività. Quindi immetti i seguenti comandi per collegare le policy necessarie.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSExecutionRole
          
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy \
    --role-name CWAgentECSExecutionRole
```

### Creazione della definizione di attività e avvio del servizio Daemon
<a name="deploy-container-insights-ECS-instancelevel-taskdefinition"></a>

Crea una definizione di attività e usala per avviare l'agente come servizio daemon. CloudWatch Per creare la definizione di attività, immetti il seguente comando. Nelle prime righe, sostituisci i segnaposto con i valori effettivi per la distribuzione. *logs-region*è la regione in cui si trova CloudWatch Logs ed *cluster-region* è la regione in cui si trova il cluster. *task-role-arn*è l'Arn del ruolo dell'attività ECS che si sta utilizzando ed *execution-role-arn* è l'Arn del ruolo di esecuzione dell'attività ECS.

```
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
AWSLogsRegion=logs-region
Region=cluster-region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json \
    | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
    | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
```

Quindi esegui il seguente comando per avviare il servizio daemon. Sostituisci *cluster-name* e *cluster-region* con il nome e la regione del tuo cluster Amazon ECS.

**Importante**  
Rimuovi tutte le strategie dei provider di capacità prima di eseguire questo comando. In caso contrario, il comando non funzionerà.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs create-service \
    --cluster ${ClusterName} \
    --service-name cwagent-daemon-service \
    --task-definition ecs-cwagent-daemon-service \
    --scheduling-strategy DAEMON \
    --region ${Region}
```

Se viene visualizzato questo messaggio di errore, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, un servizio daemon denominato `cwagent-daemon-service` è già stato creato. Elimina innanzitutto tale servizio, utilizzando il comando riportato di seguito come un esempio.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs delete-service \
    --cluster ${ClusterName} \
    --service cwagent-daemon-service \
    --region ${Region} \
    --force
```

### (Facoltativo) Configurazione avanzata
<a name="deploy-container-insights-ECS-instancelevel-advanced"></a>

Facoltativamente, puoi utilizzare SSM per specificare altre opzioni di configurazione per l' CloudWatchagente nei tuoi cluster Amazon ECS ospitati su istanze EC2. Le opzioni sono le seguenti:
+ `metrics_collection_interval`— Con quale frequenza, in secondi, l'agente raccoglie i parametri. CloudWatch Il valore predefinito è 60. L'intervallo varia tra 1 e 172.000.
+ `endpoint_override` (Facoltativo): specifica un endpoint diverso a cui inviare i log. Potrebbe essere richiesto se si sta pubblicando da un cluster in un VPC e si desidera inviare i dati di log a un endpoint VPC.

  Il valore di `endpoint_override` deve essere una stringa che è un URL.
+ `force_flush_interval`: specifica in secondi la quantità massima di tempo in cui i log rimangono nel buffer di memoria prima di essere inviati al server. Indipendentemente dall'impostazione di questo campo, se la dimensione dei log nel buffer raggiunge 1 MB, i log vengono immediatamente inviati al server. Il valore predefinito è 5 secondi.
+ `region`: per impostazione predefinita, l'agente pubblica i parametri nella stessa regione in cui si trova l'istanza di container Amazon ECS. Per sovrascriverla, è possibile specificare una regione diversa qui. Ad esempio, `"region" : "us-east-1"`

Di seguito è riportato un esempio di configurazione personalizzata:

```
{
    "agent": {
        "region": "us-east-1"
    },
    "logs": {
        "metrics_collected": {
            "ecs": {
                "metrics_collection_interval": 30
            }
        },
        "force_flush_interval": 5
    }
}
```

**Per personalizzare la configurazione degli CloudWatch agenti nei contenitori Amazon ECS**

1. Assicurati che la SSMRead OnlyAccess policy di **Amazon** sia associata al tuo ruolo di Amazon ECS Task Execution. A questo scopo, è possibile immettere il seguente comando. Questo esempio presuppone che il ruolo di Amazon ECS Task Execution sia CWAgent ECSExecution Role. Se utilizzi un ruolo diverso, sostituire tale nome del ruolo nel comando seguente.

   ```
   aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \
           --role-name CWAgentECSExecutionRole
   ```

1. Creare il file di configurazione personalizzato simile all'esempio precedente. Assegnare a questo file il nome `/tmp/ecs-cwagent-daemon-config.json`.

1. Eseguire il seguente comando per inserire questa configurazione nel Parameter Store. Sostituisci *cluster-region* con la regione del tuo cluster Amazon ECS. Per eseguire questo comando, devi accedere a un utente o a un ruolo con la politica di **Amazon SSMFull Access**.

   ```
   Region=cluster-region
   aws ssm put-parameter \
       --name "ecs-cwagent-daemon-service" \
       --type "String" \
       --value "`cat /tmp/ecs-cwagent-daemon-config.json`" \
       --region $Region
   ```

1. Scaricare il file di definizione dell'attività in un file locale, ad esempio `/tmp/cwagent-ecs-instance-metric.json`

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json -o /tmp/cwagent-ecs-instance-metric.json
   ```

1. Modificare il file di definizione dell'attività. Rimuovere la sezione seguente:

   ```
   "environment": [
                   {
                       "name": "USE_DEFAULT_CONFIG",
                       "value": "True"
                   }
               ],
   ```

   Sostituire tale sezione con la seguente:

   ```
   "secrets": [
                   {
                       "name": "CW_CONFIG_CONTENT",
                       "valueFrom": "ecs-cwagent-daemon-service"
                   }
               ],
   ```

1. Riavviare l'agente come servizio daemon effettuando la seguente procedura:

   1. Eseguire il seguente comando seguente.

      ```
      TaskRoleArn=task-role-arn
      ExecutionRoleArn=execution-role-arn
      AWSLogsRegion=logs-region
      Region=cluster-region
      cat /tmp/cwagent-ecs-instance-metric.json \
          | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
          | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
      ```

   1. Eseguire il comando seguente per avviare il servizio daemon. Sostituisci *cluster-name* e *cluster-region* con il nome e la regione del tuo cluster Amazon ECS.

      ```
      ClusterName=cluster-name
      Region=cluster-region
      aws ecs create-service \
          --cluster ${ClusterName} \
          --service-name cwagent-daemon-service \
          --task-definition ecs-cwagent-daemon-service \
          --scheduling-strategy DAEMON \
          --region ${Region}
      ```

      Se viene visualizzato questo messaggio di errore, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, un servizio daemon denominato `cwagent-daemon-service` è già stato creato. Elimina innanzitutto tale servizio, utilizzando il comando riportato di seguito come un esempio.

      ```
      ClusterName=cluster-name
      Region=Region
      aws ecs delete-service \
          --cluster ${ClusterName} \
          --service cwagent-daemon-service \
          --region ${Region} \
          --force
      ```