アマゾンウェブサービスEC2インスタンスを自己終了させる方法はありますか?Amazonには、インスタンスが1時間以上実行された後にそれ自体(「Hara-Kiri」)を終了できるものがありますか?実行中のインスタンスのスクリプトを変更してそれ自体を実行することもできますが、失敗する可能性があり、イメージを編集したくないので、Amazonにインスタンスを強制終了させます。
5 に答える
インスタンス自体を終了させるには、次の両方の手順を実行します。
--instance-initiated-shutdown-behavior terminate
AWSコンソールまたはAPI呼び出しでインスタンスまたは同等のものを起動します。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
に書かれたものでしたが、コメントで更新やその他の宝石を見つけることができます。
あなたはこれを行うことができます
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
これがお役に立てば幸いです!!!
これが自己終了のスクリプトです
$ 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を使用することをお勧めします。
同様のニーズがあり、WebアプリケーションでEC2インスタンスを起動しました。Webアプリケーションがインスタンスを停止/終了することを信頼できなかったため、「フィーダー」と呼ばれる別のプロセスで実行するスクリプトを作成しました。フィーダーは、インスタンスを停止/終了する責任があります。Webアプリケーションは、フィーダーがインスタンスを「フィード」するように定期的に要求する必要があります。インスタンスが「飢えている」(タイムアウト期間内にフィードされない)場合、フィーダーはインスタンスを停止/終了します。1つのフィーダープロセスの問題から保護するために、2つのフィーダーを異なるマシンで同時に実行できます。つまり、インスタンスは圧力スイッチで実行されます。圧力が解放されると、インスタンスは停止/終了します。これにより、複数のユーザー間でインスタンスを共有することもできます。
元の質問に対して、EC2インスタンス自体で実行されている可能性のあるフィーダーは、タスクが実行される時間を事前に知る必要をなくしますが、定期的なフィードを提供するためにアプリケーションに負担をかけます。ラップトップを閉じると、インスタンスがダウンします。
フィーダーはhttps://github.com/alessandrocomodi/fpga-webserverにあり、パーミッシブオープンソースライセンスを持っています。