AWS コマンドラインインターフェイス (AWS CLI) の create-volume コマンドを使用して、暗号化されたスナップショットから Amazon Elastic Block Store (Amazon EBS) ボリュームを作成しました。コマンドは正常に完了し、ボリューム ID を返しました。ボリュームをインスタンスにアタッチしようとすると、ボリュームが見つかりません。
簡単な説明
スナップショットから Amazon EBS ボリュームを作成すると、2 つの操作が実行されます。
- Amazon EBS がボリュームの作成を開始します。これにより、ボリューム ID が返され、API または AWS CLI の出力で返されたボリュームの状態が「creating」に設定されます。これは、createVolume API が有効で、正常に登録されたことを意味します。
- 非同期呼び出しが開始され、作成したボリュームの暗号化と復号化に使用される AWS Key Management Service (AWS KMS) キーが検証されます。
AWS KMS の検証が成功すると、ボリュームの状態は「available」に設定され、EBS ボリュームはアクセス可能になります。指定した AWS KMS キー ID、エイリアス、または ARN が有効でない場合、アクションは完了したように表示されます。ただし、ボリュームの作成は最終的に失敗し、エラーは返されません。
注: CreateVolume の AWS KMS 検証は非同期です。詳細については、「create-volume」と「Amazon EBS リソースの暗号化」を参照してください。
EBS ボリュームをアタッチしたりアクセスしたりすると、問題に気付く場合があります。**createVolume ** API はボリューム ID を返しますが、EBS ボリュームは存在せず、AWS CloudTrail ログにはエラーは表示されません。
問題の例
この例は、createVolume API が AWS KMS キーのエイリアスが無効である場合に使用されていることを示しています。**createVolume ** API は成功してボリューム ID を返し、ボリュームの状態を「creating」に設定します。AWS KMS キーのエイリアスは有効ではないため、非同期認証は失敗します。これにより、操作全体が失敗します。ボリューム作成イベントの AWS CloudTrail ログを確認しても、createVolume 操作が成功したためエラーは見つかりませんでした。
$ aws ec2 create-volume --volume-type gp2 --availability-zone eu-west-1c --encrypted --kms-key-id hana --snapshot-id snap-0a27fe340500641d9 {
"AvailabilityZone": "eu-west-1c",
"MultiAttachEnabled": false,
"Tags": [],
"Encrypted": true,
"VolumeType": "gp2",
"VolumeId": "vol-043fe27d0ccf74b36",
"State": "creating",
"KmsKeyId": "hana",
"SnapshotId": "snap-0a27fe340500641d9",
"Iops": 100,
"CreateTime": "2020-10-06T18:03:09.000Z",
"Size": 8
}
AWS CloudTrail ログ:
responseElements": { "requestId": "8677d3cd-ad1d-4866-95f5-375d92a35813",
"volumeId": "vol-043fe27d0ccf74b36",
"size": "8",
"snapshotId": "snap-0a27fe340500641d9",
"zone": "eu-west-1c",z
"status": "creating",
"createTime": 1602007389000,
"volumeType": "gp2",
"iops": 100,
"encrypted": true,
"masterEncryptionKeyId": "hana",
"tagSet": {},
"multiAttachEnabled": false
},
"requestID": "8677d3cd-ad1d-4866-95f5-375d92a35813",
"eventID": "bd4216df-ba39-425e-b272-936212ae6699",
"eventType": "AwsApiCall",
"recipientAccountId": "864258534754"
}
describe-volume-status を実行すると、ボリュームが存在しないことがわかります。
$ aws ec2 describe-volume-status --volume-ids vol-043fe27d0ccf74b36An error occurred (InvalidVolume.NotFound) when calling the DescribeVolumeStatus operation:
The volume 'vol-043fe27d0ccf74b36' does not exist.
解決策
注: AWS CLI コマンドを実行する際にエラーが発生する場合は、最新バージョンの AWS CLI を使用していることを確認してください。
describe-volume-status API を使用する
EBS ボリュームが存在するかどうかを確認するには、describe-volume-status API を使用します。
CloudWatch createVolume イベントにサブスクライブする
ボリューム作成の失敗に関する詳細については、パブリック CloudWatch createVolume イベントにサブスクライブしてください。この例では、通知には createVolume CloudWatch イベントが表示されます。通知には、keyId が無効なため createVolume の結果が失敗したことが示されます。
AWS Notification MessageCreateVolume <no-reply@sns.amazonaws.com>
{
"version":"0","id":"192e695f-2387-1cf0-fb1c-1cb32f047212",
"detail-type":"EBS Volume Notification","source":"aws.ec2",
"account":"12345678","time":"2020-10-06T18:03:10Z",
"region":"eu-west-1",
"resources":["arn:aws:ec2:eu-west-1:864258534754:volume/vol-043fe27d0ccf74b36"],
"detail":
{"result":"failed","cause":"Invalid keyId hana","event":"createVolume",
"request-id":"8677d3cd-ad1d-4866-95f5-375d92a35813"}
}
注: 暗号化されたスナップショットから EBS ボリュームを作成する場合、以下の理由によりスナップショットの作成が失敗することもあります。
- ボリュームを作成する AWS ID およびアクセス管理 (IAM) ユーザーまたはロールには、十分な権限がありません。IAM ユーザーまたはロールには、スナップショットの暗号化に使用される AWS KMS キーにアクセスする権限が必要です。
- スナップショットの暗号化に使用される AWS KMS キーがオフになっているか、削除されているか、AWS リージョンにありません。
関連情報
Amazon EBS ボリュームのパフォーマンスを最適化するにはどうすればよいですか?
CloudTrail イベントログを検索しても、EBS ボリュームを作成したユーザー名が見つからないのはなぜですか?