Instance Scheduler를 CloudFormation과 함께 사용하여 EC2 인스턴스를 예약하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 10월 28일

AWS Instance Scheduler를 AWS CloudFormation과 함께 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 예약하고 싶습니다.

간략한 설명

CloudFormation 템플릿을 사용하여 AWS Instance Scheduler배포를 자동화할 수 있습니다.

참고: 현재 아시아 태평양(자카르타) 및 아시아 태평양(오사카) AWS 리전에서는 템플릿을 사용할 수 없습니다.

중요: 암호화된 Amazon Elastic Block Store(Amazon EBS)를 사용하는 EC2 인스턴스에 Instance Scheduler를 사용하는 경우, 인스턴스가 시작되지 않습니다. 인스턴스를 시작하려면 EBS 볼륨을 암호화하거나 복호화할 수 있는 키 정책이 적용된 키 사용자 역할을 Instance Scheduler에 부여해야 합니다. 해당 키 사용자 역할이 이 키를 사용하도록 허용하는 키 정책을 AWS Key Management Service(AWS KMS) 키에 추가해야 합니다.

해결 방법

Instance Scheduler 명령줄 인터페이스(CLI)를 설치합니다.

설치가 성공했는지 확인하려면 다음 명령을 실행합니다.

$ scheduler-cli --version

Instance Scheduler 템플릿을 사용하여 CloudFormation 스택 생성

스택은 AWS Lambda 함수, Amazon DynamoDB 테이블, Amazon EventBridge 규칙 및 Amazon CloudWatch 사용자 지정 지표를 배포합니다.

  1. AWS 관리 콘솔을 엽니다.
  2. Instance Scheduler 템플릿을 사용하여 CloudFormation을 엽니다. 또는 1단계로 이동합니다. Instance Scheduler 스택 시작 페이지에서 솔루션 시작을 선택합니다.
    참고: 템플릿은 기본적으로 미국 동부(버지니아 북부) 리전에서 시작됩니다.
  3. 탐색 모음에서 템플릿을 사용하여 스택을 시작할 AWS 리전을 선택한 후 [다음]을 선택합니다.
  4. 스택 이름에서 스택의 이름을 지정합니다.
  5. Instance Scheduler TagName에서는 기본값을 Schedule로 유지하거나 사용자 지정할 수 있습니다.
  6. Frequency(빈도)에서 스케줄러를 실행할 빈도를 분 단위로 선택합니다. 예를 들어 5분을 선택할 수 있습니다.
    참고: 빈도는 EventBridge가 Instance Scheduler에 대해 Lambda 함수를 다시 시작할 때까지 경과한 시간(분)입니다. 인스턴스 수가 많으면 가능한 한 가장 높은 빈도를 선택하면 제한을 방지할 수 있습니다. 빈도가 너무 느려 요구 사항에 맞지 않는 경우 나중에 빈도 속성을 조정할 수 있습니다.
  7. [CloudWatch Logs 활성화]에서 []를 선택합니다.
  8. [시작된 태그]에 state=started를 입력합니다.
  9. [중지된 태그]에 state=stopped를 입력합니다.
  10. 크로스 계정 예약의 경우 크로스 계정 역할 파라미터를 제공합니다. 보조 계정의 각 역할에 대한 ARN을 쉼표로 구분하여 입력합니다. 크로스 계정 예약을 사용하지 않는 경우 이 파라미터를 비워 둡니다.
  11. 다른 모든 파라미터의 경우 필요에 맞게 스택을 사용자 지정합니다.
  12. Next(다음)를 선택합니다.
  13. [옵션] 페이지에서 [다음]을 선택합니다.
  14. 설정을 검토한 다음 [AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다]를 선택합니다.
  15. [생성]을 선택합니다.

기간 생성

기간을 생성하려면 Instance Scheduler CLI, DynamoDB 콘솔 또는 사용자 지정 리소스를 사용할 수 있습니다. 기간에 대한 자세한 내용은 시작 및 중지 시간을 참조하세요.

다음 예에서는 다음 내용의 인스턴스를 생성하는 방법을 보여 줍니다.

  • 월요일부터 금요일까지 오전 9시에 시작하여 오후 5시에 중지
  • 토요일에 오전 9시에 시작하여 오후 12시에 중지

