過去8〜9年、Amazon Elastic Compute Cloud (EC2)の進化を見るのは本当に興味深いことでした。最初は、単一のインスタンスタイプを単一のリージョンで事前に決められたオンデマンドの価格で起動することが出来ました。今では、多くのインスタンスタイプが10箇所(AWS GovCloud(US)を含めると11箇所)のリージョンで起動できますし、オンデマンド、リザーブド、スポット(現時点で9リージョン)の価格から選ぶことができます。EC2には多くの機能を追加してきましたし、Amazon EMR,AWS Elastic Beanstalk,Amazon WorkSpaces,EC2 Container Service, AWS Lambdaといった他のサービスのビルディングブロックとしても使われています。
新しいスポットフリートAPI
本日、一度のリクエストでスポットインスタンスフリートをまとめて起動・制御できる新しいAPIを追加して、スポットインスタンスのモデルをより使いやすくしました。(フリートとは、分散アプリケーションとして並列に動作するスポットインスタンスの集合です。フリートとしてはバッチ処理ジョブ、Hadoopワークフロー、HPCグリッド・コンピューティングジョブなどがあります。)多くのAWSのお客様は、最も低いコストでワークロード(大規模分子動力学から 継続的インテグレーション環境にいたるまで)を実行するために、複数のインスタンスタイプと複数のゾーンにわたってキャパシティを探し、市場価格を監視して、入札価格を管理する独自のコードをつくって、数百から数千のスポットインスタンスを起動しています。
本日の起動から、このような足場のようなコードが不要になります! 一つのAPI (
RequestSpotFleet
) があなたのかわりにその全てを行います。あなたは単純に、フリートのターゲットキャパシティ、1時間あたりの入札価格、起動したいインスタンスタイプを指定するだけです。スポットは、最安値のキャパシティを見つけて、フリートのターゲットキャパシティを維持しようとします。一度のAPIコールでこれら全てを行います。リクエストを作成する
1つのリージョンで最大1000のアクティブなスポットフリートを持つことができます。1つのフリートと1つのリージョンにつき 3000インスタンスという上限があります(通常のアカウントやリージョンごとにあるEC2の上限もそのまま有効ですので、起動できるインスタンス数や作成できるAmazon Elastic Block Store (EBS)のボリューム数などにも制限がかかります)。
APIやCLI経由での各リクエストは以下の値を指定する必要があります:
- ターゲットキャパシティ – フリートに入れたいEC2インスタンス数(指定しない場合のデフォルト値は1)
- 最大入札価格 – あなたが支払うつもりの最大入札価格
- 起動設定 – 起動したいインスタンス数とインスタンスタイプ、および起動時の設定( AMI Id, VPC, サブネットやアベイラビリティゾーン、セキュリティグループ、ブロックデバイスマッピング、ユーザーデータ等)。より安く使うには、一般的に起動設定では特定のサブネットやアベイラビリティゾーンを指定しません。
- IAM フリートロール – IAMロール名。EC2が自身でターミネートするために必要です。
各リクエストは、以下のオプション値を含むことができます:
- クライアントトークン – リクエストを識別するためのユニークな文字列(大文字小文字を区別します)。スポットフリートリクエストの冪等性を確実にするために使用できます。
- 有効期限の開始日時 – リクエストの開始日時
- 有効期限の終了日時 – リクエストの終了日時
- 有効期限終了時ターミネート – TRUEを指定すると、リクエスト終了時刻にフリート内の全インスタンスがターミネートされます。FALSE(デフォルト値)だと、スポットインスタンスはそのまま起動し続けますが、新たなインスタンスも起動します。
RequestSpotFleet
APIは、正常に受付けた場合にスポットフリートリクエストIDを返しますが、リクエストがおかしい場合はエラーを返します。スポットとして利用できないインスタンスタイプをリクエストした場合等に、エラーを受け取るでしょう。取得したスポットフリートリクエストIDを使って、DescribeSpotFleetRequests
, DescribeSpotFleetInstances
, DescribeSpotFleetRequestHistory
, CancelSpotFleetRequests
といったその他のスポットフリートAPIを呼び出すことができます(各APIはコマンドラインでも同等の機能があります)。スポットフリートの詳細
一度リクエストが受理され開始日時が決まると、EC2はスポット価格が変わったとしても要求されたキャパシティを維持しようとします。起動設定ごとに、現在のスポット価格を監視し始めます。最安値でキャパシティが確保できスポット上限に収まっており入札上限に収まっている場合にスポットインスタンスは起動します。スポット価格が上昇するとフリート内のインスタンスはターミネートされ、その時点で最安値の起動設定に入れ替えられます。
リクエストは期限切れになるまで、もしくはキャンセルするまでアクティブです。フリート内のスポットインスタンスは、意図的にターミネートしない限り実行し続けます。先ほど述べたように、IAMロールを含めておく必要があります。そうすることでEC2は自身をターミネートすることができます。
考えておくべきこと
新しいAWSの機能と同じく、これは最初のリリースであり、待ち行列にはかなりのバックログが溜まっています。たとえば、私達は重み付けシステムの追加を計画しています。これは各起動設定の相対的な優先度を数式で表現できるようなります。ターゲットキャパシティという機能は、計算に必要なフリートの”馬力”を示す事ができその単位を表現します。
各フリートは特定のAWSリージョン内で実行します。将来的には 2つ以上のリージョンに跨ったフリートをサポートしたいと思います。
今すぐ利用可能
本日よりパブリックなAWSリージョンでスポットフリートをローンチできます。スポットフリートの機能は無料で、起動したEC2インスタンスのスポット価格と、その他に利用したリソースについてのみ支払います。
— Jeff; (日本語訳は松尾康博が担当しました)