

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à.

# Automatizza le risposte agli errori di Amazon ECS utilizzando EventBridge
<a name="cloudwatch_event_stream"></a>

Con Amazon EventBridge, puoi automatizzare AWS i tuoi servizi e rispondere automaticamente a eventi di sistema come problemi di disponibilità delle applicazioni o modifiche delle risorse. Gli eventi AWS relativi ai servizi vengono forniti quasi EventBridge in tempo reale. Puoi compilare regole semplici che indichino quali eventi sono considerati di interesse per te e quali operazioni automatizzate intraprendere quando un evento corrisponde a una regola. Le azioni che possono essere configurate automaticamente includono le seguenti:
+ Aggiungere eventi ai gruppi di log in CloudWatch Logs
+ Invocare una funzione AWS Lambda 
+ Richiamo del comando di esecuzione di Amazon EC2
+ Inoltro dell'evento a Amazon Kinesis Data Streams
+ Attivazione di una macchina a stati AWS Step Functions 
+ Notifica di un argomento Amazon SNS o una coda Amazon Simple Queue Service (Amazon SQS)

Per ulteriori informazioni, consulta la sezione Guida [introduttiva ad Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) nella *Amazon EventBridge User Guide*.

Puoi utilizzare gli eventi Amazon ECS per EventBridge ricevere notifiche quasi in tempo reale sullo stato attuale dei tuoi cluster Amazon ECS. Se i tuoi processi utilizzano EC2, puoi visualizzare sia lo stato delle istanze di container che lo stato corrente di tutti i processi in esecuzione su tali istanze di container. Se i tuoi processi utilizzano Fargate, puoi visualizzare lo stato delle istanze di container.

Utilizzando EventBridge, puoi creare pianificatori personalizzati su Amazon ECS responsabili dell'orchestrazione delle attività tra i cluster e del monitoraggio dello stato dei cluster quasi in tempo reale. Puoi eliminare il codice di pianificazione e monitoraggio che interroga continuamente il servizio Amazon ECS per le modifiche di stato e gestire invece le modifiche di stato di Amazon ECS in modo asincrono utilizzando qualsiasi destinazione. EventBridge Gli obiettivi potrebbero includere AWS Lambda Amazon Simple Queue Service, Amazon Simple Notification Service o Amazon Kinesis Data Streams.

Un flusso di eventi Amazon ECS assicura che ogni evento venga rilasciato almeno una volta. Se vengono inviati eventi duplicati, l'evento fornisce informazioni sufficienti a identificare i duplicati. Per ulteriori informazioni, consulta [Gestione degli eventi Amazon ECS](ecs_cwet_handling.md).

Gli eventi sono relativamente ordinati, in modo che tu possa facilmente stabilire quando un evento si verifica in relazione ad altri eventi.

**Topics**
+ [

# Eventi Amazon ECS
](ecs_cwe_events.md)
+ [

# Gestione degli eventi Amazon ECS
](ecs_cwet_handling.md)

# Eventi Amazon ECS
<a name="ecs_cwe_events"></a>

Amazon ECS monitora lo stato di ogni processo e servizio. Se lo stato di un'attività o di un servizio cambia, viene generato un evento che viene inviato ad Amazon EventBridge. Questi eventi sono classificati come eventi di modifica dello stato delle attività ed eventi di operazioni di servizio. Questi eventi e le loro possibili cause vengono descritti in modo più dettagliato nelle sezioni seguenti.

Amazon ECS genera e invia i seguenti tipi di eventi a EventBridge: 
+ Modifica dello stato dell'istanza di container
+ Modifica dello stato dell'attività
+ Deployment state change (Cambio stato distribuzione)
+ Operazioni di servizio 

**Nota**  
Amazon ECS potrebbe aggiungere in futuro altri tipi di eventi, origini e dettagli. Se deserializzi i dati JSON di eventi nel codice, assicurati che l'applicazione sia in grado di gestire proprietà sconosciute al fine di evitare problemi se e quando queste proprietà aggiuntive verranno aggiunte.

In alcuni casi, per la stessa attività vengono generati più eventi. Ad esempio, quando un'attività viene avviata su un'istanza di container, viene generato un evento di modifica dello stato delle attività per la nuova attività. Viene generato un evento di modifica dello stato delle istanze di container per verificare la modifica nelle risorse disponibili, ad esempio CPU, memoria e porte disponibili, sull'istanza di container. Analogamente, se un'istanza di container viene terminata, vengono generati eventi per l'istanza di container, per lo stato di connessione dell'agente del container e per tutte le attività che erano in esecuzione sull'istanza di container.

Gli eventi di modifica dello stato del container e di modifica dello stato delle attività contengono due campi `version`: uno nel corpo principale dell'evento e uno nell'oggetto `detail` dell'evento. Di seguito vengono descritte le differenze tra questi due campi:
+ Il campo `version` nel corpo principale dell'evento è impostato su `0` per tutti gli eventi. Per ulteriori informazioni sui EventBridge parametri, consulta i [metadati degli eventi di AWS servizio](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html) nella *Amazon EventBridge User Guide*.
+ Il campo `version` nell'oggetto `detail` dell'evento descrive la versione della risorsa associata. Ogni volta che una risorsa cambia stato, tale versione viene incrementata. Poiché gli eventi possono essere inviati più volte, questo campo consente di identificare gli eventi duplicati. Gli eventi duplicati hanno la stessa versione nell'oggetto `detail`. Se stai replicando l'istanza del container Amazon ECS e lo stato dell'attività con EventBridge, puoi confrontare la versione di una risorsa riportata da Amazon ECS APIs con la versione riportata EventBridge per la risorsa (all'interno dell'`detail`oggetto) per verificare che la versione nel tuo flusso di eventi sia attuale.

Gli eventi di operazioni di servizio contengono solo il campo `version` nel corpo principale.

Gli eventi di operazioni di servizio specificano il servizio in 2 campi diversi:
+ Per gli eventi generati da `create-service`, il servizio è sul campo `serviceName`.
+ Per gli eventi generati da `update-service`, il servizio è sul campo `service`.

