

# 스팟 인스턴스 중단 공지
<a name="spot-instance-termination-notices"></a>

*스팟 인스턴스 중단 공지*는 Amazon EC2가 스팟 인스턴스를 중지 또는 종료하기 2분 전에 생성되는 경고입니다. 최대 절전을 중지 행동으로 지정할 경우 중지 공지를 수신하지만, 최대 절전 과정은 즉시 시작되므로 2분 경고를 받지 않습니다.

스팟 인스턴스 중단을 정상적으로 처리하는 가장 좋은 방법은 내결함성이 있도록 애플리케이션을 설계하는 것입니다. 이를 위해 스팟 인스턴스 중단 공지를 활용할 수 있습니다. 5초마다 이러한 중단 공지를 확인하는 것이 좋습니다.

중단 공지는 EventBridge 이벤트 및 스팟 인스턴스의 [인스턴스 메타데이터](ec2-instance-metadata.md) 항목으로 제공됩니다. 중단 알림은 최선의 노력을 한 후 발송됩니다.

## EC2 Spot Instance Interruption Warning 이벤트를 트리거합니다
<a name="ec2-spot-instance-interruption-warning-event"></a>

Amazon EC2에서는 스팟 인스턴스를 중단할 때 실제 중단 2분 전에 이벤트를 전송합니다(최대 절전 모드는 즉시 시작하기 때문에 중단 공지를 2분 전에 받지 않는 최대 절전 모드는 제외). 이 이벤트는 Amazon EventBridge에서 감지할 수 있습니다. EventBridge 이벤트에 대한 자세한 내용은 [Amazon EventBridge 사용 설명서](https://docs.aws.amazon.com/eventbridge/latest/userguide/)를 참조하세요. 이벤트 규칙을 생성하고 사용하는 방법을 안내하는 자세한 예제는 [Amazon EC2 스팟 인스턴스 중단 공지 활용](https://aws.amazon.com/blogs/compute/taking-advantage-of-amazon-ec2-spot-instance-interruption-notices/)을 참조하세요.

다음은 스팟 인스턴스 중단 이벤트의 예제입니다. 가능한 `instance-action` 값은 `hibernate`, `stop` 또는 `terminate`입니다.

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-123456789012",
    "detail-type": "EC2 Spot Instance Interruption Warning",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-2",
    "resources": ["arn:aws:ec2:us-east-2a:instance/i-1234567890abcdef0"],
    "detail": {
        "instance-id": "i-1234567890abcdef0",
        "instance-action": "action"
    }
}
```

**참고**  
스팟 인스턴스 중단 이벤트의 ARN 형식은 `arn:aws:ec2:availability-zone:instance/instance-id`입니다. 이 형식은 [EC2 리소스 ARN 형식](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-resources-for-iam-policies)과 다릅니다.

## instance-action
<a name="instance-action-metadata"></a>

`instance-action` 항목은 해당 작업과 작업이 이루어지는 대략적 시간(UTC 기준)을 지정합니다.

스팟 인스턴스가 Amazon EC2에 의해 중지되거나 종료되도록 표시된 경우 [인스턴스 메타데이터](ec2-instance-metadata.md)에 `instance-action` 항목이 있습니다. 표시하지 않은 경우에는 이 항목이 없습니다. 인스턴스 메타데이터 서비스 버전 2(IMDSv2)를 사용하여 다음과 같이 `instance-action`을 검색할 수 있습니다.

------
#### [ Linux ]

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/spot/instance-action
```

------
#### [ Windows ]

```
[string]$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/instance-action
```

------

 다음 예시 출력에서는 이 인스턴스가 중지될 시간을 알려줍니다.

```
{"action": "stop", "time": "2017-09-18T08:22:00Z"}
```

다음 예시 출력에서는 이 인스턴스가 종료될 시간을 알려줍니다.

```
{"action": "terminate", "time": "2017-09-18T08:22:00Z"}
```

Amazon EC2가 인스턴스를 중지 또는 종료할 준비가 되지 않거나 사용자가 인스턴스를 직접 종료한 경우 `instance-action` 항목이 인스턴스 메타데이터에 없고 사용자가 이를 검색하려 하면 HTTP 404 오류를 수신하게 됩니다.

## termination-time
<a name="termination-time-metadata"></a>

`termination-time` 항목은 인스턴스가 종료 신호를 수신할 때 대략적인 시간(UTC 기준)을 지정합니다.

**참고**  
이 항목은 이전 버전과의 호환성을 위해 보존되며, 그 대신 `instance-action`을 사용해야 합니다.

Amazon EC2에서 스팟 인스턴스를 종료 대상으로 표시한 경우(중단 동작이 `terminate`로 설정된 스팟 인스턴스 중단 또는 영구 스팟 인스턴스 요청 취소로 인해) `termination-time` 항목이 [인스턴스 메타데이터](ec2-instance-metadata.md)에 존재합니다. 표시하지 않은 경우에는 이 항목이 없습니다. 다음과 같이 IMDSv2를 사용하여 `termination-time`을 검색할 수 있습니다.

------
#### [ Linux ]

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
if curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo termination_scheduled; fi
```

------
#### [ Windows ]

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/termination-time
```

------

다음은 예제 출력입니다.

```
2015-01-05T18:02:00Z
```

스팟 인스턴스 중단이 없거나 중단 동작이 `stop` 또는 `hibernate`로 설정되었기 때문에 Amazon EC2가 인스턴스를 종료할 준비가 되지 않은 경우 또는 사용자가 스팟 인스턴스를 직접 종료한 경우 `termination-time` 항목이 인스턴스 메타데이터에 없거나(HTTP 404 오류 수신) 이 항목에 시간 값이 아닌 값이 포함됩니다.

Amazon EC2에서 인스턴스를 종료하지 않으면 요청 상태가 `fulfilled`로 설정됩니다. `termination-time` 값은 과거 시점인 원래 예상 시간과 함께 인스턴스 메타데이터에 남습니다.