이 예에서는 두 개의 기간을 생성해야 합니다. 시나리오에 따라 적절한 개수의 기간을 생성합니다.

Instance Scheduler CLI 사용

Instance Scheduler CLI에 연결한 후 다음 명령을 실행합니다.

$ scheduler-cli create-period --stack your_stack_name --region eu-west-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri
$ scheduler-cli create-period --stack your_stack_name --region eu-west-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

참고: your_stack_name을 4단계에서 선택한 스택 이름으로 바꾸고 eu-west-1을 자체 리전으로 바꿉니다.

DynamoDB 콘솔 사용

  1. DynamoDB 콘솔을 엽니다.
  2. 테이블을 선택한 후 구성 테이블을 선택합니다.
    참고: Instance Scheduler 템플릿은 상태 테이블과 구성 테이블이라는 2개의 DynamoDB 테이블을 자동으로 생성합니다. 상태 테이블에는 템플릿이 중지하고 시작하는 인스턴스 상태가 저장됩니다. 구성 테이블을 통해 사용자의 요구 사항에 따라 기간과 스케줄을 지정할 수 있습니다.
  3. Explore Table Items(테이블 항목 탐색)를 선택합니다.
  4. Create Item(항목 생성)을 선택합니다.
  5. JSON 보기를 선택한 후 다음과 같은 Javascript Object Notation(JSON) 템플릿을 사용합니다.
{
  "type": {
    "S": "period"
  },
  "name": {
    "S": "mon-fri-9-5"
  },
  "begintime": {
    "S": "9:00"
  },
  "endtime": {
    "S": "16:59"
  },
  "weekdays": {
    "SS": [
      "mon-fri"
    ]
  }
}

참고: 이전 JSON 템플릿은 첫 번째 기간을 생성합니다. 두 번째 기간에는 유사한 JSON 템플릿을 사용합니다. 요구 사항에 맞게 템플릿을 편집해야 합니다.

스케줄 생성

스케줄을 생성하려면 Instance Scheduler CLI, DynamoDB 콘솔 또는 사용자 지정 리소스를 사용할 수 있습니다.

Instance Scheduler CLI 사용

다음 명령을 실행합니다.

$ scheduler-cli create-schedule --stack your_stack_name --name m-f9-5-sat9-12 --region eu-west-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

DynamoDB 콘솔 사용

  1. DynamoDB 콘솔을 엽니다.
  2. 테이블을 선택한 후 구성 테이블을 선택합니다.
  3. Explore Table Items(테이블 항목 탐색)를 선택합니다.
  4. Create Item(항목 생성)을 선택합니다.
  5. JSON 보기를 선택한 후 다음 JSON 템플릿을 사용합니다.
{
  "type": {
    "S": "schedule"
  },
  "name": {
    "S": "m-f9-5-sat9-12"
  },
  "timezone": {
    "S": "UTC"
  },
  "periods": {
    "SS": [
      "mon-fri-9-5"
    ]
  }
}

인스턴스 태그 지정 및 스케줄 테스트

Instance Scheduler와 함께 CloudFormation 스택을 사용하는 경우 Instance Scheduler TagName 파라미터를 정의해야 합니다. 이 파라미터의 기본값은 Schedule입니다.

Instance Scheduler는 인스턴스의 태그를 모니터링합니다. 인스턴스 태그 키가 정의된 스케줄러 태그와 일치하면 Instance Scheduler는 인스턴스 태그 값에 설정된 스케줄을 적용합니다. 예를 들어 태그의 Schedule로 설정되고 m-f9-5-sat9-12로 설정됩니다. 이 예에서 인스턴스는 월요일부터 금요일까지 오전 9시에 시작하여 오후 5시에 중지됩니다. 또한 인스턴스가 토요일에는 오전 9시에 시작하여 오후 12시에 중지됩니다.

참고: 태그 은 대/소문자를 구분합니다. Instance Scheduler는 실행 기간 이외에 수동으로 시작된 경우 실행 중인 인스턴스를 중지하지 않습니다. 또한 실행 기간 동안 인스턴스가 수동으로 중지된 경우 스케줄이 적용되지 않는 한 Instance Scheduler는 인스턴스를 시작하지 않습니다. 자세한 내용은 스케줄 정의를 참조하세요.

