

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Automatisez les réponses aux erreurs Amazon ECS à l'aide de EventBridge
<a name="cloudwatch_event_stream"></a>

Amazon EventBridge vous permet d'automatiser vos AWS services et de répondre automatiquement aux événements du système tels que les problèmes de disponibilité des applications ou les modifications des ressources. Les événements AWS liés aux services sont diffusés EventBridge en temps quasi réel. Vous pouvez écrire des règles simples pour préciser les événements qui vous intéressent et les actions automatisées à effectuer quand un événement correspond à une règle. Les actions pouvant être configurées automatiquement sont les suivantes :
+ Ajouter des événements à des groupes de CloudWatch journaux dans Logs
+ Invoquer une fonction AWS Lambda 
+ Appel de la fonctionnalité Exécuter la commande d’Amazon EC2
+ Relais de l’événement à Amazon Kinesis Data Streams
+ Activation d'une machine à AWS Step Functions états
+ Notification d'une rubrique Amazon SNS ou d'une file d'attente Amazon Simple Queue Service (Amazon SQS)

Pour plus d'informations, consultez [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) dans le *guide de EventBridge l'utilisateur Amazon*.

Vous pouvez utiliser les événements Amazon ECS pour EventBridge recevoir des notifications en temps quasi réel concernant l'état actuel de vos clusters Amazon ECS. Si elles utilisent EC2, vous pouvez voir l’état des instances de conteneur et l’état actuel de toutes les tâches exécutées sur ces instances. Si vos tâches utilisent Fargate, vous pouvez voir l’état des instances de conteneur.

Vous pouvez ainsi créer des planificateurs personnalisés sur Amazon ECS EventBridge, chargés d'orchestrer les tâches entre les clusters et de surveiller l'état des clusters en temps quasi réel. Vous pouvez éliminer le code de planification et de surveillance qui interroge en permanence le service Amazon ECS pour détecter les changements de statut et gérer les changements d'état Amazon ECS de manière asynchrone en utilisant n'importe quelle EventBridge cible. Les cibles peuvent inclure AWS Lambda Amazon Simple Queue Service, Amazon Simple Notification Service ou Amazon Kinesis Data Streams.

Un flux d'événements Amazon ECS garantit que chaque événement est diffusé au moins une fois. Si des événements dupliqués sont envoyés, l'événement fournit suffisamment d'informations pour identifier les doublons. Pour de plus amples informations, veuillez consulter [Gestion des événements Amazon ECS](ecs_cwet_handling.md).

Les événements sont relativement classés, afin que vous puissiez facilement savoir lorsqu'un événement s'est produit en rapport avec d'autres événements.

**Topics**
+ [Événements Amazon ECS](ecs_cwe_events.md)
+ [Gestion des événements Amazon ECS](ecs_cwet_handling.md)

# Événements Amazon ECS
<a name="ecs_cwe_events"></a>

Amazon ECS suit l'état de chacune de vos tâches et de chacun de vos services. Si l'état d'une tâche ou d'un service change, un événement est généré et envoyé à Amazon EventBridge. Ces événements sont considérés comme des événements de changement d'état de tâche et des événements d'action de service. Ces événements et leurs causes possibles sont détaillés dans les sections suivantes.

