

# スポットインスタンスのデータフィードを使用してスポットインスタンスのコストを追跡する
<a name="spot-data-feeds"></a>

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

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

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

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

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

**Topics**
+ [データフィードのファイル名と形式](#using-spot-instances-format)
+ [Amazon S3 バケットの要件](#using-spot-instances-dfs3)
+ [スポットインスタンスのデータフィードの購読](#using-spot-instances-datafeed-all)
+ [データフィード内のデータを表示する](#using-spot-instances-datafeed-view-data)
+ [スポットインスタンスのデータフィードを削除する](#using-spot-instances-datafeed-delete)

## データフィードのファイル名と形式
<a name="using-spot-instances-format"></a>

スポットインスタンスのデータフィードのファイル名には(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 ユーザーガイド*」の「[Bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)」を参照してください。

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


|  フィールド  |  説明  | 
| --- | --- | 
|   `Timestamp`   |  そのインスタンス使用量に対して請求される価格を決定するために使用されるタイムスタンプ。  | 
|   `UsageType`   |  請求の対象となっている使用タイプおよびインスタンスタイプ。`m1.small` スポットインスタンス ではこのフィールドは `SpotUsage` に設定されます。他のすべてのインスタンスタイプではこのフィールドは `SpotUsage:`\$1*instance-type*\$1 に設定されます。例えば、`SpotUsage:c1.medium`。  | 
|   `Operation`   |  請求の対象となっている製品。Linux スポットインスタンス の場合、このフィールドは `RunInstances` に設定されます。Windows スポットインスタンス の場合、このフィールドは `RunInstances:0002` に設定されます。スポット使用状況は利用可能ゾーンに従ってグループ化されます。  | 
|   `InstanceID`   |  このインスタンスの使用量情報を生成したスポットインスタンスの ID。  | 
|   `MyBidID`   |  このインスタンスの使用量情報を生成したスポットインスタンスリクエストの ID。  | 
|   `MyMaxPrice`   |  このスポットリクエストに指定された上限価格。  | 
|   `MarketPrice`   |  `Timestamp` フィールドに指定された時刻のスポット料金。  | 
|   `Charge`   |  このインスタンス使用量に請求される価格。  | 
|   `Version`   |  データフィードバージョン。可能性のあるバージョンは 1.0 です。  | 

## Amazon S3 バケットの要件
<a name="using-spot-instances-dfs3"></a>

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

データフィード用の Amazon S3 バケットを選択する前に、以下の点を考慮します。
+ バケットに対する `FULL_CONTROL` アクセス権限が必要です。バケット所有者にはデフォルトでこの権限があります。それ以外の場合、バケット所有者は AWS アカウントにこのアクセス権限を付与する必要があります。
+ データフィードを購読すると、これらのアクセス権限を使用してバケット ACL が更新され、AWS データフィードアカウントに `FULL_CONTROL` アクセス権限が付与されます。AWS データフィードアカウントはデータフィードファイルをバケットに書き込みます。アカウントに必要なアクセス許可がない場合、データフィードファイルをバケットに書き込むことはできません。詳細については「Amazon CloudWatch Logs ユーザーガイド」の「[Amazon S3 に送信されたログ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-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) バケットのサーバー側の暗号化](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-SSE-KMS-S3)」を参照してください。**

## スポットインスタンスのデータフィードの購読
<a name="using-spot-instances-datafeed-all"></a>

スポットインスタンスのデータフィードはいつでも購読できます。Amazon EC2 コンソールを使用してこのタスクを完了することはできません。

バケットに十分なアクセス許可がないというエラーが表示された場合は「[Troubleshoot the data feed for Spot Instances](https://repost.aws/knowledge-center/s3-data-feed-ec2-spot-instances)」の記事でトラブルシューティングに関する情報を参照してください。。

------
#### [ AWS CLI ]

**データフィードを購読するには**  
[create-spot-datafeed-subscription](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-spot-datafeed-subscription.html) コマンドを使用します。

プレフィックスを使用してバケットを指定するには、次の例を使用します。

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

プレフィックスを使用せずにバケットを指定するには、次の例を使用します。

```
aws ec2 create-spot-datafeed-subscription \
    --bucket amzn-s3-demo-bucket
```

------
#### [ PowerShell ]

**データフィードを購読するには**  
[New-EC2SpotDatafeedSubscription](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2SpotDatafeedSubscription.html) コマンドレットを使用します。

プレフィックスを使用してバケットを指定するには、次の例を使用します。

```
New-EC2SpotDatafeedSubscription `
    -Bucket amzn-s3-demo-bucket `
    -Prefix my-prefix
```

プレフィックスを使用せずにバケットを指定するには、次の例を使用します。

```
New-EC2SpotDatafeedSubscription `
    -Bucket amzn-s3-demo-bucket
```

------

## データフィード内のデータを表示する
<a name="using-spot-instances-datafeed-view-data"></a>

AWS マネジメントコンソールで AWS CloudShell を開きます。次の [s3 sync](https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html) コマンドを使用して、データフィードの 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
```

## スポットインスタンスのデータフィードを削除する
<a name="using-spot-instances-datafeed-delete"></a>

スポットインスタンスのデータフィードが終了したら、データフィードを削除できます。

------
#### [ AWS CLI ]

**データフィードを削除するには**  
[delete-spot-datafeed-subscription](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-spot-datafeed-subscription.html) コマンドを使用します。

```
aws ec2 delete-spot-datafeed-subscription
```

------
#### [ PowerShell ]

**データフィードを削除するには**  
[Remove-EC2SpotDatafeedSubscription](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2SpotDatafeedSubscription.html) コマンドレットを使用します。

```
Remove-EC2SpotDatafeedSubscription
```

------