Amazon API를 사용하여 Amazon 인스턴스를 자동으로 시작하고 종료 할 수 있습니까? 어떻게 할 수 있는지 설명해 주시겠습니까? 이상적으로는 매일 지정된 시간 간격으로 인스턴스를 시작하고 인스턴스를 중지해야합니다.
답변
누군가가이 예전 질문을 우연히 발견 할 경우를 대비하여 요즘에는 Auto Scaling 그룹에 일정을 추가하여 동일한 결과를 얻을 수 있습니다. Auto Scaling 그룹의 인스턴스 수를 특정 시간에 1로 늘리고 나중에 다시 0으로 줄입니다. .
그리고이 답변은 많은 견해를 얻고 있기 때문에 이에 대한 매우 유용한 가이드를 링크하려고 생각했습니다. Auto Scaling을 사용하여 반복 일정에 따라 EC2 인스턴스 실행
답변
Amazon EC2 API 도구를 직접 사용해 볼 수 있습니다. 실제로 필요한 명령은 ec2-start-instances 및 ec2-stop-instances입니다. EC2_HOME, AWS_CREDENTIAL_FILE, EC2_CERT, EC2_PRIVATE_KEY 등과 같은 환경 변수가 올바르게 구성되어 있고 모든 AWS 자격 증명, 인증서 및 개인 키 파일이 적절한 위치에 있는지 확인하십시오. 자세한 내용은 AWS EC2 API 도구 설명서에서 확인할 수 있습니다.
먼저 명령을 직접 테스트 한 다음 모든 것이 제대로 작동하면 Windows에서 Unix crontab 또는 예약 된 작업을 구성 할 수 있습니다. 아래에서 Linux / etc / crontab 파일의 예를 찾을 수 있습니다 (위에 언급 된 모든 환경 변수가 ‘your-account’사용자에게 있어야한다는 것을 잊지 마십시오.
/etc/crontab
0 8 * * * your-account ec2-start-instances <your_instance_id>
0 16 * * * your-account ec2-stop-instances <your_instance_id>
# Your instance will be started at 8am and shutdown at 4pm.
저는 BitNami Cloud 프로젝트의 개발자입니다. 여기에서 AWS 도구 (내가 언급 한 도구 포함)를 시도해 볼 수있는 사용하기 쉬운 무료 설치 프로그램으로 패키징 합니다. BitNami CloudTools 팩 스택
답변
EC2 명령 줄 도구를 사용하여 필요한 작업을 수행하는 방법을 보여주는 EC2 시작 안내서를 살펴 보는 것이 좋습니다 . 이를 cron 작업 (Linux / UNIX에서) 또는 Windows에서 예약 된 작업으로 쉽게 스크립팅하여 주어진 시간에 시작 및 중지 명령을 호출 할 수 있습니다.
자체 코드에서이 작업을 수행하려면 SOAP 또는 REST API를 사용할 수 있습니다. 자세한 내용은 개발자 안내서 를 참조하십시오.
답변
이 작업을 수행하기 위해 Boto 라이브러리를 사용하여 Python으로 코드를 작성했습니다. 자신의 용도에 맞게 조정할 수 있습니다. cron 작업의 일부로 이것을 실행해야합니다. 그러면 cron 작업을 실행하는 동안 필요한만큼 인스턴스를 시작하거나 종료 할 수 있습니다.
#!/usr/bin/python
#
# Auto-start and stop EC2 instances
#
import boto, datetime, sys
from time import gmtime, strftime, sleep
# AWS credentials
aws_key = "AKIAxxx"
aws_secret = "abcd"
# The instances that we want to auto-start/stop
instances = [
# You can have tuples in this format:
# [instance-id, name/description, startHour, stopHour, ipAddress]
["i-12345678", "Description", "00", "12", "1.2.3.4"]
]
# --------------------------------------------
# If its the weekend, then quit
# If you don't care about the weekend, remove these three
# lines of code below.
weekday = datetime.datetime.today().weekday()
if (weekday == 5) or (weekday == 6):
sys.exit()
# Connect to EC2
conn = boto.connect_ec2(aws_key, aws_secret)
# Get current hour
hh = strftime("%H", gmtime())
# For each instance
for (instance, description, start, stop, ip) in instances:
# If this is the hour of starting it...
if (hh == start):
# Start the instance
conn.start_instances(instance_ids=[instance])
# Sleep for a few seconds to ensure starting
sleep(10)
# Associate the Elastic IP with instance
if ip:
conn.associate_address(instance, ip)
# If this is the hour of stopping it...
if (hh == stop):
# Stop the instance
conn.stop_instances(instance_ids=[instance])
답변
업무상 중요하지 않은 경우-매일 오전 3시에 ‘종료'(Windows)를 실행하도록 배치 파일을 예약하는 것이 간단합니다. 그러면 적어도 원치 않는 인스턴스가 무한정 실행되도록 실수로 남겨 둘 위험이 없습니다.
분명히 이것은 이야기의 절반에 불과합니다!
답변
제가 일하는 회사는 고객이 정기적으로 이에 대해 물어 보았으므로 여기에서 사용할 수있는 프리웨어 EC2 스케줄링 앱을 작성했습니다.
http://blog.simple-help.com/2012/03/free-ec2-scheduler/
Windows 및 Mac에서 작동하며 매일 / 주간 / 월간 일정을 여러 개 만들 수 있으며 일치하는 필터를 사용하여 많은 수의 인스턴스를 쉽게 포함하거나 나중에 추가 할 인스턴스를 포함 할 수 있습니다.
답변
AWS Data Pipeline이 제대로 작동하고 있습니다. https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/
시작일 (예 : 주말)을 제외하려면 ShellCommandPrecondition 개체를 추가하십시오.
AWS 콘솔 / 데이터 파이프 라인에서 새 파이프 라인을 생성합니다. 정의 (JSON)를 편집 / 가져 오기가 더 쉽습니다.
{
"objects": [
{
"failureAndRerunMode": "CASCADE",
"schedule": {
"ref": "DefaultSchedule"
},
"resourceRole": "DataPipelineDefaultResourceRole",
"role": "DataPipelineDefaultRole",
"pipelineLogUri": "s3://MY_BUCKET/log/",
"scheduleType": "cron",
"name": "Default",
"id": "Default"
},
{
"name": "CliActivity",
"id": "CliActivity",
"runsOn": {
"ref": "Ec2Instance"
},
"precondition": {
"ref": "PreconditionDow"
},
"type": "ShellCommandActivity",
"command": "(sudo yum -y update aws-cli) && (#{myAWSCLICmd})"
},
{
"period": "1 days",
"startDateTime": "2015-10-27T13:00:00",
"name": "Every 1 day",
"id": "DefaultSchedule",
"type": "Schedule"
},
{
"scriptUri": "s3://MY_BUCKET/script/dow.sh",
"name": "DayOfWeekPrecondition",
"id": "PreconditionDow",
"type": "ShellCommandPrecondition"
},
{
"instanceType": "t1.micro",
"name": "Ec2Instance",
"id": "Ec2Instance",
"type": "Ec2Resource",
"terminateAfter": "50 Minutes"
}
],
"parameters": [
{
"watermark": "aws [options] <command> <subcommand> [parameters]",
"description": "AWS CLI command",
"id": "myAWSCLICmd",
"type": "String"
}
],
"values": {
"myAWSCLICmd": "aws ec2 start-instances --instance-ids i-12345678 --region eu-west-1"
}
}
다운로드 할 Bash 스크립트를 S3 버킷의 전제 조건으로 실행합니다.
#!/bin/sh
if [ "$(date +%u)" -lt 6 ]
then exit 0
else exit 1
fi
주말에 파이프 라인을 활성화하고 실행할 때 AWS 콘솔 Pipeline Health Status에 잘못된 “ERROR”가 표시됩니다. bash 스크립트가 오류 (exit 1)를 반환하고 EC2가 시작되지 않습니다. 1 ~ 5 일의 상태는 “HEALTHY”입니다.
퇴근 시간에 EC2를 자동으로 중지하려면 전제 조건없이 매일 AWS CLI 명령을 사용하십시오.