Amazon Elastic Compute Cloud
Linux 인스턴스용 사용 설명서

Amazon EBS용 Amazon CloudWatch Events

Amazon EBS는 Amazon CloudWatch Events를 기반으로 다양한 볼륨, 스냅샷 및 암호화 상태 변경에 대한 알림을 보냅니다. CloudWatch 이벤트에서는 볼륨, 스냅샷 또는 암호화 키 상태 변경에 대한 응답으로 프로그래밍 방식의 작업을 트리거하는 규칙을 수립할 수 있습니다. 예를 들어 스냅샷이 생성되면 AWS Lambda 함수를 트리거하여 완료된 스냅샷을 다른 계정과 공유하거나 재해 복구를 위해 다른 리전으로 복사할 수 있습니다.

CloudWatch의 이벤트는 JSON 객체로 표현됩니다. 이 이벤트에 고유한 필드는 JSON 객체의 "세부 정보" 섹션에 포함되어 있습니다. "이벤트" 필드에는 이벤트 이름이 포함됩니다. "결과" 필드에는 이벤트를 트리거한 작업의 완료 상태가 포함됩니다. 자세한 내용은 Amazon CloudWatch Events 사용 설명서에서 CloudWatch 이벤트의 이벤트 패턴을 참조하십시오.

자세한 정보는 Amazon CloudWatch 사용 설명서이벤트 사용을 참조하십시오.

EBS 볼륨 이벤트

Amazon EBS는 다음과 같은 볼륨 이벤트가 발생하는 경우 CloudWatch 이벤트에 이벤트를 보냅니다.

볼륨 생성(createVolume)

볼륨 생성 작업이 완료되면 createVolume 이벤트가 AWS 계정으로 전송됩니다. 그러나 저장, 로깅, 아카이빙은 되지 않습니다. 이 이벤트에서 available 또는 failed 결과가 발생할 수 있습니다. 잘못된 KMS 키가 제공되면 아래 예와 같이 생성이 실패합니다.

이벤트 데이터

아래 목록에 성공적인 createVolume 이벤트에 대해 EBS가 발생시키는 JSON 객체의 예를 열거했습니다.

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

아래 목록에 createVolume 이벤트 실패 이후 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. 실패의 원인은 비활성화된 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 disabled.", "request-id": "01234567-0123-0123-0123-0123456789ab", } }

아래에 createVolume 이벤트 실패 이후 EBS가 발생시키는 JSON 객체의 예를 제시했습니다. 실패의 원인은 보류 중인 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", } }

볼륨 삭제(deleteVolume)

볼륨 삭제 작업이 완료되면 deleteVolume 이벤트가 AWS 계정으로 전송됩니다. 그러나 저장, 로깅, 아카이빙은 되지 않습니다. 이 이벤트에 deleted 결과가 있습니다. 삭제가 완료되지 않으면 이벤트가 전송되지 않습니다.

이벤트 데이터

아래 목록에 성공적인 deleteVolume 이벤트에 대해 EBS가 발생시키는 JSON 객체의 예를 열거했습니다.

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

볼륨 연결 또는 다시 연결(attachVolume, reattachVolume)

볼륨이 인스턴스에 연결하지 못하거나 다시 연결하지 못하면 AWS 계정으로 attachVolume 또는 reattachVolume 이벤트가 전송됩니다. 그러나 저장, 로깅, 아카이빙은 되지 않습니다. KMS 키를 사용하여 EBS 볼륨을 암호화할 경우 키가 무효해지면, EBS는 해당 키가 나중에 인스턴스에 연결하거나 다시 연결하는 데 사용될 경우 이벤트를 발송합니다(아래 예 참조).

이벤트 데이터

아래 목록에 attachVolume 이벤트 실패 이후 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. 실패의 원인은 보류 중인 KMS 키의 삭제였습니다.

참고

AWS가 정기 서버 유지 관리 후 볼륨에 다시 연결을 시도할 수 있습니다.

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

아래 목록에 reattachVolume 이벤트 실패 이후 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. 실패의 원인은 보류 중인 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": "" } }

EBS 스냅샷 이벤트

Amazon EBS는 다음과 같은 볼륨 이벤트가 발생하는 경우 CloudWatch 이벤트에 이벤트를 보냅니다.

스냅샷 생성(createSnapshot)

스냅샷 생성 작업이 완료되면 createSnapshot 이벤트가 AWS 계정으로 전송됩니다. 그러나 저장, 로깅, 아카이빙은 되지 않습니다. 이 이벤트에서 succeeded 또는 failed 결과가 발생할 수 있습니다.

이벤트 데이터

아래 목록에 성공적인 createSnapshot 이벤트에 대해 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. detail 섹션에서 source 필드에는 소스 볼륨의 ARN이 들어 있습니다. StartTimeEndTime 필드는 스냅샷 생성이 시작된 시점과 완료된 시점을 나타냅니다.

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

스냅샷 생성(createSnapshots)

다중 볼륨 스냅샷 생성 작업이 완료되면 createSnapshots 이벤트가 AWS 계정으로 전송됩니다. 이 이벤트에서 succeeded 또는 failed 결과가 발생할 수 있습니다.

이벤트 데이터

아래 목록에 성공적인 createSnapshots 이벤트에 대해 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. detail 섹션의 source 필드에는 다중 볼륨 스냅샷 세트의 소스 볼륨 ARN이 포함되어 있습니다. StartTimeEndTime 필드는 스냅샷 생성이 시작된 시점과 완료된 시점을 나타냅니다.

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

