Amazon Simple Storage Service (Amazon S3) で Amazon Elastic Compute Cloud (Amazon EC2) データフィードを構成したところ、このデータフィードに問題が発生したため、トラブルシューティングしたいです。
簡単な説明
Amazon EC2 スポットインスタンスの料金を確認するには、スポットインスタンスの使用状況と価格をレポートするデータフィードを構成します。データフィードにサブスクライブすると、Amazon EC2 はこのデータを S3 バケットに保存します。データフィードに問題がある場合は、発生した問題に応じて次のトラブルシューティング手順を実行してください。
解決策
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
AWS KMS 暗号化
S3 バケットは、カスタマーマネージド AWS Key Management Service (AWS KMS) キーで暗号化されている可能性があります。この場合、AWS KMS キーポリシーの権限内で delivery.logs.amazonaws.com へのサービスを許可する必要があります。こうすることで、AWS KMS は暗号化 S3 バケットにデータフィードを配信できます。
キーポリシーには次の権限が必要です。
{
"Sid": "Allow Logs Delivery to use the key",
"Effect": "Allow",
"Principal": {
"Service": [
"delivery.logs.amazonaws.com"
]
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
}
詳細については、「Amazon S3 バケットのサーバー側暗号化」を参照してください。
ACL の権限
データフィードにサブスクライブする際、S3 バケットがデータフィードを受信するためのアクセスコントロールリスト (ACL) 権限がアカウントに付与されます。これらの権限が欠けている場合、データフィードはバケットへの配信を停止します。アカウントに次の権限が保持されていることを確認します。
- Amazon S3 コンソールを開きます。
- ナビゲーションペインで [バケット] を選択し、データフィードに関連付けられている S3 バケットを選択します。
- [アクセス許可] タブを選択します。
- [アクセスコントロールリスト (ACL)] を参照し、Grantee として登録されており、データフィードにサブスクライブしている外部アカウントを特定します。このアカウントには、S3 バケットに対する FULL_CONTROL 権限が付与されていることを確認します。AWS アカウント awslogsdelivery の ACL 権限がアカウントの正規 ID として追加されています。
c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0
アカウントに FULL_CONTROL が割り当てられていない場合は、必要な ACL 権限を取得するにはデータフィードに再度サブスクライブする必要があります。AWS CLI コマンド create-spot-datafeed-subscription を実行すると、その手順を実行できます。
注: データフィードのサブスクライブを解除しても、関連する ACL 権限は自動的に削除されません。データフィードを削除する場合は、Amazon S3 コンソールでアクセス許可 (ステップ 1 ~ 4) にアクセスし、手動で削除する必要があります。
データフィードの制限
各 AWS アカウントには、データフィードを 1 つのみ作成できます。データフィードを別の S3 バケットに転送するには、別の S3 バケットで AWS CLI コマンド create-spot-datafeed-subscription を再度実行します。
EC2 スポットインスタンスの実行時
EC2 スポットインスタンスの実行中のみ、データフィードが取得されます。たとえば、スポットインスタンスを 3 時間停止した場合、データフィードもその 3 時間の期間中、データの配信を停止します。データフィードは、スポットインスタンスが再度起動すると自動的に再開されます。
S3 オブジェクトの所有権
データフィードの S3 バケットのオブジェクト所有権設定は、バケット所有者優先またはオブジェクトライターである必要があります。これらの設定が行われている場合、S3 バケットに ACL 権限が付与されます。S3 バケットにいずれの所有権設定も行われていない場合は、S3 バケットにデータフィードを構成できません。この場合、エラーが発生します。
"An error occurred (InaccessibleStorageLocation) when calling the CreateSpotDatafeedSubscription operation: The specified bucket does not exist or does not have enough permissions."
詳細については、「オブジェクトの所有権を管理し、バケットの ACL を無効化する」を参照してください。
その他の考慮事項
データフィードを構成する際、次の点に留意してください。
- データフィードの有効化には、追加コストはかかりません。ただし、S3 バケットのデータフィードストレージに対し、ストレージコストが発生します。
- データフィードファイルは通常、1 時間に 1 回バケットに送信されます。通常、1 時間あたりの使用量は単一のデータファイルでカバーされます。ファイルサイズと到達時間に関する詳細については、「スポットインスタンスのデータフィード」を参照してください。