Amazon ECS génère et envoie les types d'événements suivants à EventBridge : 
+ Changement d’état d’une instance de conteneur
+ Changement d’état d’une tâche
+ Deployment state change (Changement d'état du déploiement)
+ Action de service

**Note**  
Amazon ECS est susceptible d’ajouter d’autres types , sources et détails d’événements ultérieurement. Si vous désérialisez les données JSON d’événement dans le code, veillez à ce que votre application soit prête à gérer des propriétés inconnues, afin d’éviter des problèmes si et lorsque ces propriétés supplémentaires sont ajoutées.

Dans certains cas, plusieurs événements sont générés pour la même activité. Par exemple, lorsqu'une tâche est démarrée sur une instance de conteneur, un événement de modification de l'état de tâche est généré pour la nouvelle tâche. Un événement de changement d'état d'instance de conteneur est généré pour prendre en compte le changement dans les ressources disponibles, comme le processeur, la mémoire et les ports disponibles, dans l'instance de conteneur. De même, si une instance de conteneur est mise hors service, des événements sont générés pour l'instance de conteneur, l'état de connexion de l'agent de conteneur et chaque tâche en cours d'exécution sur l'instance de conteneur.

Les événements de changement d'état de conteneur et de changement d'état de tâche contiennent deux champs `version` : un dans le corps principal de l'événement et l'autre dans l'objet `detail` de l'événement. Les différences entre ces deux champs sont décrites ci-dessous :
+ Le champ `version` du corps de l'événement est défini sur `0` pour tous les événements. Pour plus d'informations sur EventBridge les paramètres, consultez les [métadonnées des événements de AWS service](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html) dans le *guide de EventBridge l'utilisateur Amazon*.
+ Le champ `version` dans l'objet `detail` de l'événement décrit la version de la ressource associée. Chaque fois qu'une ressource change d'état, cette version est incrémentée. Comme les événements peuvent être envoyés plusieurs fois, ce champ vous permet d'identifier les événements en double. Les événements en double présentent la même version dans l'objet `detail`. Si vous répliquez votre instance de conteneur Amazon ECS et l'état de votre tâche avec EventBridge, vous pouvez comparer la version d'une ressource signalée par Amazon ECS APIs avec la version signalée EventBridge pour la ressource (à l'intérieur de l'`detail`objet) afin de vérifier que la version de votre flux d'événements est à jour.

Les événements d'action de service contiennent uniquement le champ `version` dans le corps principal.

Les événements d’action de service spécifient le service dans deux champs différents :
+ Pour les événements générés par `create-service`, le service est dans le champ `serviceName`.
+ Pour les événements générés par `update-service`, le service est dans le champ `service`.

Si vous utilisez des outils automatisés pour les événements de service, vous devez coder les deux champs.

Pour de plus amples informations sur la création d’une règle pour les événements d’action de service, consultez la section [Événements d’action d’un service Amazon ECS](ecs_service_events.md).

Pour plus d'informations sur la manière d'intégrer Amazon ECS EventBridge, consultez la section [Intégration d'Amazon EventBridge et d'Amazon ECS](https://aws.amazon.com/blogs/compute/integrating-amazon-eventbridge-and-amazon-ecs/).

# Événements de changement d’état d’une instance de conteneur Amazon ECS
<a name="ecs_container_instance_events"></a>

Les scénarios suivants provoquent des événements de changement d'état d'instance de conteneur :

Vous appelez les opérations `StartTask``RunTask`, ou `StopTask` API, soit directement, soit avec le AWS Management Console ou SDKs.  
Le fait de placer ou d'arrêter des tâches sur une instance de conteneur a pour effet de modifier les ressources disponibles sur l'instance de conteneur, comme l'UC, la mémoire et les ports disponibles.

Le planificateur de service Amazon ECS service démarre ou arrête une tâche.  
Le fait de placer ou d'arrêter des tâches sur une instance de conteneur a pour effet de modifier les ressources disponibles sur l'instance de conteneur, comme l'UC, la mémoire et les ports disponibles.

L'agent de conteneur Amazon ECS appelle l'opération d'API `SubmitTaskStateChange` avec un état `STOPPED` pour une tâche ayant l'état souhaité `RUNNING`.  
L'agent de conteneur Amazon ECS supervise l'état des tâches sur vos instances de conteneur, et il signale tout changement d'état. Si une tâche supposée être à l'état `RUNNING` passe à l'état `STOPPED`, l'agent libère les ressources qui ont été allouées à la tâche arrêtée, comme l'UC, la mémoire et les ports disponibles.

Vous désenregistrez l'instance de conteneur à l'aide de l'opération `DeregisterContainerInstance` API, soit directement, soit avec le AWS Management Console ou. SDKs  
L'annulation de l'enregistrement d'une instance de conteneur modifie l'état de l'instance de conteneur et l'état de connexion de l'agent de conteneur Amazon ECS.

Une tâche s'est arrêtée en même temps qu'une instance EC2.   
Lorsque vous arrêtez une instance de conteneur, les tâches qui sont en cours d'exécution sur elle passe à l'état `STOPPED`.

L'agent de conteneur Amazon ECS enregistre une instance de conteneur pour la première fois.   
La première fois que l'agent de conteneur Amazon ECS enregistre une instance de conteneur (lors du lancement ou de la première exécution manuelle), cela crée un événement de changement d'état pour l'instance.

L'agent de conteneur Amazon ECS se connecte à Amazon ECS ou s'en déconnecte.  
Lorsque l'agent de conteneur Amazon ECS se connecte ou se déconnecte du backend Amazon ECS, il modifie l'état `agentConnected` de l'instance de conteneur.  
L'agent de conteneur Amazon ECS se déconnecte et se reconnecte plusieurs fois par heure dans le cadre de son fonctionnement normal, si bien que des événements de connexion de l'agent sont prévisibles. Ces événements ne signifient pas qu'il existe un problème au niveau de l'agent de conteneur ou de votre instance de conteneur.

Vous mettez à niveau l'agent de conteneur Amazon ECS sur une instance.  
Le détail de l'instance de conteneur contient un objet pour la version de l'agent de conteneur. Si vous mettez à niveau l'agent, les informations de cette version changent et génèrent un événement.

**Example Événement de changement d'état d'instance de conteneur**  
Les événements de changement d'état d'instance de conteneur sont remis dans le format suivant. La `detail` section ci-dessous ressemble à l'[ContainerInstance](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerInstance.html)objet renvoyé par une opération d'[DescribeContainerInstances](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html)API dans le *Amazon Elastic Container Service API Reference*. Pour plus d'informations sur EventBridge les paramètres, consultez les [métadonnées des événements de AWS service](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html) dans le *guide de EventBridge l'utilisateur Amazon*.  

```
{
  "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"
  }
}
```

# Événements de changement d’état d’une tâche Amazon ECS
<a name="ecs_task_events"></a>

Les scénarios suivants provoquent des événements de changement d'état de tâche :

Vous appelez les opérations `StartTask``RunTask`, ou `StopTask` API, directement ou avec le AWS Management Console AWS CLI, ou SDKs.  
Le démarrage ou l'arrêt de tâches crée de nouvelles ressources de tâche ou modifie l'état des ressources de tâche existantes.

Le planificateur de service Amazon ECS service démarre ou arrête une tâche.  
Le démarrage ou l'arrêt de tâches crée de nouvelles ressources de tâche ou modifie l'état des ressources de tâche existantes.

L'agent de conteneur Amazon ECS appelle l'opération d'API `SubmitTaskStateChange`.  
Pour EC2, l’agent de conteneur Amazon ECS surveille l’état de vos tâches sur vos instances de conteneur. L’agent de conteneur Amazon ECS signale tout changement d’état. L'état peut notamment passer de `PENDING` à `RUNNING` ou de `RUNNING` à `STOPPED`.

Vous forcez le désenregistrement de l'instance de conteneur sous-jacente à l'aide de l'opération `DeregisterContainerInstance` API et de l'`force`indicateur, soit directement, soit avec le ou. AWS Management Console SDKs  
L'annulation de l'enregistrement d'une instance de conteneur modifie l'état de l'instance de conteneur et l'état de connexion de l'agent de conteneur Amazon ECS. Si les tâches sont en cours d'exécution sur l'instance de conteneur, l'indicateur `force` doit être défini pour permettre l'annulation de l'enregistrement. Cette action arrête toutes les tâches sur l'instance.

L'instance de conteneur sous-jacente est arrêtée ou résiliée.  
Lorsque vous arrêtez ou résiliez une instance de conteneur, les tâches qui sont en cours d'exécution sur cette dernière passe à l'état `STOPPED`.

L'état du conteneur de la tâche est modifié.  
L'agent de conteneur Amazon ECS supervise l'état des conteneurs dans les tâches. Par exemple, si un conteneur en cours d'exécution dans une tâche s'arrête, le changement d'état de ce dernier génère un événement.

Une tâche utilisant le fournisseur de capacité Fargate Spot reçoit un avis de résiliation.  
Lorsqu'une tâche utilise le fournisseur de capacité `FARGATE_SPOT` et qu'elle est arrêtée en raison d'une interruption Spot, un événement de changement d'état de tâche est généré.

**Example Événement de modification de l'état de la tâche**  
Les événements de changement d'état de tâche sont remis dans le format suivant. Remarquez les points suivants concernant les champs :  
+ L’état de l’événement n’est pas disponible dans l’événement de changement d’état d’une tâche. Si vous avez besoin de l’état des tâches, vous pouvez exécuter [describe-tasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html).
+ Si vos conteneurs utilisent une image hébergée avec Amazon ECR, le champ `imageDigest` est renvoyé.
+ Les valeurs des champs `createdAt`, `connectivityAt`, `pullStartedAt`, `startedAt`, `pullStoppedAt` et `updatedAt` sont des horodatages de chaînes ISO.
+ La valeur de `detail-type` est « Changement d’état de tâche ECS ».
+ Lorsque l’événement est généré pour une tâche arrêtée, les champs `stoppedReason` et `stopCode` fournissent des informations supplémentaires sur la raison pour laquelle la tâche s’est arrêtée (par exemple, « Initié par l’utilisateur »).
Pour plus d'informations sur EventBridge les paramètres, consultez les [métadonnées des événements de AWS service](https://docs.aws.amazon.com/eventbridge/latest/ref/events-structure.html) dans *Amazon EventBridge Events Reference*.  
Pour plus d'informations sur la configuration d'une règle d' EventBridge événement Amazon qui capture uniquement les événements de tâche lorsque la tâche a cessé de s'exécuter en raison de la fermeture de l'un de ses conteneurs essentiels, voir [Envoi d’alertes Amazon Simple Notification Service pour les événements de tâche Amazon ECS arrêtés](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**  
Voici un exemple d’événement de changement d’état d’une tâche pour 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
    }
}
```

# Événements d’action d’un service Amazon ECS
<a name="ecs_service_events"></a>

Amazon ECS envoie des événements d'action de service avec le type de détail **Action de service ECS**. Contrairement aux événements de changement d'état d'instance de conteneur et de tâche, les événements d'action de service n'incluent pas de numéro de version dans le champ de réponse `details`. Voici un modèle d'événement utilisé pour créer une EventBridge règle pour les événements d'action du service Amazon ECS. Pour plus d'informations, consultez [Getting Started with EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) dans le *guide de EventBridge l'utilisateur Amazon*.

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

Amazon ECS envoie des événements avec les types d'événements `INFO`, `WARN` et `ERROR`. Les événements d'action de service sont les suivants.

## Événements d'action de service avec le type d'événement `INFO`
<a name="ecs_service_events_info_type"></a>

`SERVICE_STEADY_STATE`  
Le service est sain et avec le nombre de tâches souhaité, atteignant ainsi un état stable. Le planificateur de service rapporte l'état de façon régulière, vous pouvez donc recevoir ce message plusieurs fois.

`TASKSET_STEADY_STATE`  
L'ensemble de tâches est sain et avec le nombre de tâches souhaité, atteignant ainsi un état stable.

`CAPACITY_PROVIDER_STEADY_STATE`  
Un fournisseur de capacité associé à un service atteint un état stable.

`SERVICE_DESIRED_COUNT_UPDATED`  
Lorsque le planificateur de service met à jour le nombre souhaité calculé pour un service ou un ensemble de tâches. Cet événement n'est pas envoyé lorsque le nombre souhaité est mis à jour manuellement par un utilisateur.

`TASKS_STOPPED`  
Le service a arrêté la tâche en cours d’exécution.

`SERVICE_DEPLOYMENT_IN_PROGRESS`  
Le déploiement de service est en cours. Le déploiement de service peut être une restauration ou une nouvelle révision de service.

`SERVICE_DEPLOYMENT_COMPLETED`  
Le déploiement de service est en état stable et est terminé. Le déploiement de service peut être une restauration ou une mise à jour du service.

## Événements d'action de service avec le type d'événement `WARN`
<a name="ecs_service_events_warn_type"></a>

`SERVICE_TASK_START_IMPAIRED`  
Le service n'est pas en mesure de démarrer invariablement les tâches avec succès.

`SERVICE_DISCOVERY_INSTANCE_UNHEALTHY`  
Un service utilisant la découverte de service contient une tâche non saine. Le planificateur de service détecte qu'une tâche au sein d'un registre de service n'est pas saine.

`VPC_LATTICE_TARGET_UNHEALTHY`  
Le service utilisant VPC Lattice a détecté que l’une des cibles du VPC Lattice est défectueuse.

## Événements d'action de service avec le type d'événement `ERROR`
<a name="ecs_service_events_error_type"></a>

`SERVICE_DAEMON_PLACEMENT_CONSTRAINT_VIOLATED`  
Une tâche dans un service utilisant la stratégie du planificateur de service `DAEMON` n'est plus conforme à la stratégie de contrainte de placement du service.

`ECS_OPERATION_THROTTLED`  
Le planificateur de service a été limité en raison des restrictions de l'API Amazon ECS.

`SERVICE_DISCOVERY_OPERATION_THROTTLED`  
Le planificateur de services a été limité en raison des limites de limitation de l' AWS Cloud Map API. Cela peut se produire au niveau des services configurés pour utiliser la découverte de service.

`SERVICE_TASK_PLACEMENT_FAILURE`  
Le planificateur de service ne parvient pas à placer une tâche. La cause est décrite dans le champ `reason`.  
Une cause courante de la génération de cet événement de service est une quantité insuffisante de ressources dans le cluster pour pouvoir placer la tâche. Par exemple, la capacité de l'UC ou de la mémoire peut être insuffisante dans les instances de conteneur disponibles, ou aucune instance de conteneur n'est disponible. Une autre cause fréquente est la déconnexion de l'agent de conteneur Amazon ECS dans l'instance de conteneur, ce qui empêche le planificateur de placer la tâche.

`SERVICE_TASK_CONFIGURATION_FAILURE`  
Le planificateur de service ne parvient pas à placer une tâche en raison d'une erreur de configuration. La cause est décrite dans le champ `reason`.  
L'une des causes courantes de la génération de cet événement de service est l'application de balises au service alors que l'utilisateur ou le rôle n'a pas activé le nouveau format Amazon Resource Name (ARN) dans la région. Pour de plus amples informations, veuillez consulter [Amazon Resource Names (ARNs) et IDs](ecs-account-settings.md#ecs-resource-ids). Une autre cause fréquente est l'incapacité d'Amazon ECS à assumer le rôle IAM fourni pour la tâche.

`SERVICE_HEALTH_UNKNOWN`  
Le service n’a pas été en mesure de décrire les données d’état relatives aux tâches.

`SERVICE_DEPLOYMENT_FAILED`  
Le déploiement de service n’a pas atteint la stabilité. Cela se produit lorsqu'un CloudWatch est déclenché ou que le disjoncteur détecte un échec du déploiement du service.

**Example Événement d'état stable de service**  
Les événements d'état stable de service sont remis dans le format suivant. Pour plus d'informations sur EventBridge les paramètres, consultez la section [Events EventBridge in](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html) du *guide de EventBridge l'utilisateur Amazon*.  

```
{
    "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 Événement d'état stable de fournisseur de capacité**  
Les événements d'état stable de fournisseur de capacité sont remis dans le format suivant.  

```
{
    "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 Événement de lancement de tâche de service défaillant**  
Les événements de lancement de tâche de service défaillant sont remis dans le format suivant.  

```
{
    "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 Événement d'échec de placement de tâche de service**  
Les événements d'échec de placement de tâche de service sont remis dans le format suivant. Pour plus d'informations, consultez la section [Événements EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html) du *guide de EventBridge l'utilisateur Amazon*.  
Dans l'exemple suivant, la tâche tentait d'utiliser le fournisseur de capacité `FARGATE_SPOT`, mais le planificateur de service n'a pas pu acquérir de 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"
    }
}
```
Dans l’exemple suivant pour EC2, la tâche a été lancée sur l’instance de conteneur `2dd1b186f39845a584488d2ef155c131`, mais le planificateur de service n’a pas pu placer la tâche en raison du manque de ressources d’UC.  

```
{
  "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"
  }
}
```

# Événements de modification de l’état de déploiement de service Amazon ECS
<a name="ecs_service_deployment_events"></a>

Amazon ECS envoie des événements de modification d'état de déploiement de service avec le type de détail **ECS Deployment State Change (Modification d'état de déploiement ECS)**. Voici un modèle d'événement utilisé pour créer une EventBridge règle pour les événements de changement d'état du déploiement du service Amazon ECS. Pour plus d'informations sur la création d'une EventBridge règle, consultez [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) dans le *guide de EventBridge l'utilisateur Amazon*.

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

Amazon ECS envoie des événements avec les types d'événements `INFO` et `ERROR`. Pour de plus amples informations, consultez [Événements d’action d’un service Amazon ECS](ecs_service_events.md).

Vous trouverez ci-dessous des événements de modification de l'état de déploiement de service.

`SERVICE_DEPLOYMENT_IN_PROGRESS`  
Le déploiement du service est en cours. Cet événement est envoyé pour les déploiements initiaux et les déploiements de restauration.

`SERVICE_DEPLOYMENT_COMPLETED`  
Le déploiement du service est terminé. Cet événement est envoyé lorsqu'un service atteint un état stable après un déploiement.

`SERVICE_DEPLOYMENT_FAILED`  
Le déploiement du service a échoué. Cet événement est envoyé pour les services avec la logique de disjoncteur de circuit de déploiement activée.

**Example déploiement de service dans l'événement de progression**  
Le déploiement de service dans les événements de progression est fourni lors du démarrage d'un déploiement initial et de restauration. La différence entre les deux est dans le champ `reason`. Pour plus d'informations sur EventBridge les paramètres, consultez les [métadonnées des événements de AWS service](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events-structure.html) dans le *guide de EventBridge l'utilisateur Amazon*.  
Vous trouverez ci-dessous un exemple de sortie pour le démarrage d'un déploiement initial.  

```
{
   "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."
   }
}
```
Vous trouverez ci-dessous un exemple de sortie pour le démarrage d'un déploiement de restauration. Le champ `reason` fournit l'ID du déploiement vers lequel le service est en cours de restauration.  

```
{
   "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 événement de déploiement de service terminé**  
Les événements à l'état terminé de déploiement de service sont remis dans le format suivant. Pour de plus amples informations, veuillez consulter [Déploiement de services Amazon ECS en remplaçant des tâches](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 événement échoué de déploiement de service**  
Les événements à l'état échoué de déploiement de service sont remis dans le format suivant. Un événement à l'état échoué de déploiement de service n'est envoyé que pour les services dont la logique de disjoncteur de circuit de déploiement est activée. Pour de plus amples informations, veuillez consulter [Déploiement de services Amazon ECS en remplaçant des tâches](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."
   }
}
```

# Gestion des événements Amazon ECS
<a name="ecs_cwet_handling"></a>

Amazon ECS envoie des événements *au moins une fois*. Cela signifie que vous pouvez recevoir plusieurs copies d’un événement donné. En outre, des événements peuvent ne pas être transmis aux écouteurs d'événements dans l'ordre dans lequel ils se produisent.

Pour bien ordonner les événements, la section `detail` de chaque événement contient une propriété `version`. Chaque fois qu'une ressource change d'état, cette `version` est incrémentée. Les événements en double présentent la même `version` dans l'objet `detail`. Si vous répliquez votre instance de conteneur Amazon ECS et l'état de votre tâche avec EventBridge, vous pouvez comparer la version d'une ressource signalée par Amazon ECS APIs avec celle `version` signalée EventBridge pour la ressource afin de vérifier que la version de votre flux d'événements est à jour. Les événements avec un numéro de propriétés de version plus élevé doivent être traités comme postérieurs aux événements avec des numéros de version inférieurs.

## Exemple : gestion des événements dans une AWS Lambda fonction
<a name="ecs_cwet_handling_example"></a>

L'exemple suivant montre une fonction Lambda écrite en Python 3.9 qui capture les événements de changement d'état de tâche et d'instance de conteneur et les enregistre dans l'une des deux tables Amazon DynamoDB :
+ *ECSCtrInstanceState*— Stocke le dernier état d'une instance de conteneur. L'ID de table correspond à la valeur `containerInstanceArn` de l'instance de conteneur.
+ *ECSTaskÉtat* : enregistre le dernier état d'une tâche. L'ID de table correspond à la valeur `taskArn` de la tâche.

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

L’exemple Fargate suivant montre une fonction Lambda écrite en Python 3.9 qui capture les événements de changement d’état des tâches et les enregistre dans la table Amazon DynamoDB suivante :

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