Amazon CloudWatch Events para Amazon EBS - Amazon Elastic Compute Cloud

Amazon CloudWatch Events para Amazon EBS

O Amazon EBS emite notificações com base no Amazon CloudWatch Events para uma variedade de alterações no status da criptografia, do snapshot e do volume. Com o CloudWatch Events, é possível estabelecer regras que acionam ações programáticas em resposta a uma alteração no estado da chave de criptografia, do snapshot ou do volume. Por exemplo, quando um snapshot é criado, é possível acionar uma função do AWS Lambda para compartilhar o snapshot concluído com outra conta ou copiá-lo em outra região para fins de recuperação de desastres.

Os eventos no CloudWatch são representados como objetos JSON. Os campos que são exclusivos do evento estão contidos na seção "detalhes" do objeto JSON. O campo "evento" contém o nome do evento. O campo "resultados" contém o status concluído da ação que acionou o evento. Para obter mais informações, consulte Padrões de eventos no CloudWatch Events no Manual do usuário do Amazon CloudWatch Events.

Para obter mais informações, consulte Como usar eventos no Guia do usuário do Amazon CloudWatch.

Eventos de volume do EBS

O Amazon EBS envia eventos para o CloudWatch Events quando ocorrem os eventos de volume a seguir.

Criar volume (createVolume)

O evento createVolume é enviado à sua conta da AWS quando uma ação para criar um volume for concluída. Contudo, não é salvo, registrado ou arquivado. Esse evento pode ter um resultado de available ou failed. Ocorrerá uma falha se uma AWS KMS key inválida for fornecida, conforme mostrado nos exemplos abaixo.

Dados de eventos

A lista abaixo é um exemplo de um objeto JSON emitido por EBS para um evento createVolume bem-sucedido.

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

A lista abaixo é um exemplo de um objeto JSON emitido por EBS depois de um evento createVolume com falha. A causa da falha foi uma Chave do KMS desabilitada.

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

A lista a seguir é um exemplo de um objeto JSON emitido por EBS depois de um evento createVolume com falha. A causa da falha foi a importação pendente de uma Chave do 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", } }

Excluir volume (deleteVolume)

O evento deleteVolume é enviado à sua conta da AWS quando uma ação para excluir um volume for concluída. Contudo, não é salvo, registrado ou arquivado. Esse evento tem o resultado deleted. Se a exclusão não for concluída, o evento nunca será enviado.

Dados de eventos

A lista abaixo é um exemplo de um objeto JSON emitido por EBS para um evento deleteVolume bem-sucedido.

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

Anexar ou reanexar volumes (attachVolume, reattachVolume)

O evento attachVolume ou o reattachVolume será enviado à sua conta da AWS se ocorrer uma falha ao associar ou reassociar um volume a uma instância. Contudo, não é salvo, registrado ou arquivado. Se você usar uma Chave do KMS para criptografar um volume do EBS e a Chave do KMS se tornar inválida, o EBS emitirá um evento se a Chave do KMS for usada posteriormente para associar ou reassociar a uma instância, conforme mostrado nos exemplos abaixo.

Dados de eventos

A lista abaixo é um exemplo de um objeto JSON emitido por EBS depois de um evento attachVolume com falha. A causa da falha foi a exclusão pendente de uma Chave do KMS.

nota

A AWS pode tentar reanexar a um volume seguindo a manutenção rotineira do servidor.

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

A lista abaixo é um exemplo de um objeto JSON emitido por EBS depois de um evento reattachVolume com falha. A causa da falha foi a exclusão pendente de uma Chave do 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": "" } }

Eventos de modificação de volume do EBS

O Amazon EBS envia eventos modifyVolume para o CloudWatch Events quando um volume é modificado. Contudo, não é salvo, registrado ou arquivado.

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

Eventos de snapshot do EBS

O Amazon EBS envia eventos ao CloudWatch Events quando ocorrem os eventos de volume a seguir.

Criar snapshot (createSnapshot)

O evento createSnapshot é enviado à sua conta da AWS quando uma ação para criar um snapshot termina. Contudo, não é salvo, registrado ou arquivado. Esse evento pode ter um resultado de succeeded ou failed.

Dados de eventos

A lista abaixo é um exemplo de um objeto JSON emitido por EBS para um evento createSnapshot bem-sucedido. Na seção detail, o campo source contém o ARN do volume de origem. Os campos startTime e endTime indicam quando a criação do snapshot começou e foi concluída.

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

Criar snapshots (createSnapshots)

O evento createSnapshots é enviado à sua conta da AWS quando uma ação para criar um snapshot de vários volumes termina. Esse evento pode ter um resultado de succeeded ou failed.

Dados de eventos

A lista abaixo é um exemplo de um objeto JSON emitido por EBS para um evento createSnapshots bem-sucedido. Na seção detail, o campo source contém os ARNs dos volumes de origem do conjunto de snapshots de vários volumes. Os campos startTime e endTime indicam quando a criação do snapshot começou e foi concluída.

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

A lista abaixo é um exemplo de um objeto JSON emitido por EBS depois de um evento createSnapshots com falha. A causa da falha foi a impossibilidade de conclusão de um ou mais snapshots do conjunto de snapshots de múltiplos volumes. Os valores de snapshot_id são os ARNs dos snapshots com falha. startTime e endTime representam quando a ação de criação de snapshots começou e terminou.

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

Copiar snapshot (copySnapshot)

O evento copySnapshot é enviado à sua conta da AWS quando uma ação para copiar um snapshot termina. Contudo, não é salvo, registrado ou arquivado. Esse evento pode ter um resultado de succeeded ou failed.