Se utilizzi strumenti automatizzati per gli eventi di servizio, devi codificare per entrambi i campi.

Per informazioni su come creare una regola per gli eventi di operazioni di servizio, consulta [Eventi di operazioni di servizi Amazon ECS](ecs_service_events.md).

Per ulteriori informazioni su come integrare Amazon ECS e EventBridge, consulta [Integrating Amazon and EventBridge Amazon](https://aws.amazon.com/blogs/compute/integrating-amazon-eventbridge-and-amazon-ecs/) ECS.

# Eventi di modifica dello stato delle istanze di container di Amazon ECS
<a name="ecs_container_instance_events"></a>

I seguenti scenari provocano eventi di modifica dello stato delle istanze di container.

Puoi chiamare le operazioni `StartTask``RunTask`, o `StopTask` API, direttamente o con o. Console di gestione AWS SDKs  
Collocare o interrompere le attività su un'istanza di container comporta la modifica delle risorse disponibili sull'istanza di container, come la CPU, la memoria e le porte disponibili.

Il pianificatore del servizio Amazon ECS inizia o interrompe un processo.  
Collocare o interrompere le attività su un'istanza di container comporta la modifica delle risorse disponibili sull'istanza di container, come la CPU, la memoria e le porte disponibili.

L'agente del container Amazon ECS chiama l'operazione API `SubmitTaskStateChange` con uno stato `STOPPED` per un processo con uno stato desiderato di `RUNNING`.  
L'agente del container di Amazon ECS monitora lo stato dei processi nelle istanze di container e segnala qualsiasi modifica dello stato. Se un'attività che dovrebbe essere `RUNNING` viene trasferita a `STOPPED`, l'agente rilascia le risorse che erano allocate all'attività arrestata, come la CPU, la memoria e le porte disponibili.

Si annulla la registrazione dell'istanza del contenitore con l'operazione `DeregisterContainerInstance` API, direttamente o con o. Console di gestione AWS SDKs  
L'annullamento della registrazione di un'istanza di container comporta la modifica dello stato dell'istanza di container e dello stato di connessione dell'agente del container Amazon ECS.

Un'attività è stata interrotta quando un'istanza EC2 è stata interrotta.   
Quando interrompi un'istanza di container, le attività in esecuzione vengono trasferite in stato `STOPPED`.

L'agente del container di Amazon ECS registra un'istanza di container per la prima volta.   
La prima volta che l'agente del container Amazon ECS registra un'istanza di container (all'avvio durante la prima esecuzione manuale), viene creato un evento di modifica dello stato per l'istanza.

L'agente del container Amazon ECS si connette o si disconnette da Amazon ECS.  
Quando l'agente del container Amazon ECS si connette o si disconnette dal backend di Amazon ECS modifica lo stato `agentConnected` dell'istanza di container.  
L'agente del container di Amazon ECS si disconnette e si ricollega più volte all'ora come parte del normale funzionamento, pertanto è necessario prevedere gli eventi di connessione dell'agente. Questi eventi non indicano l'esistenza di un problema con l'agente container o l'istanza di container.

Puoi aggiornare l'agente del container Amazon ECS su un'istanza.  
Il dettaglio di un'istanza di container contiene un oggetto per la versione dell'agente del container. Se aggiorni l'agente, le informazioni sulla versione cambiano e generano un evento.

**Example Evento di modifica dello stato delle istanze di container**  
Gli eventi di modifica dello stato delle istanza di container vengono forniti nel formato seguente. La `detail` sezione seguente è simile all'[ContainerInstance](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerInstance.html)oggetto restituito da un'operazione [DescribeContainerInstances](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html)API nell'*Amazon Elastic Container Service API Reference*. Per ulteriori informazioni sui EventBridge parametri, consulta i [metadati degli eventi di AWS servizio](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html) nella *Amazon EventBridge User Guide*.  

```
{
  "version": "0",
  "id": "8952ba83-7be2-4ab5-9c32-6687532d15a2",
  "detail-type": "ECS Container Instance State Change",
  "source": "aws.ecs",
  "account": "111122223333",
  "time": "2016-12-06T16:41:06Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:ecs:us-east-1:111122223333:container-instance/b54a2a04-046f-4331-9d74-3f6d7f6ca315"
  ],
  "detail": {
    "agentConnected": true,
    "attributes": [
      {
        "name": "com.amazonaws.ecs.capability.logging-driver.syslog"
      },
      {
        "name": "com.amazonaws.ecs.capability.task-iam-role-network-host"
      },
      {
        "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
      },
      {
        "name": "com.amazonaws.ecs.capability.logging-driver.json-file"
      },
      {
        "name": "com.amazonaws.ecs.capability.docker-remote-api.1.17"
      },
      {
        "name": "com.amazonaws.ecs.capability.privileged-container"
      },
      {
        "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
      },
      {
        "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
      },
      {
        "name": "com.amazonaws.ecs.capability.ecr-auth"
      },
      {
        "name": "com.amazonaws.ecs.capability.docker-remote-api.1.20"
      },
      {
        "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
      },
      {
        "name": "com.amazonaws.ecs.capability.docker-remote-api.1.22"
      },
      {
        "name": "com.amazonaws.ecs.capability.docker-remote-api.1.23"
      },
      {
        "name": "com.amazonaws.ecs.capability.task-iam-role"
      }
    ],
    "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default",
    "containerInstanceArn": "arn:aws:ecs:us-east-1:111122223333:container-instance/b54a2a04-046f-4331-9d74-3f6d7f6ca315",
    "ec2InstanceId": "i-f3a8506b",
    "registeredResources": [
      {
        "name": "CPU",
        "type": "INTEGER",
        "integerValue": 2048
      },
      {
        "name": "MEMORY",
        "type": "INTEGER",
        "integerValue": 3767
      },
      {
        "name": "PORTS",
        "type": "STRINGSET",
        "stringSetValue": [
          "22",
          "2376",
          "2375",
          "51678",
          "51679"
        ]
      },
      {
        "name": "PORTS_UDP",
        "type": "STRINGSET",
        "stringSetValue": []
      }
    ],
    "remainingResources": [
      {
        "name": "CPU",
        "type": "INTEGER",
        "integerValue": 1988
      },
      {
        "name": "MEMORY",
        "type": "INTEGER",
        "integerValue": 767
      },
      {
        "name": "PORTS",
        "type": "STRINGSET",
        "stringSetValue": [
          "22",
          "2376",
          "2375",
          "51678",
          "51679"
        ]
      },
      {
        "name": "PORTS_UDP",
        "type": "STRINGSET",
        "stringSetValue": []
      }
    ],
    "status": "ACTIVE",
    "version": 14801,
    "versionInfo": {
      "agentHash": "aebcbca",
      "agentVersion": "1.13.0",
      "dockerVersion": "DockerVersion: 1.11.2"
    },
    "updatedAt": "2016-12-06T16:41:06.991Z"
  }
}
```

# Eventi di modifica dello stato dei processi di Amazon ECS
<a name="ecs_task_events"></a>

I seguenti scenari provocano eventi di modifica dello stato delle attività:

Puoi chiamare `StartTask``RunTask`, o le operazioni `StopTask` API, direttamente o con Console di gestione AWS AWS CLI, o SDKs.  
L'avvio o l'arresto delle attività crea nuove risorse delle attività o modifica lo stato delle risorse delle attività esistenti.

Il pianificatore del servizio Amazon ECS inizia o interrompe un processo.  
L'avvio o l'arresto delle attività crea nuove risorse delle attività o modifica lo stato delle risorse delle attività esistenti.

L'agente del container Amazon ECS chiama l'operazione API `SubmitTaskStateChange`  
Per EC2, l'agente del container di Amazon ECS monitora lo stato dei processi nelle istanze di container. L'agente del container di Amazon ECS segnala eventuali modifiche allo stato. Le modifiche dello stato potrebbero includere modifiche da `PENDING` a `RUNNING` o da `RUNNING` a `STOPPED`.

Si forza l'annullamento della registrazione dell'istanza del contenitore sottostante con l'operazione `DeregisterContainerInstance` API e il `force` flag, direttamente o con l'opzione o. Console di gestione AWS SDKs  
L'annullamento della registrazione di un'istanza di container comporta la modifica dello stato dell'istanza di container e dello stato di connessione dell'agente del container Amazon ECS. Se le attività sono in esecuzione sull'istanza di container, il flag `force` deve essere impostato per consentire l'annullamento della registrazione. Ciò arresta tutte le attività dell'istanza.

L'istanza di container sottostante viene arrestata o terminata.  
Quando interrompi o termini un'istanza di container, le attività in esecuzione su di essa vengono trasferite in stato `STOPPED`.

Un container dell'attività cambia lo stato.  
L'agente del container Amazon ECS monitora lo stato dei container all'interno dei processi. Ad esempio, se un container in esecuzione all'interno di un'attività viene arrestato, tale modifica dello stato del container genera un evento.

Un'attività che utilizza il provider di capacità Fargate Spot riceve un avviso di cessazione.  
Quando un'attività utilizza il provider di capacità `FARGATE_SPOT` e viene interrotta a causa di un'interruzione Spot, viene generato un evento di modifica dello stato delle attività.

**Example Evento di modifica dello stato dei processi**  
Gli eventi di modifica dello stato delle attività vengono forniti nel formato seguente. Nota quanto segue in relazione ai campi:  
+ Lo stato di integrità dell'evento non è disponibile nell'evento di modifica dello stato del processo. Se è necessario lo stato di integrità del processo, è possibile eseguire [describe-tasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html).
+ Se i container utilizzano un'immagine ospitata con Amazon ECR, viene restituito il campo `imageDigest`.
+ I valori per i campi `createdAt`, `connectivityAt`, `pullStartedAt`, `startedAt`, `pullStoppedAt` e `updatedAt` sono timestamp di stringhe ISO.
+ Il valore `detail-type` è “ECS Task State Change”.
+ Quando l'evento viene generato per un processo interrotto, i campi `stoppedReason` e `stopCode` forniscono informazioni aggiuntive sul motivo per cui l'attività è stata interrotta (ad esempio, “User initiated”).
Per ulteriori informazioni sui EventBridge parametri, consulta i [metadati degli eventi di AWS servizio](https://docs.aws.amazon.com/eventbridge/latest/ref/events-structure.html) in *Amazon EventBridge Events Reference.*  
Per informazioni su come configurare una regola di EventBridge eventi Amazon che acquisisca solo gli eventi delle attività in cui l'attività ha smesso di essere eseguita perché uno dei suoi contenitori essenziali è terminato, consulta [Invio di avvisi di Amazon Simple Notification Service per gli eventi di attività Amazon ECS arrestate](ecs_cwet2.md)  

```
{
    "version": "0",
    "id": "105f6bb1-4da6-c630-4965-35383018cbca",
    "detail-type": "ECS Task State Change",
    "source": "aws.ecs",
    "account": "123456789012",
    "time": "2025-05-06T11:02:34Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ecs:us-east-1:123456789012:task/example-cluster/a1173316d40a45dea9"
    ],
    "detail": {
        "attachments": [
            {
                "id": "fe3a9a46-6a47-40ee-afd9-7952ae90a75a",
                "type": "eni",
                "status": "ATTACHED",
                "details": [
                    {
                        "name": "subnetId",
                        "value": "subnet-0d0eab1bb38d5ca64"
                    },
                    {
                        "name": "networkInterfaceId",
                        "value": "eni-0103a2f01bad57d71"
                    },
                    {
                        "name": "macAddress",
                        "value": "0e:50:d1:c1:77:81"
                    },
                    {
                        "name": "privateDnsName",
                        "value": "ip-10-0-1-163.ec2.internal"
                    },
                    {
                        "name": "privateIPv4Address",
                        "value": "10.0.1.163"
                    }
                ]
            }
        ],
        "attributes": [
            {
                "name": "ecs.cpu-architecture",
                "value": "x86_64"
            }
        ],
        "availabilityZone": "us-east-1b",
        "capacityProviderName": "FARGATE",
        "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/example-cluster",
        "connectivity": "CONNECTED",
        "connectivityAt": "2025-05-06T11:02:17.19Z",
        "containers": [
            {
                "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/example-cluster/a1173316d40a45dea9/a0a99b87-baa8-4bf6-b9f1-a9a95917a635",
                "lastStatus": "RUNNING",
                "name": "web",
                "image": "nginx",
                "imageDigest": "sha256:c15da6c91de8d2f436196f3a768483ad32c258ed4e1beb3d367a27ed67253e66",
                "runtimeId": "a1173316d40a45dea9-0265927825",
                "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/example-cluster/a1173316d40a45dea9",
                "networkInterfaces": [
                    {
                        "attachmentId": "fe3a9a46-6a47-40ee-afd9-7952ae90a75a",
                        "privateIpv4Address": "10.0.1.163"
                    }
                ],
                "cpu": "99",
                "memory": "100"
            },
            {
                "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/example-cluster/a1173316d40a45dea9/a2010e2d-ba7c-4135-8b79-e0290ff3cd8c",
                "lastStatus": "RUNNING",
                "name": "aws-guardduty-agent-nm40lC",
                "imageDigest": "sha256:bf9197abdf853607e5fa392b4f97ccdd6ca56dd179be3ce8849e552d96582ac8",
                "runtimeId": "a1173316d40a45dea9-2098416933",
                "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/example-cluster/a1173316d40a45dea9",
                "networkInterfaces": [
                    {
                        "attachmentId": "fe3a9a46-6a47-40ee-afd9-7952ae90a75a",
                        "privateIpv4Address": "10.0.1.163"
                    }
                ],
                "cpu": "null"
            },
            {
                "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/example-cluster/a1173316d40a45dea9/dccf0ca2-d929-471f-a5c3-98006fd4379e",
                "lastStatus": "RUNNING",
                "name": "aws-otel-collector",
                "image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.32.0",
                "imageDigest": "sha256:7a1b3560655071bcacd66902c20ebe9a69470d5691fe3bd36baace7c2f3c4640",
                "runtimeId": "a1173316d40a45dea9-4027662657",
                "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/example-cluster/a1173316d40a45dea9",
                "networkInterfaces": [
                    {
                        "attachmentId": "fe3a9a46-6a47-40ee-afd9-7952ae90a75a",
                        "privateIpv4Address": "10.0.1.163"
                    }
                ],
                "cpu": "0"
            }
        ],
        "cpu": "256",
        "createdAt": "2025-05-06T11:02:13.877Z",
        "desiredStatus": "RUNNING",
        "enableExecuteCommand": false,
        "ephemeralStorage": {
            "sizeInGiB": 20
        },
        "group": "family:webserver",
        "launchType": "FARGATE",
        "lastStatus": "RUNNING",
        "memory": "512",
        "overrides": {
            "containerOverrides": [
                {
                    "name": "web"
                },
                {
                    "environment": [
                        {
                            "name": "CLUSTER_NAME",
                            "value": "example-cluster"
                        },
                        {
                            "name": "REGION",
                            "value": "us-east-1"
                        },
                        {
                            "name": "HOST_PROC",
                            "value": "/host_proc"
                        },
                        {
                            "name": "AGENT_RUNTIME_ENVIRONMENT",
                            "value": "ecsfargate"
                        },
                        {
                            "name": "STAGE",
                            "value": "prod"
                        }
                    ],
                    "memory": 128,
                    "name": "aws-guardduty-agent-nm40lC"
                },
                {
                    "name": "aws-otel-collector"
                }
            ]
        },
        "platformVersion": "1.4.0",
        "pullStartedAt": "2025-05-06T11:02:24.162Z",
        "pullStoppedAt": "2025-05-06T11:02:33.493Z",
        "startedAt": "2025-05-06T11:02:34.325Z",
        "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/example-cluster/a1173316d40a45dea9",
        "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/webserver:5",
        "updatedAt": "2025-05-06T11:02:34.325Z",
        "version": 3
    }
}
```

**Example**  
Di seguito è riportato un esempio di un evento di modifica dello stato del processo per EC2.  

```
{
    "version": "0",
    "id": "a65cf262-f104-0dd5-ceda-4b09ba71a441",
    "detail-type": "ECS Task State Change",
    "source": "aws.ecs",
    "account": "123456789012",
    "time": "2025-05-12T13:12:06Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ecs:us-east-1:123456789012:task/example/c1ffa94f19a540ed8d9f7e1d2a5d"
    ],
    "detail": {
        "attachments": [
            {
                "id": "52333e3b-b812-41a8-b057-9ed184bbe5e1",
                "type": "eni",
                "status": "ATTACHED",
                "details": [
                    {
                        "name": "subnetId",
                        "value": "subnet-0d0eab1bb38d5ca64"
                    },
                    {
                        "name": "networkInterfaceId",
                        "value": "eni-0ea90f746500773a4"
                    },
                    {
                        "name": "macAddress",
                        "value": "0e:d5:9b:ce:49:fb"
                    },
                    {
                        "name": "privateDnsName",
                        "value": "ip-10-0-1-37.ec2.internal"
                    },
                    {
                        "name": "privateIPv4Address",
                        "value": "10.0.1.37"
                    }
                ]
            }
        ],
        "attributes": [
            {
                "name": "ecs.cpu-architecture",
                "value": "x86_64"
            }
        ],
        "availabilityZone": "us-east-1b",
        "capacityProviderName": "Infra-ECS-Cluster-example-fa84e0cc-AsgCapacityProvider-OseQJU9pizmp",
        "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/example",
        "connectivity": "CONNECTED",
        "connectivityAt": "2025-05-12T13:11:44.98Z",
        "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/example/d1d84798400f49f3b21cb61610c1e",
        "containers": [
            {
                "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/example/c1ffa94f19a540ed8d9f7e1d2a5d3626/197d0994-5367-4a6d-9f9a-f075e4a6",
                "lastStatus": "RUNNING",
                "name": "aws-otel-collector",
                "image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.32.0",
                "imageDigest": "sha256:7a1b3560655071bcacd66902c20ebe9a69470d5691fe3bd36baace7c2f3c4640",
                "runtimeId": "8e926f0ccd8fe2b459926f49584ba6d33a3d9f61398dbabe944ee6a13a8ff3a1",
                "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/example/c1ffa94f19a540ed8d9f7e1d2a5d",
                "networkInterfaces": [
                    {
                        "attachmentId": "52333e3b-b812-41a8-b057-9ed184bbe5e1",
                        "privateIpv4Address": "10.0.1.37"
                    }
                ],
                "cpu": "0"
            },
            {
                "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/example/c1ffa94f19a540ed8d9f7e1d2a5d3626/cab39ef0-9c50-459d-844b-b9d51d73d",
                "lastStatus": "RUNNING",
                "name": "web",
                "image": "nginx",
                "imageDigest": "sha256:c15da6c91de8d2f436196f3a768483ad32c258ed4e1beb3d367a27ed67253e66",
                "runtimeId": "9f1c73f0094f051541d9e5c2ab1e172d83c4eb5171bcc857c4504b02770ff3b8",
                "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/example/c1ffa94f19a540ed8d9f7e1d2a5d",
                "networkInterfaces": [
                    {
                        "attachmentId": "52333e3b-b812-41a8-b057-9ed184bbe5e1",
                        "privateIpv4Address": "10.0.1.37"
                    }
                ],
                "cpu": "99",
                "memory": "100"
            }
        ],
        "cpu": "256",
        "createdAt": "2025-05-12T13:11:44.98Z",
        "desiredStatus": "RUNNING",
        "enableExecuteCommand": false,
        "group": "family:webserver",
        "launchType": "EC2",
        "lastStatus": "RUNNING",
        "memory": "512",
        "overrides": {
            "containerOverrides": [
                {
                    "name": "aws-otel-collector"
                },
                {
                    "name": "web"
                }
            ]
        },
        "pullStartedAt": "2025-05-12T13:11:59.491Z",
        "pullStoppedAt": "2025-05-12T13:12:05.896Z",
        "startedAt": "2025-05-12T13:12:06.053Z",
        "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/example/c1ffa94f19a540ed8d9f7e1d2a5d",
        "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/webserver",
        "updatedAt": "2025-05-12T13:12:06.053Z",
        "version": 4
    }
}
```

# Eventi di operazioni di servizi Amazon ECS
<a name="ecs_service_events"></a>

Amazon ECS invia eventi di operazioni di servizio con il tipo di dettaglio **Operazione di servizio ECS**. A differenza degli eventi di modifica dello stato delle istanze di container e delle attività, gli eventi di operazioni di servizio non includono un numero di versione nel campo di risposta `details`. Di seguito è riportato uno schema di eventi utilizzato per creare una EventBridge regola per gli eventi di azione del servizio Amazon ECS. Per ulteriori informazioni, consulta la sezione Guida [introduttiva EventBridge alla](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) *Amazon EventBridge User Guide*.

```
{
    "source": [
        "aws.ecs"
    ],
    "detail-type": [
        "ECS Service Action"
    ]
}
```

Amazon ECS invia eventi di tipo `INFO`, `WARN` e `ERROR`. Di seguito sono riportati gli eventi di operazioni di servizio.

## Eventi di operazione di servizio con il tipo di eventi `INFO`
<a name="ecs_service_events_info_type"></a>

`SERVICE_STEADY_STATE`  
Il servizio è integro e con il numero desiderato di attività, raggiungendo così uno stato costante. Il pianificatore del servizio segnala periodicamente lo stato, quindi potresti ricevere questo messaggio più volte.

`TASKSET_STEADY_STATE`  
Il set di attività è integro e con il numero desiderato di attività, raggiungendo così uno stato costante.

`CAPACITY_PROVIDER_STEADY_STATE`  
Un provider di capacità associato a un servizio raggiunge uno stato costante.

`SERVICE_DESIRED_COUNT_UPDATED`  
Quando il pianificatore del servizio aggiorna il conteggio desiderato calcolato per un servizio o un set di attività. Questo evento non viene inviato quando il conteggio desiderato viene aggiornato manualmente da un utente.

`TASKS_STOPPED`  
Il servizio ha interrotto l'attività in esecuzione.

`SERVICE_DEPLOYMENT_IN_PROGRESS`  
L'implementazione di un servizio è in corso. L'implementazione del servizio può essere un rollback o la revisione di un nuovo servizio.

`SERVICE_DEPLOYMENT_COMPLETED`  
L'implementazione di un servizio è in stato costante ed è completa. L'implementazione del servizio può essere un rollback o la distribuzione della revisione di un nuovo servizio.

## Eventi di operazione di servizio con il tipo di eventi `WARN`
<a name="ecs_service_events_warn_type"></a>

`SERVICE_TASK_START_IMPAIRED`  
Il servizio non è in grado di avviare le attività in modo coerente.

`SERVICE_DISCOVERY_INSTANCE_UNHEALTHY`  
Un servizio che utilizza il rilevamento servizi contiene un'attività non integra. Il pianificatore del servizio rileva che un'attività in un registro di servizio non è integra.

`VPC_LATTICE_TARGET_UNHEALTHY`  
Il servizio che utilizza VPC Lattice ha rilevato che una delle destinazioni di VPC Lattice non è integra.

## Eventi di operazione di servizio con il tipo di eventi `ERROR`
<a name="ecs_service_events_error_type"></a>

`SERVICE_DAEMON_PLACEMENT_CONSTRAINT_VIOLATED`  
Un'attività in un servizio che utilizza la strategia del pianificatore del servizio `DAEMON` non soddisfa più la strategia di vincolo di posizionamento per il servizio.

`ECS_OPERATION_THROTTLED`  
Il pianificatore del servizio è stato limitato a causa dei limiti dell'API Amazon ECS.

`SERVICE_DISCOVERY_OPERATION_THROTTLED`  
Lo scheduler del servizio è stato limitato a causa dei limiti di limitazione delle AWS Cloud Map API. Può verificarsi nei servizi configurati per utilizzare il rilevamento servizi.

`SERVICE_TASK_PLACEMENT_FAILURE`  
Il pianificatore del servizio non è in grado di posizionare un'attività. La causa è descritta nel campo `reason`.  
Una causa comune per la generazione di questo evento di servizio è dovuta alla mancanza di risorse nel cluster per collocare l'attività. Ad esempio, non vi è una sufficiente capacità di CPU o memoria nelle istanze di container disponibili o non è disponibile alcuna istanza di container. Un'altra causa comune si verifica quando l'agente di container di Amazon ECS viene disconnesso nell'istanza di container, impedendo all'utilità di pianificazione di collocare l'attività.

`SERVICE_TASK_CONFIGURATION_FAILURE`  
Il pianificatore del servizio non è in grado di posizionare un'attività a causa di un errore di configurazione. La causa è descritta nel campo `reason`.  
Una causa comune della generazione di questo evento di servizio è dovuta al fatto che i tag sono stati applicati al servizio ma l'utente o il ruolo non avevano scelto il nuovo formato del nome della risorsa Amazon (ARN) nella regione. Per ulteriori informazioni, consulta [Nomi di risorse Amazon (ARNs) e IDs](ecs-account-settings.md#ecs-resource-ids). Un'altra causa comune è che Amazon ECS non è riuscito ad assumere il ruolo IAM del processo fornito.

`SERVICE_HEALTH_UNKNOWN`  
Il servizio non è stato in grado di descrivere i dati sull'integrità delle attività.

`SERVICE_DEPLOYMENT_FAILED`  
L'implementazione di un servizio non ha raggiunto il livello di stabilità. Ciò accade quando CloudWatch viene attivato un o l'interruttore rileva un errore di implementazione del servizio.

**Example Evento dello stato costante del servizio**  
Gli eventi dello stato costante del servizio vengono forniti nel seguente formato. Per ulteriori informazioni sui EventBridge parametri, consulta la sezione [Eventi EventBridge nella](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html) *Amazon EventBridge User Guide*.  

```
{
    "version": "0",
    "id": "af3c496d-f4a8-65d1-70f4-a69d52e9b584",
    "detail-type": "ECS Service Action",
    "source": "aws.ecs",
    "account": "111122223333",
    "time": "2019-11-19T19:27:22Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
    ],
    "detail": {
        "eventType": "INFO",
        "eventName": "SERVICE_STEADY_STATE",
        "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
        "createdAt": "2019-11-19T19:27:22.695Z"
    }
}
```

**Example Evento dello stato costante del provider di capacità**  
Gli eventi dello stato costante del provider di capacità vengono forniti nel formato seguente.  

```
{
    "version": "0",
    "id": "b9baa007-2f33-0eb1-5760-0d02a572d81f",
    "detail-type": "ECS Service Action",
    "source": "aws.ecs",
    "account": "111122223333",
    "time": "2019-11-19T19:37:00Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
    ],
    "detail": {
        "eventType": "INFO",
        "eventName": "CAPACITY_PROVIDER_STEADY_STATE",
        "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
        "capacityProviderArns": [
            "arn:aws:ecs:us-west-2:111122223333:capacity-provider/ASG-tutorial-capacity-provider"
        ],
        "createdAt": "2019-11-19T19:37:00.807Z"
    }
}
```

**Example Eventi compromessi di avvio dei processi di servizio**  
Gli eventi compromessi di avvio attività di servizio vengono forniti nel formato seguente.  

```
{
    "version": "0",
    "id": "57c9506e-9d21-294c-d2fe-e8738da7e67d",
    "detail-type": "ECS Service Action",
    "source": "aws.ecs",
    "account": "111122223333",
    "time": "2019-11-19T19:55:38Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
    ],
    "detail": {
        "eventType": "WARN",
        "eventName": "SERVICE_TASK_START_IMPAIRED",
        "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
        "createdAt": "2019-11-19T19:55:38.725Z"
    }
}
```

**Example Evento di errore di posizionamento dei processi di servizio**  
Gli eventi di errore di posizionamento dell'attività di servizio vengono forniti nel formato seguente. Per ulteriori informazioni, consulta la sezione [Eventi EventBridge nella](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html) *Amazon EventBridge User Guide*.  
Nell'esempio seguente, l'attività tenta di utilizzare il provider di capacità `FARGATE_SPOT`, ma il pianificatore del servizio non è stato in grado di acquisire alcuna capacità Fargate Spot.  

```
{
    "version": "0",
    "id": "ddca6449-b258-46c0-8653-e0e3a6d0468b",
    "detail-type": "ECS Service Action",
    "source": "aws.ecs",
    "account": "111122223333",
    "time": "2019-11-19T19:55:38Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
    ],
    "detail": {
        "eventType": "ERROR",
        "eventName": "SERVICE_TASK_PLACEMENT_FAILURE",
        "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
        "capacityProviderArns": [
            "arn:aws:ecs:us-west-2:111122223333:capacity-provider/FARGATE_SPOT"
        ],
        "reason": "RESOURCE:FARGATE",
        "createdAt": "2019-11-06T19:09:33.087Z"
    }
}
```
Nell'esempio seguente per EC2, è stato tentato di avviare il processo sull'istanza di container `2dd1b186f39845a584488d2ef155c131` ma il pianificatore del servizio non è stato in grado di posizionare il processo perché la CPU è insufficiente.  

```
{
  "version": "0",
  "id": "ddca6449-b258-46c0-8653-e0e3a6d0468b",
  "detail-type": "ECS Service Action",
  "source": "aws.ecs",
  "account": "111122223333",
  "time": "2019-11-19T19:55:38Z",
  "region": "us-west-2",
  "resources": [
    "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
  ],
  "detail": {
    "eventType": "ERROR",
    "eventName": "SERVICE_TASK_PLACEMENT_FAILURE",
    "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
    "containerInstanceArns": [
    "arn:aws:ecs:us-west-2:111122223333:container-instance/default/2dd1b186f39845a584488d2ef155c131"
    ],
    "reason": "RESOURCE:CPU",
    "createdAt": "2019-11-06T19:09:33.087Z"
  }
}
```

# Eventi di modifica dello stato di implementazione del servizio Amazon ECS
<a name="ecs_service_deployment_events"></a>

Amazon ECS invia eventi di modifica dello stato di implementazione del servizio con il tipo di dettaglio **Modifica dello stato di implementazione ECS**. Di seguito è riportato uno schema di eventi utilizzato per creare una EventBridge regola per gli eventi di modifica dello stato di distribuzione del servizio Amazon ECS. Per ulteriori informazioni sulla creazione di una EventBridge regola, consulta la sezione Guida [introduttiva ad Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) nella *Amazon EventBridge User Guide*.

```
{
    "source": [
        "aws.ecs"
    ],
    "detail-type": [
        "ECS Deployment State Change"
    ]
}
```

Amazon ECS invia eventi di tipo `INFO` e `ERROR`. Per ulteriori informazioni, consulta [Eventi di operazioni di servizi Amazon ECS](ecs_service_events.md)

Di seguito sono riportati gli eventi di modifica dello stato di un'implementazione di servizi.

`SERVICE_DEPLOYMENT_IN_PROGRESS`  
L'implementazione del servizio è in corso. Questo evento viene inviato sia per le implementazioni iniziali che per le implementazioni dei ripristini dello stato precedente.

`SERVICE_DEPLOYMENT_COMPLETED`  
L'implementazione del servizio è stata completata. Questo evento viene inviato una volta che un servizio raggiunge uno stato costante dopo un'implementazione.

`SERVICE_DEPLOYMENT_FAILED`  
L'implementazione del servizio non è riuscita. Questo evento viene inviato per i servizi con la logica dell'interruttore automatico di implementazione abilitata.

**Example Evento di implementazione del servizio in corso**  
Gli eventi di implementazione del servizio in corso vengono recapitati all'avvio di un'implementazione iniziale e di un'implementazione di un ripristino dello stato precedente. La differenza tra i due è nel campo `reason`. Per ulteriori informazioni sui EventBridge parametri, consulta i [metadati degli eventi di AWS servizio](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html) nella *Amazon EventBridge User Guide*.  
Di seguito è illustrato un output di esempio per l'avvio di un'implementazione iniziale.  

```
{
   "version": "0",
   "id": "ddca6449-b258-46c0-8653-e0e3a6EXAMPLE",
   "detail-type": "ECS Deployment State Change",
   "source": "aws.ecs",
   "account": "111122223333",
   "time": "2020-05-23T12:31:14Z",
   "region": "us-west-2",
   "resources": [ 
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
   ],
   "detail": {
        "eventType": "INFO", 
        "eventName": "SERVICE_DEPLOYMENT_IN_PROGRESS",
        "deploymentId": "ecs-svc/123",
        "updatedAt": "2020-05-23T11:11:11Z",
        "reason": "ECS deployment deploymentId in progress."
   }
}
```
Di seguito è illustrato un output di esempio per l'avvio di un'implementazione del ripristino dello stato precedente. Il campo `reason` fornisce l'ID dell'implementazione in cui il servizio sta eseguendo il ripristino dello stato precedente.  

```
{
   "version": "0",
   "id": "ddca6449-b258-46c0-8653-e0e3aEXAMPLE",
   "detail-type": "ECS Deployment State Change",
   "source": "aws.ecs",
   "account": "111122223333",
   "time": "2020-05-23T12:31:14Z",
   "region": "us-west-2",
   "resources": [ 
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
   ],
   "detail": {
        "eventType": "INFO", 
        "eventName": "SERVICE_DEPLOYMENT_IN_PROGRESS",
        "deploymentId": "ecs-svc/123",
        "updatedAt": "2020-05-23T11:11:11Z",
        "reason": "ECS deployment circuit breaker: rolling back to deploymentId deploymentID."
   }
}
```

**Example Evento di implementazione del servizio completata**  
Gli eventi di implementazione del servizio completata vengono forniti nel seguente formato. Per ulteriori informazioni, consulta [Distribuisci i servizi Amazon ECS sostituendo le attività](deployment-type-ecs.md).  

```
{
   "version": "0",
   "id": "ddca6449-b258-46c0-8653-e0e3aEXAMPLE",
   "detail-type": "ECS Deployment State Change",
   "source": "aws.ecs",
   "account": "111122223333",
   "time": "2020-05-23T12:31:14Z",
   "region": "us-west-2",
   "resources": [ 
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
   ],
   "detail": {
        "eventType": "INFO", 
        "eventName": "SERVICE_DEPLOYMENT_COMPLETED",
        "deploymentId": "ecs-svc/123",
        "updatedAt": "2020-05-23T11:11:11Z",
        "reason": "ECS deployment deploymentID completed."
   }
}
```

**Example Evento di implementazione del servizio non riuscita**  
Gli eventi di implementazione del servizio non riuscita vengono forniti nel seguente formato. Un evento di implementazione del servizio con stato non riuscito verrà inviato solo per i servizi che dispongono della logica dell'interruttore automatico di implementazione abilitata. Per ulteriori informazioni, consulta [Distribuisci i servizi Amazon ECS sostituendo le attività](deployment-type-ecs.md).  

```
{
   "version": "0",
   "id": "ddca6449-b258-46c0-8653-e0e3aEXAMPLE",
   "detail-type": "ECS Deployment State Change",
   "source": "aws.ecs",
   "account": "111122223333",
   "time": "2020-05-23T12:31:14Z",
   "region": "us-west-2",
   "resources": [ 
        "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest"
   ],
   "detail": {
        "eventType": "ERROR", 
        "eventName": "SERVICE_DEPLOYMENT_FAILED",
        "deploymentId": "ecs-svc/123",
        "updatedAt": "2020-05-23T11:11:11Z",
        "reason": "ECS deployment circuit breaker: task failed to start."
   }
}
```

# Gestione degli eventi Amazon ECS
<a name="ecs_cwet_handling"></a>

Amazon ECS invia gli eventi secondo il criterio *almeno una volta*. Ciò significa che è possibile ricevere più copie di un determinato evento. Inoltre, gli eventi potrebbero non essere inviati al listener di eventi nell'ordine in cui si sono verificati.

Per ordinare correttamente gli eventi, la sezione `detail` di ogni evento contiene una proprietà `version`. Ogni volta che una risorsa cambia stato, avviene un incremento di `version`. Gli eventi duplicati hanno la stessa `version` nell'oggetto `detail`. Se stai replicando l'istanza del container Amazon ECS e lo stato dell'attività con EventBridge, puoi confrontare la versione di una risorsa riportata da Amazon ECS APIs con quella `version` riportata per la risorsa EventBridge per verificare che la versione nel tuo flusso di eventi sia attuale. Gli eventi con un numero di proprietà di versione più alto devono essere considerati come eventi successivi a quelli aventi numeri di versione più bassi.

## Esempio: gestione degli eventi in una funzione AWS Lambda
<a name="ecs_cwet_handling_example"></a>

Nell'esempio seguente viene riportata una funzione Lambda scritta in Python 3.9, la quale acquisisce sia eventi di modifica dello stato delle istanze di container che dei processi e li salva in una delle due tabelle Amazon DynamoDB:
+ *ECSCtrInstanceState*— Memorizza lo stato più recente di un'istanza del contenitore. L'ID tabella è il valore `containerInstanceArn` dell'istanza di container;
+ *ECSTaskStato*: memorizza lo stato più recente di un'attività. L'ID tabella è il valore `taskArn` dell'attività.

```
import json
import boto3

def lambda_handler(event, context):
    id_name = ""
    new_record = {}

    # For debugging so you can see raw event format.
    print('Here is the event:')
    print((json.dumps(event)))

    if event["source"] != "aws.ecs":
       raise ValueError("Function only supports input from events with a source type of: aws.ecs")

    # Switch on task/container events.
    table_name = ""
    if event["detail-type"] == "ECS Task State Change":
        table_name = "ECSTaskState"
        id_name = "taskArn"
        event_id = event["detail"]["taskArn"]
    elif event["detail-type"] == "ECS Container Instance State Change":
        table_name = "ECSCtrInstanceState"
        id_name =  "containerInstanceArn"
        event_id = event["detail"]["containerInstanceArn"]
    else:
        raise ValueError("detail-type for event is not a supported type. Exiting without saving event.")

    new_record["cw_version"] = event["version"]
    new_record.update(event["detail"])

    # "status" is a reserved word in DDB, but it appears in containerPort
    # state change messages.
    if "status" in event:
        new_record["current_status"] = event["status"]
        new_record.pop("status")


    # Look first to see if you have received a newer version of an event ID.
    # If the version is OLDER than what you have on file, do not process it.
    # Otherwise, update the associated record with this latest information.
    print("Looking for recent event with same ID...")
    dynamodb = boto3.resource("dynamodb", region_name="us-east-1")
    table = dynamodb.Table(table_name)
    saved_event = table.get_item(
        Key={
            id_name : event_id
        }
    )
    if "Item" in saved_event:
        # Compare events and reconcile.
        print(("EXISTING EVENT DETECTED: Id " + event_id + " - reconciling"))
        if saved_event["Item"]["version"] < event["detail"]["version"]:
            print("Received event is a more recent version than the stored event - updating")
            table.put_item(
                Item=new_record
            )
        else:
            print("Received event is an older version than the stored event - ignoring")
    else:
        print(("Saving new event - ID " + event_id))

        table.put_item(
            Item=new_record
        )
```

Nell'esempio seguente di Fargate viene riportata una funzione Lambda scritta in Python 3.9, la quale acquisisce eventi di modifica dello stato del processo e li salva nella tabella Amazon DynamoDB seguente:

```
import json
import boto3

def lambda_handler(event, context):
    id_name = ""
    new_record = {}

    # For debugging so you can see raw event format.
    print('Here is the event:')
    print((json.dumps(event)))

    if event["source"] != "aws.ecs":
       raise ValueError("Function only supports input from events with a source type of: aws.ecs")

    # Switch on task/container events.
    table_name = ""
    if event["detail-type"] == "ECS Task State Change":
        table_name = "ECSTaskState"
        id_name = "taskArn"
        event_id = event["detail"]["taskArn"]
    else:
        raise ValueError("detail-type for event is not a supported type. Exiting without saving event.")

    new_record["cw_version"] = event["version"]
    new_record.update(event["detail"])

    # "status" is a reserved word in DDB, but it appears in containerPort
    # state change messages.
    if "status" in event:
        new_record["current_status"] = event["status"]
        new_record.pop("status")


    # Look first to see if you have received a newer version of an event ID.
    # If the version is OLDER than what you have on file, do not process it.
    # Otherwise, update the associated record with this latest information.
    print("Looking for recent event with same ID...")
    dynamodb = boto3.resource("dynamodb", region_name="us-east-1")
    table = dynamodb.Table(table_name)
    saved_event = table.get_item(
        Key={
            id_name : event_id
        }
    )
    if "Item" in saved_event:
        # Compare events and reconcile.
        print(("EXISTING EVENT DETECTED: Id " + event_id + " - reconciling"))
        if saved_event["Item"]["version"] < event["detail"]["version"]:
            print("Received event is a more recent version than the stored event - updating")
            table.put_item(
                Item=new_record
            )
        else:
            print("Received event is an older version than the stored event - ignoring")
    else:
        print(("Saving new event - ID " + event_id))

        table.put_item(
            Item=new_record
        )
```