자체 종료 AWS EC2 인스턴스?


78

Amazon Web Services EC2 인스턴스가 자체 종료 될 수있는 방법이 있습니까? Amazon에는 1 시간 이상 실행 한 후 인스턴스가 자체적으로 종료 될 수있는 ( "Hara-Kiri") 기능이 있습니까? 이 작업을 수행하기 위해 실행중인 인스턴스의 스크립트를 변경할 수 있지만 실패 할 수 있으며 이미지를 편집하고 싶지 않으므로 Amazon에서 인스턴스를 종료하기를 원합니다.


2
명확히하기 위해 인스턴스가 X 시간 이상 지속되는 경우 비상 차단 스위치가 필요합니다. 내 사용 사례는 Amazon의 EC2를 사용하여 인스턴스를 빠르게 회전하고 Ubuntu에서 일부 프로세스 (약 5 분 소요)를 실행 한 다음 자체 종료하는 것입니다. 이것은 Windows 데스크톱 앱에 의해 제어됩니다. 대부분의 경우 매력적으로 작동하지만 때로는 사용자가 랩톱을 닫고 일주일 동안 휴가를 가며 필요하지 않은 168 시간 동안 AWS 요금을 부과합니다. 더 자세한 정보를 원하는 사람이 있으면 모두 알려 드릴 수 있습니다. Steve
Steve3p0

답변:


98

인스턴스가 자체적으로 종료되도록하려면 다음 두 단계를 모두 수행하십시오.

  1. --instance-initiated-shutdown-behavior terminateAWS 콘솔 또는 API 호출에서 또는 이와 동등한 인스턴스를 시작합니다 .
  2. shutdown -h now루트로 실행하십시오 . Ubuntu에서는 다음을 사용하여 55 분 내에 발생하도록 설정할 수 있습니다.

    echo "sudo halt" | at now + 55 minutes
    

이 같은 "1 시간 내에 종료"목표를 달성하기 위해 다른 옵션에 대한 기사를 작성했습니다.

Amazon EC2에서 임시 인스턴스 자동 종료
http://alestic.com/2010/09/ec2-instance-termination

이 기사는 원래 instance-initiated-shutdown-behavior사용 가능 하기 전에 작성 되었지만 댓글에서 업데이트 및 기타 보석을 찾을 수 있습니다.


Eric, 감사합니다.하지만 AWS 콘솔에서 1 위를 할 수있는 곳을 모르겠습니다. "인스턴스 요청 마법사"에 "종료 동작"설정이 있지만 유일한 옵션은 "종료"및 "중지"입니다. 실제로 인스턴스가 한 시간 내에 중지되도록 예약하지는 않습니다. 인스턴스를 시작하는 데 사용중인 AWS .NET API를 확인하여 이와 같은 작업을 수행 할 수 있는지 확인하겠습니다.
Steve3p0

6
"종료 동작"을 "종료"로 설정 한 다음 인스턴스를 종료하려는 경우 인스턴스에서 "중지"또는 "종료 -h now"를 실행합니다. "at"를 사용하여 미리 예약하십시오. (1) 및 (2)는 대체 접근 방식이 아닌 단일 프로세스의 필수 단계입니다.
Eric Hammond

2
"shutdown -P now"가 아닌 "shutdown -h now"를 수행하는 이유가 있습니까?
더스틴 보즈웰