Dados de eventos

A lista abaixo é um exemplo de um objeto JSON emitido pelo EBS após um evento copySnapshot bem-sucedido. O valor de snapshot_id é o ARN do snapshot recém-criado. Na seção detail, o valor de source é o ARN do snapshot de origem. startTime e endTime representam o início e o fim da ação copy-snapshot.

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

A lista abaixo é um exemplo de um objeto JSON emitido por EBS depois de um evento copySnapshot com falha. A causa da falha era um ID de snapshot de origem inválido. O valor de snapshot_id é o nome de recurso da Amazon (ARN) do snapshot com falha. Na seção detail, o valor de source é o ARN do snapshot de origem. startTime e endTime representam o início e o fim da ação copy-snapshot.

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

Compartilhar snapshot (shareSnapshot)

O evento shareSnapshot é enviado à sua conta da AWS quando outra conta compartilha um snapshot com ela. Contudo, não é salvo, registrado ou arquivado. O resultado é sempre succeeded.

Dados de eventos

Veja a seguir um exemplo de um objeto JSON emitido pelo EBS depois de um evento shareSnapshot concluído. Na seção detail, o valor de source é o número da conta da AWS do usuário que compartilhou o snapshot com você. startTime e endTime representam o início e o fim da ação share-snapshot. O evento shareSnapshot é emitido somente quando um snapshot privado é compartilhado com outro usuário. Compartilhar um snapshot público não aciona o evento.

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

Eventos de arquivo de snapshots do EBS

O Amazon EBS emite eventos relacionados a ações de arquivamento de snapshots. Para obter mais informações, consulte Monitorar o arquivamento de snapshots.

Eventos de restauração rápida do snapshot do EBS

O Amazon EBS envia eventos para o CloudWatch Events quando o estado da restauração rápida do snapshot muda. Eventos são emitidos com base no melhor esforço.

A seguir estão dados de exemplo para esse evento.

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

Os valores possíveis para state são enabling, optimizing, enabled, disabling e disabled.

Os valores possíveis para message são os seguintes:

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

A solicitação para habilitar a restauração rápida do snapshot falhou e o estado mudou para disabling ou disabled. A restauração rápida do snapshot não pode ser habilitada para esse snapshot.

Client.UserInitiated

O estado fez a transição para enabling ou disabling.

Client.UserInitiated - Lifecycle state transition

O estado fez a transição para optimizing, enabled ou disabled.

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

A solicitação para habilitar a restauração rápida do snapshot falhou por capacidade insuficiente, e o estado mudou para disabling ou disabled. Espere e tente novamente.

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

A solicitação para habilitar a restauração rápida do snapshot falhou por erro interno, e o estado mudou para disabling ou disabled. Espere e tente novamente.

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

Foi feita a transição do estado de restauração rápida de snapshots para disabling ou disabled porque o snapshot foi excluído ou não compartilhado pelo proprietário do snapshot. A restauração rápida de snapshots não pode ser habilitada para um snapshot que tenha sido excluído ou não seja mais compartilhado com você.

Usar o AWS Lambda para lidar com o CloudWatch Events

É possível usar o Amazon EBS e o CloudWatch Events para automatizar o fluxo de trabalho de backup de dados. Isso requer que você crie uma política do IAM, uma função do AWS Lambda para lidar com o evento e uma regra do Amazon CloudWatch Events que corresponde aos eventos de entrada e os roteia para a função do Lambda.

O procedimento a seguir usa o evento createSnapshot para copiar automaticamente um snapshot concluído em outra região para recuperação de desastres.

Como copiar um snapshot concluído em outra região

  1. Crie uma política do IAM, como a mostrada no exemplo a seguir, para fornecer permissões para usar a ação CopySnapshot e gravá-la no log do CloudWatch Events. Atribua a política ao usuário do IAM que lidará com o evento do CloudWatch.

    { "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. Defina uma função no Lambda que estará disponível no console do CloudWatch. O exemplo de função do Lambda abaixo, escrito em Node.js, é invocado pelo CloudWatch quando um evento createSnapshot correspondente é emitido pelo Amazon EBS (significando que um snapshot foi concluído). Quando invocada, a função copia o snapshot de us-east-2 em 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 CloudWatch 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); } }); };

    Para garantir que a sua função do Lambda esteja disponível no console do CloudWatch, crie-a na região onde o evento do CloudWatch ocorrerá. Para obter mais informações, consulte o Guia do desenvolvedor do AWS Lambda.

  3. Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/.

  4. No painel de navegação, expanda Events (Eventos) e escolha Rules (Regras) e, depois, escolha Create rule (Criar regra).

  5. Escolha Event Pattern (Padrão de evento). Em Service Name (Nome do serviço), escolha EC2 e, para Event Type (Tipo de evento), escolha EBS Snapshot Notification (Notificação de snapshot do EBS).

  6. Selecione Specific event(s) (Eventos específicos) e depois escolha createSnapshot (criar snapshot).

  7. Selecione Specific result(s) (Resultados específicos) e depois escolha succeeded (com êxito).

  8. Na seção Targets (Destinos), escolha Add target (Adicionar destino) e, em Function (Função), escolha a função do Lambda criada anteriormente.

  9. Escolha Configure details (Configurar detalhes).

  10. Na página Configure rule details (Configurar detalhes da regra), insira os valores para Name (Nome) e Description (Descrição). Marque a caixa de seleção State (Estado) para ativar a função.

  11. Selecione Criar regra.

A regra agora deve aparecer na guia Rules (Regras). No exemplo mostrado, o evento que você configurou deve ser emitido pelo EBS na próxima vez você copiar um snapshot.