사전 정의된 스케줄 사용

사용자 지정 스케줄 외에도 구성 테이블에서 사전 정의된 스케줄을 사용할 수 있습니다. 예를 들어 다음 단계에서는 running이라는 이름으로 사전 정의된 스케줄을 테스트합니다.

  1. Amazon EC2 콘솔을 엽니다.
  2. 태그를 지정할 중지된 인스턴스를 선택합니다.
  3. 태그 보기를 선택한 후 태그 관리를 선택합니다.
  4. 태그 추가를 선택합니다.
  5. Schedule을 입력합니다.
  6. running을 입력합니다.
  7. 저장을 선택합니다.
  8. Amazon EC2 콘솔을 새로 고친 후 Lambda 함수가 시작될 때까지 기다립니다.
    참고: Lambda 함수가 시작되고 오류 없이 실행되면, 테스트하는 스케줄에 따라 인스턴스 상태실행 중으로 표시됩니다. CloudWatch 콘솔에서 호출 및 오류에 대한 Lambda 지표를 확인할 수 있습니다.
  9. DynamoDB 콘솔을 엽니다.
  10. Tables(테이블)를 선택한 후 상태 테이블을 선택합니다.
  11. Explore Table Items(테이블 항목 탐색)를 선택하고 태그가 지정된 인스턴스가 시작되었는지 확인합니다.
    참고: 상태 데이터는 상태 테이블에 저장됩니다.
    중요: 사용 중인 Lambda 함수의 빈도와 기간에 따라 추가 비용이 청구될 수 있습니다. 또한 생성한 DynamoDB 테이블 또는 EventBridge 규칙에 대한 추가 비용이 부과될 수도 있습니다.

교차 계정 예약의 경우: 보조 계정에서 원격 스택 시작

Instance Scheduler를 사용하여 보조 계정의 인스턴스를 예약하려면 aws-instance-scheduler-remote CloudFormation 템플릿을 배포합니다. 이 템플릿은 기본 계정의 Instance Scheduler가 보조 계정의 인스턴스를 관리할 수 있도록 하는 역할을 생성합니다.

참고: 기본 계정의 Instance Scheduler 스택에 대한 파라미터로 역할의 ARN을 제공해야 합니다. 올바른 파라미터로 Instance Scheduler 스택을 생성하거나 업데이트해야 합니다.

  1. 보조 계정의 AWS 관리 콘솔을 열고 aws-instance-scheduler-remote CloudFormation 템플릿을 시작합니다. 나중에 사용할 수 있도록 템플릿을 다운로드할 수도 있습니다.
    참고: 템플릿은 기본적으로 미국 동부(버지니아 북부) 리전에서 시작됩니다.
  2. 탐색 모음에서 템플릿을 사용하여 스택을 시작할 AWS 리전을 선택한 후 [다음]을 선택합니다.
  3. 템플릿 선택 페이지에서 올바른 템플릿을 선택했는지 확인한 후 [다음]을 선택합니다.
  4. 세부 정보 지정 페이지에서 원격 스택에 이름을 할당합니다.
  5. 파라미터에서 기본 계정 파라미터를 검토하고 수정합니다. 기본 계정의 계정 번호를 입력합니다.
  6. Next(다음)를 선택합니다.
  7. [옵션] 페이지에서 [다음]을 선택합니다.
  8. 설정을 검토한 다음 [AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다]를 선택합니다.
  9. [생성]을 선택합니다.
  10. 스택 출력 탭을 선택한 다음 CrossAccountRole 값을 복사합니다.
  11. 기본 계정에서 CloudFormation 스택을 선택한 다음 [업데이트]를 선택합니다.
  12. 스택 업데이트 페이지에서 [현재 템플릿 사용]을 선택합니다.
  13. 교차 계정 역할 파라미터에 CrossAccountRole 값을 붙여 넣습니다.
  14. [다음]을 선택한 후 [AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다]를 선택합니다.
  15. [스택 업데이트]를 선택합니다.

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요하세요?