CloudFormation과 함께 Instance Scheduler를 사용하여 EC2 인스턴스를 예약하려면 어떻게 해야 하나요?
AWS Instance Scheduler를 AWS CloudFormation과 함께 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 예약하려고 합니다.
간략한 설명
CloudFormation 템플릿을 사용하여 AWS Instance Scheduler의 배포를 자동화할 수 있습니다.
중요: 암호화된 Amazon Elastic Block Store(Amazon EBS)와 함께 EC2 인스턴스용 Instance Scheduler를 사용하는 경우 인스턴스를 시작할 수 없습니다. 인스턴스를 시작하려면 EBS 볼륨을 암호화하거나 해독하는 키 정책과 함께 Instance Scheduler에 키 사용자 역할을 부여해야 합니다. 키 사용자 역할이 이 키를 사용하도록 허용하려면 AWS Key Management Service(AWS KMS) 키에 키 정책을 추가해야 합니다.
해결 방법
Instance Scheduler 설치
아직 설치하지 않았다면 지침에 따라 Instance Scheduler 명령줄 인터페이스(CLI)를 설치합니다.
설치가 성공적으로 완료되었는지 확인하려면 다음 명령을 실행합니다.
$ scheduler-cli --version
Instance Scheduler 템플릿을 사용하여 CloudFormation 스택을 생성합니다.
스택은 AWS Lambda 함수, Amazon DynamoDB 테이블, Amazon EventBridge 규칙 및 Amazon CloudWatch 사용자 지정 지표를 배포합니다.
- AWS Management Console을 엽니다.
- Instance Scheduler 템플릿을 사용하여 CloudFormation을 엽니다. 또는 1단계로 이동합니다. Instance Scheduler 허브 스택 페이지를 시작하고 솔루션 시작을 선택합니다.
참고: 템플릿은 기본적으로 미국 동부(버지니아 북부) 리전에서 실행됩니다. - 탐색 표시줄에서 템플릿으로 스택을 시작할 AWS 리전을 선택한 후 다음을 선택합니다.
- 스택 이름에 스택의 이름을 지정합니다.
- Instance Scheduler TagName에서 기본값을 일정으로 유지하거나 사용자 지정할 수 있습니다.
- 빈도에서 스케줄러를 실행할 빈도(분)를 선택합니다. 예를 들어, 5분을 선택할 수 있습니다.
참고: 빈도는 EventBridge가 Instance Scheduler에 대해 Lambda 함수를 다시 시작하기까지 걸리는 시간(분)입니다. 인스턴스 수가 많으면 가능한 가장 높은 주파수를 사용하여 병목 현상을 방지하세요. 주파수가 필요에 따라 충분하지 않은 경우 나중에 빈도 속성을 조정할 수 있습니다. - CloudWatch 지표 활성화에서 예를 선택합니다.
- CloudWatch 로그 활성화에서 예를 선택합니다.
- (선택 사항) 시작 태그에 state=started을 입력합니다.
- (선택 사항) 중지된 태그에 state=stopped을 입력합니다.
- 교차 계정 일정의 경우 교차 계정 역할 파라미터를 제공하세요. 보조 계정의 모든 역할에 대한 ARN을 쉼표로 구분하여 입력합니다. 교차 계정 일정을 사용하지 않는 경우 파라미터를 비워 두세요.
- 다른 모든 파라미터의 경우 필요에 맞게 스택을 사용자 지정합니다.
- 다음을 선택합니다.
- 옵션 페이지에서 다음을 선택합니다.
- 설정을 검토한 다음 AWS CloudFormation이 IAM 리소스를 생성할 수 있음을 인정합니다를 선택합니다.
- 생성을 선택합니다.
기간 생성
기간을 생성하려면 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 콘솔 사용
- DynamoDB 콘솔을 엽니다.
- 테이블을 선택한 다음 구성 테이블을 선택합니다.
참고: Instance Scheduler 템플릿은 상태와 구성이라는 두 개의 DynamoDB 테이블을 자동으로 생성합니다. 상태 테이블은 템플릿이 중지하고 시작하는 인스턴스의 상태를 저장합니다. 구성 테이블을 사용하면 요구 사항에 맞는 기간과 일정을 지정할 수 있습니다. - 테이블 항목 탐색을 선택합니다.
- 항목 생성을 선택합니다.
- JSON 보기를 선택한 후 다음 JavaScript 객체 표기법(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 콘솔 사용
- DynamoDB 콘솔을 엽니다.
- 테이블을 선택한 다음 구성 테이블을 선택합니다.
- 테이블 항목 탐색을 선택합니다.
- 항목 생성을 선택합니다.
- JSON 보기를 선택한 후 다음 JSON 템플릿을 사용하세요.
{ "type": { "S": "schedule" }, "name": { "S": "m-f9-5-sat9-12" }, "timezone": { "S": "UTC" }, "periods": { "SS": \[ "mon-fri-9-5" \] } }
인스턴스에 태그를 지정하고 일정을 테스트합니다.
CloudFormation 스택을 Instance Scheduler와 함께 사용하는 경우 Instance Scheduler TagName 파라미터를 정의해야 합니다. 이 파라미터의 기본값은 일정입니다.
Instance Scheduler는 인스턴스의 태그를 모니터링합니다. 인스턴스 태그 키가 정의된 스케줄러 태그와 일치하면 Instance Scheduler는 인스턴스 태그 값에 설정된 일정을 적용합니다. 예를 들어, 태그의 key는 Schedule으로 설정되고 value은 m-f9-5-sat9-12로 설정됩니다. 이 예에서 인스턴스는 월요일부터 금요일까지 오전 9시에 시작하여 오후 5시에 중지됩니다. 또한 인스턴스는 토요일 오전 9시에 시작하여 오후 12시에 중지됩니다.
참고: 태그 keys와 value은 대소문자를 구분합니다. Instance Scheduler는 실행 기간 외에 수동으로 시작한 경우 인스턴스 실행을 중단하지 않습니다. 또한 실행 기간 중에 인스턴스를 수동으로 중지한 경우 일정이 적용되지 않는 한 Instance Scheduler는 인스턴스를 시작하지 않습니다. 자세한 내용을 보려면 스케줄 정의를 참조하세요.
사전 정의된 일정 사용
사용자 지정 일정 외에도 구성 테이블에서 사전 정의된 일정을 사용할 수도 있습니다. 예를 들어, 다음 단계에서는 실행 중이라는 사전 정의된 일정을 테스트합니다.
- Amazon EC2 콘솔을 엽니다.
- 태그를 지정하려는 중지된 인스턴스를 선택합니다.
- 태그 보기를 선택한 다음 태그 관리를 선택합니다.
- 태그 추가를 선택합니다.
- 키에 일정을 입력합니다.
- 값에 실행 중을 입력합니다.
- 저장을 선택합니다.
- Amazon EC2 콘솔을 새로 고친 다음 Lambda 함수가 시작될 때까지 기다립니다.
참고: Lambda 함수가 시작되어 오류 없이 실행되면 테스트 중인 일정에 따라 인스턴스 상태가 실행 중으로 표시됩니다. CloudWatch 콘솔에서 Lambda 지표에서 호출 및 오류를 확인할 수 있습니다. - DynamoDB 콘솔을 엽니다.
- 테이블을 선택한 다음 상태 테이블을 선택합니다.
- Explore Table Items를 선택하고 태그가 지정된 인스턴스가 시작되었는지 확인합니다. 상태 데이터는 상태 테이블에 저장됩니다.
중요: 사용 중인 Lambda 함수의 빈도와 기간에 따라 추가 비용이 청구될 수 있습니다. 생성한 DynamoDB 테이블 또는 EventBridge 규칙에 대한 추가 비용이 청구될 수도 있습니다.
교차 계정 스케줄링의 경우: 보조 계정에서 원격 스택 실행
Instance Scheduler를 사용하여 보조 계정의 인스턴스를 예약하려면 aws-instance-scheduler-remote CloudFormation 템플릿을 배포하세요. 이 템플릿은 기본 계정의 Instance Scheduler가 보조 계정의 인스턴스를 관리할 수 있도록 하는 역할을 생성합니다.
참고: 역할의 ARN을 기본 계정의 Instance Scheduler 스택에 대한 파라미터로 제공해야 합니다. 올바른 파라미터로 Instance Scheduler 스택을 생성하거나 업데이트해야 합니다.
- 보조 계정의 AWS Management Console을 열고 aws-instance-scheduler-remote CloudFormation 템플릿을 시작합니다. 나중에 사용할 수 있도록 템플릿을 다운로드할 수도 있습니다.
참고: 템플릿은 기본적으로 미국 동부(버지니아 북부) 리전에서 실행됩니다. - 탐색 표시줄에서 템플릿으로 스택을 시작할 AWS 리전을 선택한 후 다음을 선택합니다.
- 템플릿 선택 페이지에서 올바른 템플릿을 선택했는지 확인한 후 다음을 선택합니다.
- 세부 정보 지정 페이지에서 원격 스택에 이름을 할당합니다.
- 파라미터에서 기본 계정 파라미터를 검토하고 수정합니다. 기본 계정의 계좌 번호를 입력합니다.
- 다음을 선택합니다.
- 옵션 페이지에서 다음을 선택합니다.
- 설정을 검토한 다음 AWS CloudFormation이 IAM 리소스를 생성할 수 있음을 인정합니다를 선택합니다.
- 생성을 선택합니다.
- 스택 출력 탭을 선택한 다음 CrossAccountRole 값을 복사합니다.
- 기본 계정에서 CloudFormation 스택을 선택한 다음 업데이트를 선택합니다.
- 업데이트 스택 페이지에서 현재 템플릿 사용을 선택합니다.
- 교차 계정 역할 파라미터에 CrossAccountRole 값을 붙여넣습니다.
- 다음을 선택한 후 AWS CloudFormation이 IAM 리소스를 생성할 수 있음을 인정합니다를 선택합니다.
- 스택 업데이트를 선택합니다.
관련 콘텐츠
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 2년 전