자습서: AWS FIS를 사용한 스팟 인스턴스 중단 테스트 - AWS 장애 인젝션 서비스

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

자습서: AWS FIS를 사용한 스팟 인스턴스 중단 테스트

스팟 인스턴스는 온디맨드 요금과 비교하여 최대 90% 할인된 가격으로 제공되는 예비 EC2 용량을 사용합니다. 그러나 Amazon EC2는 용량이 다시 필요할 때 스팟 인스턴스를 중단할 수 있습니다. 스팟 인스턴스를 사용할 때는 중단 가능성에 대비해야 합니다. 자세한 내용은 Amazon EC2 사용 설명서스팟 인스턴스 중단을 참조하세요.

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

또는 Amazon EC2 콘솔을 사용하여 실험을 시작하려면 Amazon EC2 사용 설명서스팟 인스턴스 중단 시작을 참조하세요.

사전 조건

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

1. IAM 역할 생성

역할을 생성하고 AWS FIS가 사용자 대신 aws:ec2:send-spot-instance-interruptions 작업을 수행할 수 있도록 하는 정책을 첨부하세요. 자세한 설명은 AWS FIS 실험을 위한 IAM 역할 섹션을 참조하세요.

2. AWS FIS에 대한 액세스 권한 확인

AWS FIS 액세스 권한이 있어야 합니다. 자세한 내용을 알아보려면 AWS FIS 정책 예제를 참조하세요.

3. (선택 사항) 스팟 인스턴스 요청 생성

이 실험에 새 스팟 인스턴스를 사용하려면 run-instances 명령을 사용하여 스팟 인스턴스를 요청하세요. 기본값은 중단된 스팟 인스턴스를 종료하는 것입니다. 중단 동작을 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 명령을 사용합니다.

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

1단계: 실험 템플릿 만들기

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

실험 템플릿 만들기
  1. https://console.aws.amazon.com/fis/에서 AWS FIS 콘솔을 엽니다.

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

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

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

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

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

    2. 작업의 이름을 입력합니다. 예를 들면 interruptSpotInstance를 입력합니다.

    3. 작업 유형으로는 aws:ec2:를 선택합니다. send-spot-instance-interruptions

    4. 대상의 경우 AWS FIS가 생성한 대상을 그대로 유지하세요.

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

    6. 저장을 선택합니다.

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

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

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

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

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

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

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

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

    8. 저장을 선택합니다.

  7. 서비스 액세스의 경우 기존 IAM 역할 사용을 선택한 다음 이 자습서의 사전 조건에 설명된 대로 생성한 IAM 역할을 선택합니다. 역할이 표시되지 않는 경우 해당 역할에 필요한 신뢰 관계가 있는지 확인하세요. 자세한 설명은 AWS FIS 실험을 위한 IAM 역할 섹션을 참조하세요.

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

  9. 실험 템플릿 생성을 선택합니다. 확인 메시지가 나타나면 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단계: 실험 시작

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

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

  2. 실험 시작을 선택합니다.

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

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

3단계: 실험 진행 상황 추적하기

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

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

  2. 실험 상태를 보려면 세부 정보 창에서 상태를 확인하세요. 자세한 내용은 실험 상태를 참조하세요.

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

4단계: 실험 결과 확인

이 실험에 대한 작업이 완료되면 다음과 같이 진행됩니다.

  • 대상 스팟 인스턴스가 인스턴스 리밸런싱 권고를 수신합니다.

  • 스팟 인스턴스 중단 공지는 Amazon EC2가 인스턴스를 종료 또는 중지하기 2분 전에 생성됩니다.

  • 2분 후 스팟 인스턴스가 종료되거나 중지됩니다.

  • AWS FIS에 의해 중지된 스팟 인스턴스는 다시 시작할 때까지 중지된 상태로 유지됩니다.

인스턴스가 실험에 의해 중단되었는지 확인
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

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

  3. Spot Requests(스팟 요청)에서 스팟 인스턴스 요청을 선택합니다. 초기 상태는 fulfilled입니다. 실험이 완료되면 상태가 다음과 같이 변경됩니다.

    • terminate - 상태가 instance-terminated-by-experiment로 변경됩니다.

    • stop - 상태가 marked-for-stop-by-experiment으로 변경되었다가 instance-stopped-by-experiment로 변경됩니다.

  4. Instances(인스턴스)에서 스팟 인스턴스를 선택합니다. 초기 상태는 Running입니다. 스팟 인스턴스 중단 알림을 받고 2분 후 상태가 다음과 같이 변경됩니다.

    • stop - 상태가 Stopping으로 변경되었다가 Stopped로 변경됩니다.

    • terminate - 상태가 Shutting-down으로 변경되었다가 Terminated로 변경됩니다.

5단계: 정리

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

요청을 취소하고 AWS CLI을 사용하여 인스턴스를 종료하려면
  1. cancel-spot-instance-requests명령을 사용하여 스팟 인스턴스 요청을 취소합니다.

    aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-ksie869j
  2. 인스턴스를 종료하려면 terminate-instances 명령을 사용하세요.

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

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

AWS FIS 콘솔을 사용하여 실험 템플릿을 삭제하려면
  1. https://console.aws.amazon.com/fis/에서 AWS FIS 콘솔을 엽니다.

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

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

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