EventBridge pour Amazon EBS - Amazon Elastic Compute Cloud

EventBridge pour Amazon EBS

Amazon EBS envoie des événements à Amazon EventBridge (anciennement Amazon CloudWatch Events) pour diverses modifications d'état de volume, d'instantané et de chiffrement. Avec EventBridge, vous pouvez établir des règles qui déclenchent des actions par programmation en réponse à une modification d'état du volume, de l'instantané ou de la clé de chiffrement. Par exemple, lorsqu'un instantané est créé, vous pouvez déclencher une fonction AWS Lambda pour partager l'instantané terminé avec un autre compte ou le copier vers une autre région à des fins de reprise après sinistre.

Les événements d'EventBridge sont représentés comme des objets JSON. Les champs spécifiques à l'événement figurent dans la section « détail » de l'objet JSON. Le champ « événement » contient le nom de l'événement. Le champ « résultat » contient l'état terminé de l'action qui déclenche l'événement. Pour plus d'informations, veuillez consulter Modèles d'événements Amazon EventBridge dans le Guide de l'utilisateur Amazon EventBridge.

Pour de plus amples informations, veuillez consulter la rubrique What Is Amazon EventBridge? (Qu'est-ce qu'Amazon Eventbridge ?) dans le Guide de l'utilisateur Amazon Eventbridge.

Événements de volume EBS

Amazon EBS envoie des événements à EventBridge lorsque les événements de volume suivants se produisent.

Créer un volume (createVolume)

L'événement createVolume est envoyé à votre compte AWS au terme d'une action de création de volume. Toutefois, il n'est pas enregistré, consigné ou archivé. Cet événement peut avoir le résultat available ou failed. La création échoue si une clé AWS KMS key non valide est fournie, comme illustré dans les exemples ci-dessous.

Données d'événement

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS pour un événement createVolume réussi.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:012345678901:volume/vol-01234567" ], "detail": { "result": "available", "cause": "", "event": "createVolume", "request-id": "01234567-0123-0123-0123-0123456789ab" } }

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS après un événement createVolume ayant échoué. La cause de l'échec est attribuée à une clé KMS désactivée.

{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "sa-east-1", "resources": [ "arn:aws:ec2:sa-east-1:0123456789ab:volume/vol-01234567", ], "detail": { "event": "createVolume", "result": "failed", "cause": "arn:aws:kms:sa-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is disabled.", "request-id": "01234567-0123-0123-0123-0123456789ab", } }

Voici un exemple d'objet JSON émis par EBS après un événement createVolume ayant échoué. La cause de l'échec est attribuée à l'importation en attente d'une clé KMS.

{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "sa-east-1", "resources": [ "arn:aws:ec2:sa-east-1:0123456789ab:volume/vol-01234567", ], "detail": { "event": "createVolume", "result": "failed", "cause": "arn:aws:kms:sa-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is pending import.", "request-id": "01234567-0123-0123-0123-0123456789ab", } }

Supprimer le volume (deleteVolume)

L'événement deleteVolume est envoyé à votre compte AWS au terme d'une action de suppression de volume. Toutefois, il n'est pas enregistré, consigné ou archivé. Le résultat de cet événement est deleted. Si la suppression ne se termine pas, l'événement n'est pas envoyé.

Données d'événement

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS pour un événement deleteVolume réussi.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:012345678901:volume/vol-01234567" ], "detail": { "result": "deleted", "cause": "", "event": "deleteVolume", "request-id": "01234567-0123-0123-0123-0123456789ab" } }

Attacher ou réattacher le volume (attachVolume, reattachVolume)

L'événement attachVolume ou reattachVolume est envoyé à votre compte AWS si un volume ne parvient pas à s'attacher ou à se rattacher à une instance. Toutefois, il n'est pas enregistré, consigné ou archivé. Si vous utilisez une clé KMS pour chiffrer un volume EBS et que la clé KMS devient non valide, EBS émet un événement si cette clé KMS est utilisée ultérieurement pour l'attachement ou le rattachement d'une instance, comme illustré dans les exemples ci-dessous.

Données d'événement

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS après un événement attachVolume ayant échoué. La cause de l'échec est attribuée à la suppression en attente d'une clé KMS.

Note

AWS peut tenter le rattachement d'un volume après la maintenance habituelle des serveurs.

