

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자습서: AWS FIS를 사용하여 스팟 인스턴스 중단 테스트
<a name="fis-tutorial-spot-interruptions"></a>

스팟 인스턴스는 온디맨드 요금과 비교하여 최대 90% 할인된 가격으로 제공되는 예비 EC2 용량을 사용합니다. 그러나 Amazon EC2는 용량이 다시 필요할 때 스팟 인스턴스를 중단할 수 있습니다. 스팟 인스턴스를 사용할 때는 중단 가능성에 대비해야 합니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [스팟 인스턴스 중단](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)을 참조하세요.

 AWS Fault Injection Service(AWS FIS)를 사용하여 애플리케이션이 스팟 인스턴스 중단을 처리하는 방법을 테스트할 수 있습니다. 이 자습서를 사용하여 AWS FIS `aws:ec2:send-spot-instance-interruptions` 작업을 사용하여 스팟 인스턴스 중 하나를 중단하는 실험 템플릿을 생성합니다.

또는 Amazon EC2 콘솔을 사용하여 실험을 시작하려면 *Amazon EC2 사용 설명서*의 [스팟 인스턴스 중단 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/initiate-a-spot-instance-interruption.html)을 참조하세요.

## 사전 조건
<a name="spot-interruptions-prerequisites"></a>

 AWS FIS를 사용하여 스팟 인스턴스를 중단하려면 먼저 다음 사전 조건을 완료합니다.

**1. IAM 역할 생성**  
역할을 생성하고 AWS FIS가 사용자를 대신하여 `aws:ec2:send-spot-instance-interruptions` 작업을 수행할 수 있도록 하는 정책을 연결합니다. 자세한 내용은 [AWS FIS 실험을 위한 IAM 역할](getting-started-iam-service-role.md) 단원을 참조하십시오.

**2. AWS FIS에 대한 액세스 확인**  
 AWS FIS에 액세스할 수 있는지 확인합니다. 자세한 내용을 알아보려면 [AWS FIS 정책 예제](security_iam_id-based-policy-examples.md)를 참조하세요.

**3. (선택 사항) 스팟 인스턴스 요청 생성**  
이 실험에 새 스팟 인스턴스를 사용하려면 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 명령을 사용하여 스팟 인스턴스를 요청하세요. 기본값은 중단된 스팟 인스턴스를 종료하는 것입니다. 중단 동작을 `stop`로 설정하는 경우 유형도 `persistent`로 설정해야 합니다. 이 자습서에서는 최대 절전 모드 프로세스가 즉시 시작되므로 중단 동작을 `hibernate`로 설정하지 마세요.

```
aws ec2 run-instances \
    --image-id ami-0ab193018fEXAMPLE \
    --instance-type "t2.micro" \
    --count 1 \
    --subnet-id subnet-1234567890abcdef0 \
    --security-group-ids sg-111222333444aaab \
    --instance-market-options file://spot-options.json \
    --query Instances[*].InstanceId
```

다음은 `spot-options.json` 파일의 예입니다.

```
{
    "MarketType": "spot",
    "SpotOptions": { 
        "SpotInstanceType": "persistent",
        "InstanceInterruptionBehavior": "stop"
    }
}
```

예제 명령의 `--query` 옵션을 사용하면 명령이 스팟 인스턴스의 인스턴스 ID만 반환하도록 할 수 있습니다. 출력의 예시는 다음과 같습니다.

```
[
    "i-0abcdef1234567890"   
]
```

**4. AWS FIS가 대상 스팟 인스턴스를 식별할 수 있도록 태그 추가**  
대상 스팟 인스턴스에 Name=interruptMe 태그를 추가하려면 [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) 명령을 사용합니다.

```
aws ec2 create-tags \
    --resources i-0abcdef1234567890 \
    --tags Key=Name,Value=interruptMe
```

## 1단계: 실험 템플릿 만들기
<a name="spot-interruptions-create-template"></a>

 AWS FIS 콘솔을 사용하여 실험 템플릿을 생성합니다. 템플릿에서 실행할 작업을 지정합니다. 작업은 지정된 태그가 있는 스팟 인스턴스를 중단합니다. 태그가 있는 스팟 인스턴스가 두 개 이상 있는 경우 AWS FIS는 그 중 하나를 임의로 선택합니다.

**실험 템플릿을 생성하는 방법**

1. [https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/) AWS FIS 콘솔을 엽니다.

1. 탐색 창에서 **실험 템플릿**을 선택합니다.

1. **실험 템플릿 생성**을 선택합니다.

