4

予測不可能な時間 (ユーザー要求) に、メモリを集中的に使用するジョブを実行する必要があります。このために、スポットまたはオンデマンドのインスタンスを取得し、タグでマークしますnon_idle。作業が完了したら (数時間かかる場合があります)、タグを付けidleます。AWS の時間単位の請求モデルにより、別のジョブが発生した場合に備えて、別の請求可能な時間が発生するまでそのインスタンスを維持したいと考えていますnon_idle。その間にジョブが入らない場合、インスタンスは終了する必要があります。

AWS はこれに対する準備が整ったソリューションを提供していますか? 私の知る限り、CloudWatch は特定の時間に実行するアラームを設定できません。CPUUtilization やインスタンスのタグを使用してもかまいません。それ以外の場合は、作成されたすべてのインスタンスに対して、インスタンスの作成後 1 時間ごとに実行される Java タイマーまたは scala アクターを単純に設定し、タグをチェックすることもできますidle

4

1 に答える 1

3

このきめ細かい最適化のためのすぐに利用できる AWS ソリューションはありませんが、既存のビルディング ブロックを使用して、実際に現在のインスタンスの起動時間に基づいて独自に構築することができます (Dmitriy Samovskiy のスマート ソリューションを参照して、How Long Ago Was This EC2 Instanceを推測してください)。始めましたか?)。

「チキン」の演奏

Shlomo Swidler は、彼の記事Play “Chicken” with Spot Instancesでこの最適化を検討しましたが、 Amazon EC2 スポット インスタンスのコンテキストでは動機が少し異なります。

AWS スポット インスタンスには、システムを少し操作できる興味深い経済的特徴があります。すべての EC2 インスタンスと同様に、スポット インスタンスの終了を開始すると、使用した時間が 1 時間未満であっても、1 時間分の料金が発生します。ただし、スポット価格が入札価格を上回ったために AWS がインスタンスを終了した場合、現在の時間については料金を支払う必要はありません。

仕組みはもちろん同じなので、彼が組み立てたスクリプトを単純に再利用できるかもしれません。つまり、インスタンスにタグを付ける代わりに、またはそれに加えて、このスクリプトを実行しますidle

#! /bin/bash
t=/tmp/ec2.running.seconds.$$
if wget -q -O $t http://169.254.169.254/latest/meta-data/local-ipv4 ; then
    # add 60 seconds artificially as a safety margin
    let runningSecs=$(( `date +%s` - `date -r $t +%s` ))+60
    rm -f $t
    let runningSecsThisHour=$runningSecs%3600
    let runningMinsThisHour=$runningSecsThisHour/60
    let leftMins=60-$runningMinsThisHour
    # start shutdown one minute earlier than actually required
    let shutdownDelayMins=$leftMins-1
    if [[ $shutdownDelayMins > 1 && $shutdownDelayMins < 60 ]]; then
        echo "Shutting down in $shutdownDelayMins mins."
        # TODO: Notify off-instance listener that the game of chicken has begun
        sudo shutdown -h +$shutdownDelayMins
    else
        echo "Shutting down now."
        sudo shutdown -h now
    fi
    exit 0
fi
echo "Failed to determine remaining minutes in this billable hour. Terminating now."
sudo shutdown -h now
exit 1

ジョブが到着したらnon_idle、次のようにインスタンスにタグを付ける代わりに、またはそれに加えて、スケジュールされた終了をキャンセルできます。

sudo shutdown -c

これは、テスト/操作中の「赤いボタン」緊急コマンドでもあります。たとえば、Shlomo の警告を参照してください。

スクリプトを使用する前に、このスクリプトが何をするのかをよく理解しておいてください。インスタンスのシャットダウンを誤ってスケジュールした場合は、次のコマンドでキャンセルできます。インスタンスで実行します: sudo shutdown -c

CloudWatch をゲームに追加する

Shlomo の自己完結型のアプローチは、 Amazon CloudWatchと統合することでさらに進めることができます。これは最近、 Amazon CloudWatch を使用して未使用の Amazon EC2 インスタンスを検出してシャットダウンするオプションを追加しました。詳細については、紹介ブログ投稿Amazon CloudWatch - アラーム アクションを参照してください。

本日、CloudWatch アラームがトリガーされたときに EC2 インスタンスを停止または終了する機能を提供します。これは、フェイルセーフ (異常な状態を検出してから処理する) として、またはアプリケーションの処理ロジックの一部として (予期される状態を待ってから処理する) 使用できます。[鉱山を強調]

ユースケースは、具体的にはアプリケーション統合のセクションにリストされています。

インスタンスごとに観察するカスタムメトリクスに基づいて CloudWatch アラームを作成することもできます。たとえば、独自の Web サービス API への呼び出し、ページ要求、または 1 分あたりのメッセージ投稿を測定し、必要に応じて応答することができます。

そのため、カスタムメトリクスを CloudWatch に発行することで、この新しい機能を活用して、Dmitriy の起動時間検出に基づいてインスタンスを終了する必要があるかどうか (is) を示し、ジョブが入ってインスタンスが実行を継続する必要がある場合 (is )idleにメトリクスを再度リセットすることができます。 EC2 が終了を処理し、3 つの自動化ステップのうち 2 つがインスタンスから運用環境に移動され、それに応じて自動化プロセスの管理と可視性が向上します。non_idle

于 2013-04-09T10:38:24.493 に答える