아래 목록에 createSnapshots 이벤트 실패 이후 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. 실패의 원인은 하나 이상의 스냅샷을 완료하기 못했기 때문입니다. snapshot_id의 값은 실패한 스냅샷의 ARN입니다. StartTimeEndTime은 스냅샷 생성 작업이 시작 및 종료된 시기를 나타냅니다.

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

스냅샷 복사(copySnapshot)

스냅샷 복사 작업이 완료되면 copySnapshot 이벤트가 AWS 계정으로 전송됩니다. 그러나 저장, 로깅, 아카이빙은 되지 않습니다. 이 이벤트에서 succeeded 또는 failed 결과가 발생할 수 있습니다.

이벤트 데이터

아래 목록에는 copySnapshot 이벤트가 성공한 후 EBS가 전송하는 JSON 객체의 예가 나와 있습니다. snapshot_id의 값은 새로 생성된 스냅샷의 ARN입니다. detail 섹션에서 source의 값은 소스 스냅샷의 ARN입니다. StartTimeEndTime은 스냅샷 복사 작업이 시작된 시점과 종료된 시점을 나타냅니다.

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

아래 목록에 copySnapshot 이벤트 실패 이후 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. 실패의 원인은 잘못된 소스 스냅샷 ID였습니다. snapshot_id의 값은 실패한 스냅샷의 ARN입니다. detail 섹션에서 source의 값은 소스 스냅샷의 ARN입니다. StartTimeEndTime은 스냅샷 복사 작업이 시작된 시점과 종료된 시점을 나타냅니다.

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

스냅샷 공유(shareSnapshot)

다른 계정이 스냅샷을 공유하면 shareSnapshot 이벤트가 AWS 계정으로 전송됩니다. 그러나 저장, 로깅, 아카이빙은 되지 않습니다. 결과는 항상 succeeded입니다.

이벤트 데이터

아래에 shareSnapshot 이벤트 완료 이후 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. detail 섹션에서 source의 값은 스냅샷을 공유한 사용자의 AWS 계정 번호입니다. StartTimeEndTime은 스냅샷 공유 작업이 시작된 시점과 종료된 시점을 나타냅니다. shareSnapshot 이벤트는 프라이빗 스냅샷이 다른 사용자와 공유될 때만 발생합니다. 퍼블릭 스냅샷 공유는 이벤트를 트리거하지 않습니다.

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

EBS 볼륨 수정 이벤트

Amazon EBS는 볼륨이 수정될 때 CloudWatch 이벤트에 modifyVolume 이벤트를 보냅니다. 그러나 저장, 로깅, 아카이빙은 되지 않습니다.

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

AWS Lambda를 이용한 CloudWatch 이벤트 처리

Amazon EBS와 CloudWatch 이벤트를 사용하여 데이터 백업 워크플로를 자동화할 수 있습니다. 이를 위해 IAM 정책, 이벤트를 처리할 AWS Lambda 함수, 수신 이벤트와 일치하는 Amazon CloudWatch Events 규칙을 생성하고 Lambda 함수로 라우팅해야 합니다.

다음 절차에서는 재해 복구를 위해 createSnapshot 이벤트를 사용하여 완료된 스냅샷을 다른 리전으로 자동으로 복사합니다.

완료된 스냅샷을 다른 리전으로 복사하려면

  1. 다음 예에 표시된 것과 같은 IAM 정책을 생성하여 CopySnapshot 작업을 실행하고 CloudWatch 이벤트 로그에 쓸 수 있는 권한을 제공합니다. CloudWatch 이벤트를 처리할 IAM 사용자에게 정책을 할당합니다.

    { "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. CloudWatch 콘솔에서 사용할 수 있는 Lambda 함수를 정의합니다. 아래 Node.js로 작성된 샘플 Lambda 함수는 일치하는 createSnapshot 이벤트를 Amazon EBS가 발생시킬 때 CloudWatch에 의해 호출됩니다. 이는 스냅샷이 완료되었음을 의미합니다. 호출되면 함수가 us-east-2에서 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); } }); };

    Lambda 함수를 CloudWatch 콘솔에서 사용하도록 보장하려면 CloudWatch 이벤트가 발생하는 리전에서 생성합니다. 자세한 내용은 AWS Lambda 개발자 안내서를 참조하십시오.

  3. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  4. 이벤트, 규칙 생성, Select event source(이벤트 소스 선택), Amazon EBS 스냅샷을 선택합니다.

  5. Specific Event(s)(특정 이벤트)에서 createSnapshot(스냅샷 생성)을, Specific Result(s)(특정 결과)에서 성공을 선택합니다.

  6. Rule target(대상 실행)에서 이전에 생성한 샘플 함수를 찾아 선택합니다.

  7. 대상, 대상 추가를 선택합니다.

  8. Lambda 함수에서 이전에 생성한 Lambda 함수를 선택하고 세부 정보 구성을 선택합니다.

  9. 규칙 세부 정보 구성 페이지에서 이름설명에 값을 입력합니다. 상태 확인란을 선택하여 함수를 활성화합니다(활성으로 설정).

  10. 규칙 생성을 선택합니다.

이제 규칙 탭에 규칙이 표시됩니다. 표시된 예에서 구성된 이벤트는 다음에 스냅샷을 복사할 때 EBS가 발생시킵니다.