88

アマゾンウェブサービスEC2インスタンスを自己終了させる方法はありますか?Amazonには、インスタンスが1時間以上実行された後にそれ自体(「Hara-Kiri」)を終了できるものがありますか?実行中のインスタンスのスクリプトを変更してそれ自体を実行することもできますが、失敗する可能性があり、イメージを編集したくないので、Amazonにインスタンスを強制終了させます。

4

5 に答える 5

109

インスタンス自体を終了させるには、次の両方の手順を実行します。

  1. --instance-initiated-shutdown-behavior terminateAWSコンソールまたはAPI呼び出しでインスタンスまたは同等のものを起動します。
  2. shutdown -h nowルートとして実行します。Ubuntuでは、次を使用して55分でこれを実行するように設定できます。

    echo "sudo halt" | at now + 55 minutes
    

私は、この同じ「1時間で終了する」という目標を達成するために、他のオプションについてしばらく前に記事を書きました。

AmazonEC2での一時インスタンスの自動終了
http://alestic.com/2010/09/ec2-instance-termination

この記事は元々以前instance-initiated-shutdown-behaviorに書かれたものでしたが、コメントで更新やその他の宝石を見つけることができます。

于 2012-05-10T21:32:14.067 に答える
23

あなたはこれを行うことができます

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

ec2は現在のインスタンスIDを取得し、それ自体を終了します。

于 2014-04-07T13:18:18.030 に答える
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

これがお役に立てば幸いです!!!

于 2016-02-03T11:09:05.047 に答える
6

これが自己終了のスクリプトです

$ 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'

自己終了時に自己停止として割り当てる場合は、1回だけ行うことができます。

EC2コンソールで[インスタンス設定]に移動し、 [シャットダウン動作] を[停止]に変更します。/etc/cloud/cloud.cfg
を 構成します。cloud -initを使用してブートスクリプトを実行する方法を参照できます。Eric Hammond からの回答に従い、コマンドをファイルに入れて、scripts-per-bootパスに配置します。

$ 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!

PS:誰もがセルフストップを使用したい場合、再起動時にすべてのEC2タイプがセルフリカバリーであるとは限らないことに注意する必要があります。オン/オフスケジュールでEC2-VPC/EBSを使用することをお勧めします。

于 2016-07-04T14:11:58.727 に答える
-1

同様のニーズがあり、WebアプリケーションでEC2インスタンスを起動しました。Webアプリケーションがインスタンスを停止/終了することを信頼できなかったため、「フィーダー」と呼ばれる別のプロセスで実行するスクリプトを作成しました。フィーダーは、インスタンスを停止/終了する責任があります。Webアプリケーションは、フィーダーがインスタンスを「フィード」するように定期的に要求する必要があります。インスタンスが「飢えている」(タイムアウト期間内にフィードされない)場合、フィーダーはインスタンスを停止/終了します。1つのフィーダープロセスの問題から保護するために、2つのフィーダーを異なるマシンで同時に実行できます。つまり、インスタンスは圧力スイッチで実行されます。圧力が解放されると、インスタンスは停止/終了します。これにより、複数のユーザー間でインスタンスを共有することもできます。

元の質問に対して、EC2インスタンス自体で実行されている可能性のあるフィーダーは、タスクが実行される時間を事前に知る必要をなくしますが、定期的なフィードを提供するためにアプリケーションに負担をかけます。ラップトップを閉じると、インスタンスがダウンします。

フィーダーはhttps://github.com/alessandrocomodi/fpga-webserverにあり、パーミッシブオープンソースライセンスを持っています。

于 2019-08-04T13:50:49.240 に答える