3
@EricHammond 내가 묻는 이유는 내 인스턴스가 약 5 %의 시간 동안 종료되지 않기 때문입니다 (실행중인 경우 쐐기 상태에 갇히지 만 종료되지 않고 ssh'd 할 수 없음). 그게 원인인지 궁금한 것뿐입니다.
Dustin Boswell

2
@DustinBoswell 시스템 설정에 따라 poweroff와 동일하지 않은 "halt"또는 "shutdown -h"를 사용하고있을 수 있습니다. 대신 "sudo poweroff"(또는 "sudo shutdown -P now"를 시도하십시오.하지만 자세한 내용은 "poweroff"를 좋아합니다).
AntonioMO

23

넌 할 수있어

ec2-terminate-instances $(curl -s http://169.254.169.254/latest/meta-data/instance-id)

ec2는 현재 인스턴스 ID를 얻고 자체적으로 종료됩니다.


4
이 방법이 마음에 들지만 인스턴스 종료 인스턴스를 실행하려면 자격 증명이 인스턴스에 설정되어 있어야합니다. 항상 그런 것은 아니며 "Client.UnauthorizedOperation"오류가 발생합니다.
RaveTheTadpole 2014 년

3
인스턴스 프로필을 설정할 수 있으므로 자격 증명을 설정할 필요가 없습니다.
galva

@RaveTheTadpole 인스턴스가 자체적으로 종료되도록하려면 자체 종료 권한이 필요합니다. 암시 적 조건입니다.
polvoazul

11

바라건대 이것은 작동합니다

instanceId=$(curl http://169.254.169.254/latest/meta-data/instance-id/)
region=$(curl http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk '{print $3}' | sed  's/"//g'|sed 's/,//g')

/usr/bin/aws ec2 terminate-instances --instance-ids $instanceId --region $region

이것이 당신을 돕기를 바랍니다 !!!


감사! 나는 그것을 약간 수정했고, 당신이 jq를 사용하는지 모르겠지만, 어느 쪽이든 공유 할 것이라고 생각했습니다. region = $ (curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r
.region

6

다음은 Self-Terminating 스크립트입니다.

$ EC2_INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
$ echo "ec2-terminate-instances $EC2_INSTANCE_ID" | at now + 55 min || die 'cannot obtain instance-id'

Self-Stopping on Self- Stopping 으로 지정하려면 한 번만 수행 할 수 있습니다.

당신의에서 EC2 콘솔 로 이동 인스턴스 설정 , 변경 종료 동작중지합니다 . /etc/cloud/cloud.cfg를
구성 합니다 . cloud-init를 사용하여 부팅 스크립트를 실행하는 방법을 참조 할 수 있습니다 . Eric Hammond의 답변을 따르고 파일에 명령을 입력 한 다음 스크립트 별 부팅 경로 에서 찾습니다 .

$ echo '#!/bin/sh' > per-boot.sh
$ echo 'echo "halt" | at now + 55 min' >> per-boot.sh
$ echo 'echo per-boot: `date` >> /tmp/per-boot.txt' >> per-boot.sh
$ chmod +x per-boot.sh
$ sudo chown -R root per-boot.sh
$ sudo mv -viu per-boot.sh /var/lib/cloud/scripts/per-boot

인스턴스를 재부팅 하고 스크립트가 실행되었는지 확인합니다.

$ cat /tmp/per-boot.txt 
per-boot: Mon Jul 4 15:35:42 UTC 2016

그렇다면 인스턴스를 중지하는 것을 잊은 경우에 대비하여 인스턴스가 55 분 동안 실행되거나 스크립트에 설정된 시간 동안 중지 된 것으로 자체적으로 종료됩니다.

Broadcast message from root@ip-10-0-0-32
        (unknown) at 16:30 ...

The system is going down for halt NOW!

추신 : 모든 사람이 Self-Stopping 을 사용하고 싶은 경우, 모든 EC2 유형이 재시작시 자체 복구가되는 것은 아니라는 점에 유의해야합니다. On / Off 일정 과 함께 EC2-VPC / EBS 를 사용하는 것이 좋습니다 .


-1

EC2 인스턴스를 시작하는 웹 애플리케이션이있는 비슷한 요구 사항이있었습니다. 웹 애플리케이션이 인스턴스를 중지 / 종료하는 것을 신뢰할 수 없었기 때문에 "피더"라는 별도의 프로세스에서 실행되는 스크립트를 만들었습니다. 피더는 인스턴스를 중지 / 종료 할 책임이 있습니다. 웹 애플리케이션은 피더가 인스턴스를 "피드"하도록 주기적으로 요청해야합니다. 인스턴스가 "굶주림"(시간 초과 기간 내에 공급되지 않음)하면 피더가이를 중지 / 종료합니다. 하나의 피더 프로세스에서 발생하는 문제로부터 보호하기 위해 두 개의 피더를 다른 기계에서 동시에 실행할 수 있습니다. 즉, 인스턴스는 압력 스위치에서 실행됩니다. 압력이 해제되면 인스턴스가 중지 / 종료됩니다. 또한 여러 사용자간에 인스턴스를 공유 할 수 있습니다.

원래 질문에 대해, EC2 인스턴스 자체에서 실행될 수있는 피더는 작업이 얼마나 오래 실행 될지 사전에 알 필요가 없지만 주기적으로 공급을 제공하는 애플리케이션에 부담을줍니다. 노트북이 닫히면 인스턴스가 다운됩니다.

피더는 https://github.com/alessandrocomodi/fpga-webserver에 있으며 허용되는 오픈 소스 라이선스가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.