Amazon EventBridge로 AMI 이벤트 모니터링하기

Amazon EventBridge로 AMI 이벤트 모니터링하기 (Monitor AMI events using Amazon EventBridge)

AMI(Amazon Machine Image)의 상태가 바뀌면 Amazon EC2가 Amazon EventBridge(이전 이름 Amazon CloudWatch Events)로 보내는 이벤트를 생성해요. 이벤트는 JSON 형식으로 기본 EventBridge 이벤트 버스에 전송돼요.

출처: 문서

본문

Amazon EventBridge로 이 이벤트를 감지하고 대응할 수 있어요. EventBridge에서 규칙(rules)을 만들어 이벤트에 대한 응답으로 동작을 트리거하는 식이에요. 예를 들어 AMI 생성 과정이 완료됐을 때 감지해 Amazon SNS 주제를 호출해 이메일 알림을 보내는 규칙을 만들 수 있어요.

Amazon EC2는 AMI가 다음 상태 중 하나에 들어가면 EC2 AMI State Change 이벤트를 생성해요.

  • available
  • failed
  • deregistered
  • disabled

이벤트는 최선 노력(best effort) 기반으로 생성돼요.

다음 표는 AMI 작업과 AMI가 들어갈 수 있는 상태를 보여줘요. Yes는 해당 작업이 실행될 때 AMI가 들어갈 수 있는 상태를 의미해요.

AMI 작업 available failed deregistered disabled
CopyImage Yes Yes
CreateImage Yes Yes
CreateRestoreImageTask Yes Yes
DeregisterImage Yes
DisableImage Yes
EnableImage Yes
RegisterImage Yes Yes

이벤트 세부 정보 (Event details)

동작을 트리거하는 규칙을 만들 때 다음 필드를 쓸 수 있어요.

  • "source": "aws.ec2" – 이벤트가 Amazon EC2에서 왔음을 식별해요.
  • "detail-type": "EC2 AMI State Change" – 이벤트 이름을 식별해요.
  • "detail": { "ImageId": "ami-0abcdef1234567890", "State": "available", } – AMI ID와 AMI 상태(available, failed, deregistered, disabled)를 제공해요.

자세한 내용은 Amazon EventBridge 사용자 가이드의 "Amazon EventBridge events", "Amazon EventBridge event patterns", "Amazon EventBridge rules"를 참고하세요. Lambda 함수와 Lambda 함수를 실행하는 EventBridge 규칙을 만드는 튜토리얼은 AWS Lambda 개발자 가이드의 "Tutorial: Log the state of an Amazon EC2 instance using EventBridge"를 참고하세요.

available 이벤트

CreateImage, CopyImage, RegisterImage, CreateRestoreImageTask, EnableImage 작업 중 하나가 성공한 후 AMI가 available 상태에 들어가면 Amazon EC2가 생성하는 이벤트의 예시예요. "State": "available"은 작업이 성공했음을 나타내요.

{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "available",
        "ErrorMessage": ""
    }
}

failed 이벤트

CreateImage, CopyImage, RegisterImage, CreateRestoreImageTask 작업 중 하나가 실패한 후 AMI가 failed 상태에 들어가면 생성되는 이벤트의 예시예요. 다음 필드가 관련 정보를 제공해요.

  • "State": "failed" – 작업이 실패했음을 나타내요.
  • "ErrorMessage": "" – 실패한 작업의 이유를 제공해요.
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "failed",
        "ErrorMessage": "Description of failure"
    }
}

deregistered 이벤트

DeregisterImage 작업이 성공한 후 AMI가 deregistered 상태에 들어가면 생성되는 이벤트의 예시예요. 작업이 실패하면 이벤트가 생성되지 않아요. DeregisterImage는 동기식 작업이라 실패를 즉시 알 수 있어요. "State": "deregistered"은 DeregisterImage 작업이 성공했음을 나타내요.

{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "deregistered",
        "ErrorMessage": ""
    }
}

disabled 이벤트

DisableImage 작업이 성공한 후 AMI가 disabled 상태에 들어가면 생성되는 이벤트의 예시예요. 작업이 실패하면 이벤트가 생성되지 않아요. DisableImage는 동기식 작업이라 실패를 즉시 알 수 있어요. "State": "disabled"은 DisableImage 작업이 성공했음을 나타내요.

{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "disabled",
        "ErrorMessage": ""
    }
}

더 알아보기