スポットインスタンスのデータフィードを使用してスポットインスタンスのコストを追跡する - Amazon Elastic Compute Cloud

スポットインスタンスのデータフィードを使用してスポットインスタンスのコストを追跡する

スポットインスタンスの料金について理解しやすくするため、Amazon EC2 では、スポットインスタンスの使用状況と料金の詳細を、データフィードにより提供しています。このデータフィードは、データフィードを購読するときに指定する Amazon S3 バケットに送信されます。

データフィードファイルは通常 1 時間に 1 回バケットに到達します。スポットインスタンス実行が一定の時間に満たない場合、その時間のデータフィードファイルは送信されません。

通常、スポットインスタンスの使用時間は 1 時間ごとに 1 つのデータファイルでカバーされます。これらのファイルは、ユーザーのバケットに配信される前に圧縮 (gzip) されます。ファイルが大きい場合 (ある時間に関するファイルの内容が、圧縮前に 50 MB を超える場合など) は、Amazon EC2 は指定した時間の使用状況に関する情報を複数のファイルに書き込みます。

注記

1 つの AWS アカウントにつき 1 つのスポットインスタンスデータフィードのみを作成できます。

スポットインスタンスのデータフィードは、AWS中国 (北京)、中国 (寧夏)、AWSGovCloud (米国) 以外のすべてのリージョンおよびデフォルトでは無効になっているリージョンでサポートされています。

データフィードのファイル名と形式

スポットインスタンスのデータフィードのファイル名には、(UTC の日付と時刻を使用しながら)次のような形式が使用されます。

bucket-name.s3.amazonaws.com/optional-prefix/aws-account-id.YYYY-MM-DD-HH.n.unique-id.gz

例えば、バケット名が amzn-s3-demo-bucket で、プレフィクスが my-prefix である場合、ファイル名は次のようになります。

amzn-s3-demo-bucket.s3.amazonaws.com/my-prefix/111122223333.2023-12-09-07.001.b959dbc6.gz

バケット名の詳細については、「Amazon S3 ユーザーガイド」の「バケットの名前付け」を参照してください。

スポットインスタンスのデータフィードファイルはタブ区切りです。データファイルの各行は、1 個のインスタンス時間に対応し、次の表に示すフィールドが含まれています。

フィールド 説明

Timestamp

そのインスタンス使用量に対して請求される価格を決定するために使用されるタイムスタンプ。

UsageType

請求の対象となっている使用タイプおよびインスタンスタイプ。m1.small スポットインスタンス では、このフィールドは SpotUsage に設定されます。他のすべてのインスタンスタイプでは、このフィールドは SpotUsage:{instance-type} に設定されます。例えば、SpotUsage:c1.medium と指定します。

Operation

請求の対象となっている製品。Linux スポットインスタンス の場合、このフィールドは RunInstances に設定されます。Windows スポットインスタンス の場合、このフィールドは RunInstances:0002 に設定されます。スポット使用状況は、利用可能ゾーンに従ってグループ化されます。

InstanceID

このインスタンスの使用量情報を生成したスポットインスタンスの ID。

MyBidID

このインスタンスの使用量情報を生成したスポットインスタンスリクエストの ID。

MyMaxPrice

このスポットリクエストに指定された上限価格。

MarketPrice

Timestamp フィールドに指定された時刻のスポット料金。

Charge

このインスタンス使用量に請求される価格。

Version

データフィードバージョン。可能性のあるバージョンは 1.0 です。

Amazon S3 バケットの要件

データフィードの購読時に、データフィードファイルを格納する Amazon S3 バケットを指定する必要があります。

データフィード用の Amazon S3 バケットを選択する前に、以下の点を考慮します。

  • バケットに対する FULL_CONTROL アクセス権限が必要です。バケット所有者には、デフォルトでこの権限があります。それ以外の場合、バケット所有者は AWS アカウントにこのアクセス権限を付与する必要があります。

  • データフィードを購読すると、これらのアクセス権限を使用してバケット ACL が更新され、AWS データフィードアカウントに FULL_CONTROL アクセス権限が付与されます。AWS データフィードアカウントは、データフィードファイルをバケットに書き込みます。アカウントに必要なアクセス許可がない場合、データフィードファイルをバケットに書き込むことはできません。詳細については、「Amazon CloudWatch Logs ユーザーガイド」の「Amazon S3 に送信されたログ」を参照してください。

    ACL を更新して AWS データフィードアカウントのアクセス権限を削除すると、データフィードファイルをバケットに書き込むことができなくなります。 データフィードファイルを受け取るには、データフィードを再購読する必要があります。

  • 各データフィードファイルには、独自の ACL があります (バケットの ACL とは別です)。バケット所有者には、データファイルに対して FULL_CONTROL のアクセス許可があります。AWS データフィードアカウントには読み書きのアクセス権限があります。

  • データフィードの購読を削除しても、Amazon EC2 は、AWS データフィードアカウントでの、バケットまたはデータファイルに対する読み書きのアクセス許可を削除しません。これらのアクセス許可は自分で削除する必要があります。

  • AWS Key Management Service (SSE-KMS) に保存されている AWS KMS キーによるサーバー側の暗号化を使用して Amazon S3 バケットを暗号化する場合は、カスタマーマネージド型キーを使用する必要があります。詳細については、「Amazon CloudWatch Logs ユーザーガイド」の「Simple Storage Service (Amazon S3) バケットのサーバー側の暗号化」を参照してください。

スポットインスタンスのデータフィードの購読

データフィードをサブスクライブするには、create-spot-datafeed-subscription AWS CLI コマンドを使用します。

aws ec2 create-spot-datafeed-subscription \ --bucket amzn-s3-demo-bucket \ [--prefix my-prefix]

出力例を以下に示します。

{ "SpotDatafeedSubscription": { "OwnerId": "111122223333", "Bucket": "amzn-s3-demo-bucket", "Prefix": "my-prefix", "State": "Active" } }

バケットに十分なアクセス許可がないというエラーが表示された場合は、「Troubleshoot the data feed for Spot Instances」の記事でトラブルシューティングに関する情報を参照してください。。

データフィード内のデータを表示する

AWS Management Consoleで AWS CloudShell を開きます。次の s3 sync コマンドを使用して、データフィードの S3 バケットから .gz ファイルを取得し、指定したフォルダに保存します。

aws s3 sync s3://amzn-s3-demo-bucket ./data-feed

.gz ファイルの内容を表示するには、S3 バケットの内容を保存したフォルダに移動します。

cd data-feed

ls コマンドを使用してファイルの名前を表示します。zcat コマンドをファイルの名前と共に使用すると、圧縮ファイルの内容が表示されます。以下にサンプルコマンドを示します。

zcat 111122223333.2023-12-09-07.001.b959dbc6.gz

以下は出力例です。

#Version: 1.0 #Fields: Timestamp UsageType Operation InstanceID MyBidID MyMaxPrice MarketPrice Charge Version 2023-12-09 07:13:47 UTC USE2-SpotUsage:c7a.medium RunInstances:SV050 i-0c3e0c0b046e050df sir-pwq6nmfp 0.0510000000 USD 0.0142000000 USD 0.0142000000 USD 1

スポットインスタンスのデータフィードを削除する

データフィードを削除するには、delete-spot-datafeed-subscription AWS CLI コマンドを使用します。

aws ec2 delete-spot-datafeed-subscription