메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

Amazon EBS용 Amazon CloudWatch Events

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

자세한 내용은 Amazon CloudWatch 사용 설명서Using Events 단원을 참조하십시오.

이벤트 정의와 예시

이 섹션에서는 지원되는 Amazon EBS 이벤트를 정의하고, 특정 시나리오에 대한 이벤트 출력의 예를 제공합니다. CloudWatch의 이벤트는 JSON 객체로 표현됩니다. 이벤트 객체의 형식과 내용에 대한 자세한 내용은 Amazon CloudWatch Events 사용 설명서이벤트 및 이벤트 패턴을 참조하십시오.

참고

Cloudwatch에 포착되지 않은 EBS 볼륨에 대한 추가 정보는

DescribeVolumes API 및 describe-volumes CLI 명령으로 확인할 수 있습니다.

EBS 이벤트에 고유한 필드는 아래 표시된 JSON 객체의 "세부 정보" 섹션에 포함되어 있습니다. "이벤트" 필드에는 이벤트 이름이 포함됩니다. "결과" 필드에는 이벤트를 트리거한 작업의 완료 상태가 포함됩니다.

스냅샷 생성(createSnapshot)

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

이벤트 데이터

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

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

스냅샷 복사(copySnapshot)

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

이벤트 데이터

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

Copy
{ "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 객체의 예를 열거했습니다. source의 값은 스냅샷을 공유한 사용자의 AWS 계정 번호입니다. StartTimeEndTime은 스냅샷 공유 작업이 시작된 시점과 종료된 시점을 나타냅니다. shareSnapshot 이벤트는 프라이빗 스냅샷이 다른 사용자와 공유될 때만 발생합니다. 퍼블릭 스냅샷 공유는 이벤트를 트리거하지 않습니다.

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

볼륨 연결 또는 다시 연결에 유효하지 않은 암호화 키(attachVolume, reattachVolume)

잘못된 KMS 키로 인해 인스턴스에 볼륨을 연결하거나 다시 연결하지 못하면 AWS 계정으로 attachVolume 이벤트가 전송됩니다.

참고

KMS 키를 사용해 EBS 볼륨을 암호화할 수 있습니다. 볼륨을 암호화하는 데 사용되는 키가 무효화되면, 이후 해당 키가 볼륨 생성, 연결 또는 재연결에 사용될 경우 EBS가 이벤트를 발생시킵니다.

이벤트 데이터

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

참고

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

Copy
{ "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 키의 삭제였습니다.

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

볼륨 생성에 유효하지 않은 암호화 키(createVolume)

잘못된 KMS 키로 인해 볼륨 생성에 실패하면 createVolume 이벤트가 AWS 계정으로 전송됩니다.

KMS 키를 사용해 EBS 볼륨을 암호화할 수 있습니다. 볼륨을 암호화하는 데 사용되는 키가 무효화되면, 이후 해당 키가 볼륨 생성, 연결 또는 재연결에 사용될 경우 EBS가 이벤트를 발생시킵니다.

이벤트 데이터

아래 목록에 createVolume 이벤트 실패 이후 EBS가 발생시키는 JSON 객체의 예를 열거했습니다. 실패의 원인은 비활성화된 KMS 키였습니다.

Copy
{ "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 키 가져오기였습니다.

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

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

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

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

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

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

    Copy
    { "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 함수는 Amazon EBS가 일치하는 createSnapshot 이벤트를 발생시킬 때 CloudWatch에 의해 호출됩니다(스냅샷이 완료되었음을 의미). 호출되면 함수가 us-east-2에서 us-east-1로 스냅샷을 복사합니다.

    Copy
    // 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. [Events], [Create rule], [Select event source], [Amazon EBS Snapshots]을 선택합니다.

  5. [Specific Event(s)]에서 [createSnapshot]을, [Specific Result(s)]에서 [succeeded]를 선택합니다.

  6. [Rule target]에서 이전에 생성한 샘플 함수를 찾아 선택합니다.

  7. [Target], [Add Target]을 선택합니다.

  8. [Lambda function]에서 이전에 생성한 Lambda 함수를 선택하고 [Configure details]를 선택합니다.

  9. [Configure rule details] 페이지에서 [Name] 및 [Description]에 값을 입력합니다. [State] 확인란을 선택하여 함수를 활성화합니다([Enabled]로 설정).

  10. [Create rule]을 선택합니다.

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