{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:0123456789ab:volume/vol-01234567", "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab" ], "detail": { "event": "attachVolume", "result": "failed", "cause": "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is pending deletion.", "request-id": "" } }

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS après un événement reattachVolume ayant échoué. La cause de l'échec est attribuée à la suppression en attente d'une clé KMS.

{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:0123456789ab:volume/vol-01234567", "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab" ], "detail": { "event": "reattachVolume", "result": "failed", "cause": "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is pending deletion.", "request-id": "" } }

Événements de modification de volume EBS

Amazon EBS envoie des événements modifyVolume à EventBridge lorsqu'un volume est modifié. Toutefois, il n'est pas enregistré, consigné ou archivé.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:012345678901:volume/vol-03a55cf56513fa1b6" ], "detail": { "result": "optimizing", "cause": "", "event": "modifyVolume", "request-id": "01234567-0123-0123-0123-0123456789ab" } }

Événements d'instantané EBS

Amazon EBS envoie des événements à EventBridge lorsque les événements de volume suivants se produisent.

Créer un instantané (createSnapshot)

L'événement createSnapshot est envoyé à votre compte AWS au terme d'une action de création d'instantané. Toutefois, il n'est pas enregistré, consigné ou archivé. Cet événement peut avoir le résultat succeeded ou failed.

Données d'événement

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS pour un événement createSnapshot réussi. Dans la section detail, le champ source contient l'ARN du volume source. Les champs startTime et endTime indiquent le moment où la création de l'instantané a commencé et est terminée.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Snapshot Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-west-2::snapshot/snap-01234567" ], "detail": { "event": "createSnapshot", "result": "succeeded", "cause": "", "request-id": "", "snapshot_id": "arn:aws:ec2:us-west-2::snapshot/snap-01234567", "source": "arn:aws:ec2:us-west-2::volume/vol-01234567", "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ" } }

Créer des instantanés (createSnapshots)

L'événement createSnapshots est envoyé à votre compte AWS au terme d'une action de création d'instantané multi-volume. Cet événement peut avoir le résultat succeeded ou failed.

Données d'événement

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS pour un événement createSnapshots réussi. Dans la section detail, le champ source contient les ARN des volumes sources de l'ensemble d'instantanés multi-volumes. Les champs startTime et endTime indiquent le moment où la création de l'instantané a commencé et est terminée.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Multi-Volume Snapshots Completion Status", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "arn:aws:ec2::us-east-1:snapshot/snap-012345678" ], "detail": { "event": "createSnapshots", "result": "succeeded", "cause": "", "request-id": "", "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ", "snapshots": [ { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "source": "arn:aws:ec2::us-east-1:volume/vol-01234567", "status": "completed" }, { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-012345678", "source": "arn:aws:ec2::us-east-1:volume/vol-012345678", "status": "completed" } ] } }

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS après un événement createSnapshots ayant échoué. La cause de l'échec correspondait à un ou plusieurs instantanés de l'ensemble d'instantanés multi-volumes qui n'ont pas pu aboutir. Les valeurs de snapshot_id sont les ARN des instantanés qui ont échoué. startTime et endTime représentent les instants où l'action de création de l'instantané a commencé et s'est terminée.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Multi-Volume Snapshots Completion Status", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "arn:aws:ec2::us-east-1:snapshot/snap-012345678" ], "detail": { "event": "createSnapshots", "result": "failed", "cause": "Snapshot snap-01234567 is in status error", "request-id": "", "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ", "snapshots": [ { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "source": "arn:aws:ec2::us-east-1:volume/vol-01234567", "status": "error" }, { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-012345678", "source": "arn:aws:ec2::us-east-1:volume/vol-012345678", "status": "error" } ] } }

Copier un instantané (copySnapshot)

L'événement copySnapshot est envoyé à votre compte AWS au terme d'une action de copie d'instantané. Toutefois, il n'est pas enregistré, consigné ou archivé. Cet événement peut avoir le résultat succeeded ou failed.

Données d'événement

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS après un événement copySnapshot réussi. La valeur snapshot_id correspond à l'ARN de l'instantané nouvellement créé. Dans la section detail, la valeur source correspond à l'ARN de l'instantané source. startTime et endTime représentent le moment où l'action de copie de l'instantané a démarré et s'est terminée.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Snapshot Notification", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-west-2::snapshot/snap-01234567" ], "detail": { "event": "copySnapshot", "result": "succeeded", "cause": "", "request-id": "", "snapshot_id": "arn:aws:ec2:us-west-2::snapshot/snap-01234567", "source": "arn:aws:ec2:eu-west-1::snapshot/snap-76543210", "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ", "Incremental": "true" } }

La liste ci-dessous est l'exemple d'un objet JSON émis par EBS après un événement copySnapshot ayant échoué. La cause de l'échec est attribuée à un ID d'instantané source non valide. La valeur snapshot_id correspond à l'ARN de l'instantané ayant échoué. Dans la section detail, la valeur source correspond à l'ARN de l'instantané source. startTime et endTime représentent le moment où l'action de copie de l'instantané a démarré et s'est terminée.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Snapshot Notification", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-west-2::snapshot/snap-01234567" ], "detail": { "event": "copySnapshot", "result": "failed", "cause": "Source snapshot ID is not valid", "request-id": "", "snapshot_id": "arn:aws:ec2:us-west-2::snapshot/snap-01234567", "source": "arn:aws:ec2:eu-west-1::snapshot/snap-76543210", "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ" } }

Partager un instantané (shareSnapshot)

L'événement shareSnapshot est envoyé à votre compte AWS lorsqu'un autre compte partage un instantané avec lui. Toutefois, il n'est pas enregistré, consigné ou archivé. Le résultat est toujours succeeded.

Données d'événement

Ce qui suit est un exemple d'objet JSON émis par EBS après un événement shareSnapshot terminé. Dans la section detail, la valeur source correspond au numéro de compte AWS de l'utilisateur qui a partagé l'instantané avec vous. startTime et endTime représentent le moment où l'action de partage de l'instantané a démarré et s'est terminée. L'événement shareSnapshot est émis uniquement lorsqu'un instantané privé est partagé avec un autre utilisateur. Le partage d'un instantané public ne déclenche pas l'événement.

{ "version": "0", "id": "01234567-01234-0123-0123-012345678901", "detail-type": "EBS Snapshot Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-west-2::snapshot/snap-01234567" ], "detail": { "event": "shareSnapshot", "result": "succeeded", "cause": "", "request-id": "", "snapshot_id": "arn:aws:ec2:us-west-2::snapshot/snap-01234567", "source": 012345678901, "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ" } }

Événements d'archivage d'instantanés EBS

Amazon EBS émet des événements liés aux actions d'archivage des instantanés. Pour plus d'informations, voir Surveiller l'archivage des instantanés.

Événements de restauration d'instantané rapide EBS

Amazon EBS envoie des événements à EventBridge en cas de variation de l'état de la fonction de restauration d'instantané rapide pour un instantané. Les événements sont générés sur la base du meilleur effort.

Voici un exemple de données pour cet événement.

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Fast Snapshot Restore State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1::snapshot/snap-03a55cf56513fa1b6" ], "detail": { "snapshot-id": "snap-1234567890abcdef0", "state": "optimizing", "zone": "us-east-1a", "message": "Client.UserInitiated - Lifecycle state transition", } }

Les valeurs possibles pour state sont enabling, optimizing, enabled, disabling et disabled.

Les valeurs possibles pour message sont les suivantes :

Client.InvalidSnapshot.InvalidState - The requested snapshot transitioned to an invalid state (Error)

Une demande d'activation de la fonction de restauration d'instantané rapide a échoué et l'état est passé à disabling ou disabled. La fonction de restauration d'instantané rapide ne peut pas être activée pour cet instantané.

Client.UserInitiated

L'état est passé avec succès à enabling ou disabling.

Client.UserInitiated - Lifecycle state transition

L'état est passé avec succès à optimizing, enabled ou disabled.

Server.InsufficientCapacity - There was insufficient capacity available to satisfy the request

Une demande d'activation de la fonction de restauration d'instantané rapide a échoué en raison d'une capacité insuffisante et l'état est passé à disabling ou disabled. Attendez, puis recommencez.

Server.InternalError - An internal error caused the operation to fail

Une demande d'activation de la fonction de restauration d'instantané rapide a échoué en raison d'une erreur interne et l'état est passé à disabling ou disabled. Attendez, puis recommencez.

Client.InvalidSnapshot.InvalidState - The requested snapshot was deleted or access permissions were revoked

L'état de restauration d'instantané rapide est passé à disabling ou disabled parce que l'instantané a été supprimé ou non partagé par son propriétaire. La restauration d'instantané rapide ne peut pas être activée pour un instantané qui a été supprimé ou qui n'est plus partagé avec vous.

Utilisation de AWS Lambda pour gérer les événements EventBridge

Vous pouvez utiliser Amazon EBS et Amazon EventBridge pour automatiser votre flux de travail de sauvegarde des données. Il vous est nécessaire de créer une politique IAM, une fonction AWS Lambda pour gérer l'événement et une règle EventBridge qui fait correspondre les évènements entrants et les achemine vers la fonction Lambda.

La procédure suivante utilise l'événement createSnapshot pour copier automatiquement un instantané terminé vers une autre région pour la reprise après sinistre.

Pour copier un instantané terminé vers une autre région
  1. Créez une politique IAM, telle que celle indiquée dans l'exemple suivant, pour fournir les autorisations d'utilisation de l'action CopySnapshot et d'écriture dans le journal EventBridge. Attribuez la politique à l'utilisateur IAM qui gérera l'événement EventBridge.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:CopySnapshot" ], "Resource": "*" } ] }
  2. Définissez une fonction dans Lambda qui sera disponible à partir de la console EventBridge. L'exemple de fonction Lambda ci-dessous, écrite dans Node.js, est appelée par EventBridge lorsqu'un événement createSnapshot correspondant est émis par Amazon EBS (ce qui signifie qu'un instantané est terminé). Lorsqu'elle est appelée, la fonction copie l'instantané de us-east-2 vers us-east-1.

    // Sample Lambda function to copy an EBS snapshot to a different Region var AWS = require('aws-sdk'); var ec2 = new AWS.EC2(); // define variables var destinationRegion = 'us-east-1'; var sourceRegion = 'us-east-2'; console.log ('Loading function'); //main function exports.handler = (event, context, callback) => { // Get the EBS snapshot ID from the event details var snapshotArn = event.detail.snapshot_id.split('/'); const snapshotId = snapshotArn[1]; const description = `Snapshot copy from ${snapshotId} in ${sourceRegion}.`; console.log ("snapshotId:", snapshotId); // Load EC2 class and update the configuration to use destination Region to initiate the snapshot. AWS.config.update({region: destinationRegion}); var ec2 = new AWS.EC2(); // Prepare variables for ec2.modifySnapshotAttribute call const copySnapshotParams = { Description: description, DestinationRegion: destinationRegion, SourceRegion: sourceRegion, SourceSnapshotId: snapshotId }; // Execute the copy snapshot and log any errors ec2.copySnapshot(copySnapshotParams, (err, data) => { if (err) { const errorMessage = `Error copying snapshot ${snapshotId} to Region ${destinationRegion}.`; console.log(errorMessage); console.log(err); callback(errorMessage); } else { const successMessage = `Successfully started copy of snapshot ${snapshotId} to Region ${destinationRegion}.`; console.log(successMessage); console.log(data); callback(null, successMessage); } }); };

    Pour vous assurer que votre fonction Lambda est disponible à partir de la console EventBridge, créez-la dans la région où l'événement EventBridge doit se produire. Pour plus d'informations, consultez le Guide du développeur AWS Lambda.

  3. Ouvrez la console Amazon EventBridge à l'adresse https://console.aws.amazon.com/events/.

  4. Dans le volet de navigation, sélectionnez Rules (Règles), puis Create rule (Créer une règle).

  5. Pour Step 1: Define rule detail (Étape 1 : Définir les détails de la règle), procédez comme suit :

    1. Saisissez un Name (Nom) et une Description pour la règle.

    2. Pour Event bus (Bus d'événements), gardez default (par défaut).

    3. Vérifiez que l'option Enable the rule on the selected event bus (Activer la règle sur le bus d'événements sélectionné) est activée.

    4. Pour Event type (Type d'événement), choisissez Rule with an event pattern (Règle avec un modèle d'événement).

    5. Choisissez Suivant.

  6. Pour Step 2: Build event pattern (Étape 2 : Créer un modèle d'événement), procédez comme suit :

    1. Pour Event source (Origine de l'événement), sélectionnez AWS events or EventBridge partner events (Événements AWS ou événements partenaires EventBridge).

    2. Dans la section Event pattern (Modèle d'événement), pour Event source (Origine de l'événement), assurez-vous que AWS service (Service AWS) est sélectionné, et pour AWS service (Service AWS), sélectionnez EC2.

    3. Pour Event type (Type d'événement), sélectionnez EBS Snapshot Notification (Notification Instantanée EBS), Specific event(s) (Événement(s) spécifique), puis choisissez createSnapshot.

    4. Sélectionnez Specific result(s) (Résultat(s) spécifique(s)), puis choisissez succeeded.

    5. Choisissez Suivant.

  7. Pour Step 3: Select targets (Étape 3 : Sélectionner les cibles), procédez comme suit :

    1. Pour Types de cibles, choisissez service AWS.

    2. Pour Select target (Sélectionner la cible), choisissez Lambda function (Fonction Lambda), et pour Fonction, sélectionnez la fonction que vous avez créée précédemment.

    3. Choisissez Next (Suivant)

  8. Pour Step 4: Configure tags (Étape 4 : Configurer les balises), spécifiez des balises pour la règle si nécessaire, puis choisissez Next (Suivant).

  9. Pour Step 5: Review and create (Étape 5 : Examen et création), passez en revue la règle, puis choisissez Create rule (Créer une règle).

Votre règle doit désormais apparaître sur l'onglet Rules. Dans l'exemple présenté, l'événement que vous avez configuré doit être émis par EBS la prochaine fois que vous copiez un instantané.