1. **1단계, 템플릿 세부 정보 지정**에서 다음을 수행합니다.

   1. **이름 및 설명**에 템플릿에 대한 이름과 설명을 입력합니다.

   1. **다음을** 선택하고 **2단계, 작업 및 대상 지정**으로 이동합니다.

1. **작업**에서 다음을 수행합니다.

   1. **작업 추가**를 선택합니다.

   1. 작업의 이름을 입력합니다. 예를 들면 **interruptSpotInstance**를(을) 입력합니다.

   1. **작업 유형**의 경우 **aws:ec2:send-spot-instance-interruptions**를 선택합니다.

   1. **대상**의 경우 AWS FIS가 생성하는 대상을 그대로 유지합니다.

   1. **작업 파라미터**의 경우 **중단 전 기간**을 2분(PT2M)으로 지정합니다.

   1. **저장(Save)**을 선택합니다.

1. **대상**에서 다음을 수행합니다.

   1.  AWS FIS가 이전 단계에서 자동으로 생성한 대상에 대해 **편집**을 선택합니다.

   1. 기본 이름을 좀 더 이해하기 쉬운 이름으로 바꾸세요. 예를 들면 **oneSpotInstance**를(을) 입력합니다.

   1. **리소스 유형**이 **aws:ec2:spot-instance**인지 확인하세요.

   1. **대상 메서드**의 경우 **리소스 태그, 필터, 파라미터**를 선택합니다.

   1. **리소스 태그**에 대해 **새 태그 추가**를 선택하고 태그 키와 태그 값을 입력합니다. 이 자습서의 사전 요구 사항에 설명된 대로 스팟 인스턴스에 추가한 태그를 사용하여 중단하세요.

   1. **리소스 필터**의 경우 **새 필터 추가**를 선택하고 경로로 **State.Name**, 값으로 **running**를 입력합니다.

   1. **선택 모드**에서는 **개수**를 선택합니다. **리소스 수**에 **1**를 입력합니다.

   1. **저장(Save)**을 선택합니다.

1. **다음을** 선택하여 **3단계, 서비스 액세스 구성**으로 이동합니다.

1. **서비스 액세스**의 경우 **기존 IAM 역할 사용**을 선택한 다음 이 자습서의 사전 조건에 설명된 대로 생성한 IAM 역할을 선택합니다. 역할이 표시되지 않는 경우 해당 역할에 필요한 신뢰 관계가 있는지 확인하세요. 자세한 내용은 [AWS FIS 실험을 위한 IAM 역할](getting-started-iam-service-role.md) 단원을 참조하십시오.

1. **다음을** 선택하여 **4단계, 선택적 설정 구성**으로 이동합니다.

1. (선택 사항) **태그**의 경우 **새 태그 추가**를 선택하고 태그 키와 태그 값을 지정합니다. 추가한 태그는 템플릿을 사용하여 실행되는 실험이 아니라 실험 템플릿에 적용됩니다.

1. **다음을** 선택하여 **5단계, 검토 및 생성**으로 이동합니다.

1. 템플릿을 검토하고 **실험 템플릿 생성을** 선택합니다. 확인 메시지가 표시되면 `create`를 입력한 다음 **실험 템플릿 생성을** 선택합니다.

**(선택사항) 실험 템플릿 JSON을 보려면**  
**내보내기** 탭을 선택합니다. 다음은 이전 콘솔 절차에서 생성한 JSON 예제입니다.

```
{
    "description": "Test Spot Instance interruptions",
    "targets": {
        "oneSpotInstance": {
            "resourceType": "aws:ec2:spot-instance",
            "resourceTags": {
                "Name": "interruptMe"
            },
            "filters": [
                {
                    "path": "State.Name",
                    "values": [
                        "running"
                    ]
                }
            ],
            "selectionMode": "COUNT(1)"
        }
    },
    "actions": {
        "interruptSpotInstance": {
            "actionId": "aws:ec2:send-spot-instance-interruptions",
            "parameters": {
                "durationBeforeInterruption": "PT2M"
            },
            "targets": {
                "SpotInstances": "oneSpotInstance"
            }
        }
    },
    "stopConditions": [
        {
            "source": "none"
        }
    ],
    "roleArn": "arn:aws:iam::123456789012:role/AllowFISSpotInterruptionActions",
    "tags": {
        "Name": "my-template"
    }
}
```

## 2단계: 실험 시작
<a name="spot-interruptions-start-experiment"></a>

실험 템플릿 생성을 완료하면 이를 사용하여 실험을 시작할 수 있습니다.

