programing

자체 종료 AWS EC2 인스턴스?

nasanasas 2020. 11. 8. 10:10
반응형

자체 종료 AWS EC2 인스턴스?


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


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

  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사용 가능 하기 전에 작성 되었지만 주석에서 업데이트 및 기타 보석을 찾을 수 있습니다.


당신은 이것을 할 수 있습니다

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

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


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

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

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


다음은 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-Terminating 으로 지정하려면 한 번만 수행 할 수 있습니다.

당신의에서 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 를 사용하는 것이 좋습니다 .


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

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

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

참고 URL : https://stackoverflow.com/questions/10541363/self-terminating-aws-ec2-instance

반응형