EC2 でホストされているサーバーがあります。サーバーは、CentOSに基づいて Linux AMI 上に構築されています。クライアントプロジェクト専用で、SSH経由で接続します。使用しないときにサーバーをシャットダウンするのを忘れて、不要なコストが発生することがあります。
SSH接続なしで30分後にたとえば非アクティブのときにサーバーを自動的にシャットダウンするにはどうすればよいですか?
当然、私は最も簡単な解決策を探しています。 1時間ごとのチェックもOKで、確実に機能します。
2013年1月現在 Amazon CloudWatch オプションを提供 AmazonCloudWatchを使用して未使用のAmazonEC2インスタンスを検出およびシャットダウン 、紹介ブログ投稿を参照 Amazon CloudWatch-Alarmアクション この機能の詳細:
本日、CloudWatchアラームがトリガーされたときにEC2インスタンスを停止または終了する機能を提供します。これをフェイルセーフとして(異常な状態を検出してから動作する)、またはアプリケーションの処理ロジックの一部として(予期される状態を待ってから動作する)使用できます。 [強調鉱山]
ユースケースは、セクションフェイルセーフアイデアに具体的にリストされています。
あなた(または開発者)が忘れっぽい場合は、未使用のEC2インスタンスを検出してシャットダウンできます。これを行うには、非常に低い負荷平均を長期間検出します。このタイプのフェイルセーフは、実際に使用していないリソースに料金を支払わないようにすることで、AWSの請求を削減するために使用できます。
概説したように、これは、アラームをトリガーしてインスタンスを停止する適切な条件を発見的に検出できるかどうかに依存します。ログインに基づいて Publishing Custom Metrics を使用してCloudWatchに次のレベルに到達させることができますSSHユーザー数、アイドル時間、またはその他の方法で、望ましい検出とシャットダウンプロセスの制御/精度を向上させます。
ログインしている間サーバーを実行し続け、セッションがn
単位未満の時間だけアイドル状態になっていることを探している場合は、言及したcronスクリプトを使用してこれを行うことができます。ログインしたユーザーのIDLE
時間を報告するw(1)
の出力を監視することにより、これを使用できます。
次のようなコマンドを使用して、インスタンス自体にcronジョブスクリプトを作成できます。
netstat | grep ssh | grep ESTABLISHED
結果が返されない場合はファイルに書き込み、cronは再試行し、結果が返されない場合はスクリプトがこれを実行します。
/sbin/shutdown -h now
たまにしか使用しないEC2インスタンスもほとんどありません。 これはsystemdサービスです しばらくSSHアクティビティがない場合にインスタンスをシャットダウンするようにしました。