**실험을 시작하려면**

1. 방금 만든 실험 템플릿의 세부정보 페이지로 이동해야 합니다. 그렇지 않으면 **실험 템플릿**을 선택한 다음 실험 템플릿의 ID를 선택하여 세부 정보 페이지를 엽니다.

1. **실험 시작**을 선택합니다.

1. (선택 사항) 실험에 태그를 추가하려면 **새 태그 추가**를 선택하고 태그 키와 태그 값을 입력합니다.

1. **실험 시작**을 선택합니다. 확인 메시지가 나타나면 **start**을 입력하고 **실험 시작**을 선택합니다.

## 3단계: 실험 진행 상황 추적하기
<a name="spot-interruptions-track-experiment"></a>

실험이 완료, 중지 또는 실패할 때까지 진행 중인 실험의 진행 상황을 추적할 수 있습니다.

**실험 진행 상황 추적하기**

1. 방금 시작한 실험의 세부정보 페이지로 이동해야 합니다. 그렇지 않으면 **실험**을 선택한 다음 실험의 ID를 선택하여 세부 정보 페이지를 엽니다.

1. 실험 상태를 보려면 **세부 정보** 창에서 **상태**를 확인하세요. 자세한 내용은 [실험 상태](view-experiment-progress.md#experiment-states)를 참조하세요.

1. 실험 상태가 **실행 중**이면 다음 단계로 이동합니다.

## 4단계: 실험 결과 확인
<a name="spot-interruptions-verify-experiment-result"></a>

이 실험에 대한 작업이 완료되면 다음과 같이 진행됩니다.
+ 대상 스팟 인스턴스가 [인스턴스 리밸런싱 권고](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html)를 수신합니다.
+ [스팟 인스턴스 중단 공지](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#spot-instance-termination-notices)는 Amazon EC2가 인스턴스를 종료 또는 중지하기 2분 전에 생성됩니다.
+ 2분 후 스팟 인스턴스가 종료되거나 중지됩니다.
+  AWS FIS에 의해 중지된 스팟 인스턴스는 다시 시작할 때까지 중지된 상태로 유지됩니다.

**인스턴스가 실험에 의해 중단되었는지 확인**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 별도의 브라우저 탭 또는 창으로 **Spot Requests**(스팟 요청)와 **Instances**(인스턴스)를 엽니다.

1. **Spot Requests**(스팟 요청)에서 스팟 인스턴스 요청을 선택합니다. 초기 상태는 `fulfilled`입니다. 실험이 완료되면 상태가 다음과 같이 변경됩니다.
   + `terminate` - 상태가 `instance-terminated-by-experiment`로 변경됩니다.
   + `stop` - 상태가 `marked-for-stop-by-experiment`으로 변경되었다가 `instance-stopped-by-experiment`로 변경됩니다.

1. **Instances**(인스턴스)에서 스팟 인스턴스를 선택합니다. 초기 상태는 `Running`입니다. 스팟 인스턴스 중단 알림을 받고 2분 후 상태가 다음과 같이 변경됩니다.
   + `stop` - 상태가 `Stopping`으로 변경되었다가 `Stopped`로 변경됩니다.
   + `terminate` - 상태가 `Shutting-down`으로 변경되었다가 `Terminated`로 변경됩니다.

## 5단계: 정리
<a name="spot-interruptions-cleanup"></a>

중단 동작이 `stop`인 이 실험에 대한 테스트 스팟 인스턴스를 생성했는데 더 이상 필요하지 않은 경우 스팟 인스턴스 요청을 취소하고 스팟 인스턴스를 종료할 수 있습니다.

**요청을 취소하고를 사용하여 인스턴스를 종료하려면 AWS CLI**

1. [cancel-spot-instance-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-spot-instance-requests.html) 명령을 사용하여 스팟 인스턴스 요청을 취소합니다.

   ```
   aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-ksie869j
   ```

1. 인스턴스를 종료하려면 [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html) 명령을 사용하세요.

   ```
   aws ec2 terminate-instances --instance-ids i-0abcdef1234567890
   ```

실험 템플릿이 더 이상 필요하지 않으면 삭제할 수 있습니다.

**AWS FIS 콘솔을 사용하여 실험 템플릿을 삭제하려면**

1. [https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/) AWS FIS 콘솔을 엽니다.

1. 탐색 창에서 **실험 템플릿**을 선택합니다.

1. 실험 템플릿을 선택하고 **작업**, **실험 템플릿 삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **delete**를 입력한 다음 **실험 템플릿 삭제**를 선택합니다.