AWS コマンドラインインターフェイス (AWS CLI) を使用して、Amazon Elastic Block Storage (Amazon EBS) ボリュームのアタッチメントまたはデタッチメントの履歴を一覧表示したいと考えています。
簡単な説明
Amazon Elastic Compute Cloud (Amazon EC2) と Amazon EBS リソースには、アタッチメントまたはデタッチメントの履歴は保存されません。アタッチメントまたはデタッチメントの履歴を取得するには、AWS CloudTrail を使用してください。CloudTrail は、AWS アカウントの AWS API コールとイベントを記録するサービスです。AWS CLI から AWS CloudTrail API を使用すると、 アタッチメントログとデタッチメントログを取得できます。
RunInstances と TerminateInstances の API k コールを使用して Amazon EBS ボリュームをアタッチおよびデタッチする場合、ボリュームには個別の CloudTrail イベントはありません。これらのイベントは、CloudTrail ルックアップイベント API の出力には表示されません。
解決策
**注意:**AWS CLI コマンドを実行する際にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
CloudTrail lookup-events API を実行します。このコマンドは、アタッチイベントとデタッチイベントの検索に AWS CLI JSON プロセッサ (JMESPath) を使用します。
次の方法のいずれかを使用するとデータを取得できます:
- Unix エポックタイムスタンプを印刷する
- UTC タイムゾーンで人間が判読できるタイムスタンプを印刷する
Unix エポックタイムスタンプを印刷する
1.以下のコマンドを実行します:
$ aws cloudtrail lookup-events \--lookup-attributes AttributeKey=ResourceName,AttributeValue=VOLUME_ID \
--max-results 3 \
--region REGION_ID \
--query 'Events[?EventName == `DetachVolume` || EventName == `AttachVolume`].{EventTime:EventTime,EventName:EventName,InstanceID:(Resources[1].ResourceName)}'
**注意:**VOLUME_ID を Amazon EBS ボリューム ID に、REGION_IDを AWS リージョンに置き換えます。max-results 変数を使用して、返される Amazon EBS ボリュームイベントの数を設定します。50 がデフォルトで、返される結果の最大数です。
2.CloudTrail は UNIX エポック時間でタイムスタンプを表示します。タイムスタンプを UTC に変換するには、次のいずれかの方法を使用します:
macOS
タイムスタンプから小数点を削除し、次のコマンドを実行します:
$ date -r 1571065747 -uMon Oct 14 15:09:07 UTC 2019
Linux
以下のコマンドを実行します:
$ date -d @1571065747.0 -uMon Oct 14 15:09:07 UTC 2019
Windows
コンバーターを使用します。コンバーターを選択するには、 EpochConverter ウェブサイトの Epoch および Unix のタイムスタンプ変換ツールを参照してください。
UTC タイムゾーンで人間が判読できるタイムスタンプを印刷する
**注意:**この方法では、sed ユーティリティと jq プロセッサを使用します。jq は Linux でのみ使用してください。
sed ユーティリティは、CloudTrail イベント 値を JSON 互換のレイアウトに変換できます。ほとんどの Linux ディストリビューションには、sed ユーティリティが予めインストールされています。インストールされていない場合は、GNU オペレーティングシステムのウェブサイトから ユーティリティをダウンロードしてください。
jq プロセッサは、EventNam、**InstanceID **、および EventTime の値を検索して返すことができます。インストールされていない場合は、jq ウェブサイトからプロセッサをダウンロードします。
以下のコマンドを実行します:
$ aws cloudtrail lookup-events \--lookup-attributes AttributeKey=ResourceName,AttributeValue=VOLUME_ID \
--max-results 3 \
--region REGION_ID \
--query 'Events[?EventName == `DetachVolume` || EventName == `AttachVolume`].CloudTrailEvent' | \sed 's/\\//g' | sed 's/"}"/"}/g' |
sed 's/"{"/{"/g' | \
jq '.[] | {EventName:.eventName, InstanceID:.requestParameters.instanceId, EventTime:.eventTime}'
**注意:**VOLUME_ID を Amazon EBS ボリューム ID に、REGION_IDを AWS リージョンに置き換えます。max-results 変数を使用して、返される Amazon EBS ボリュームイベントの数を設定します。50 は、返される結果のデフォルトおよび最大数です。
出力例:
{ "EventName": "AttachVolume",
"InstanceID": "i-00a49ef5dd45af31b",
"Time": "2019-10-02T15:36:18Z"
}
{
"EventName": "DetachVolume",
"InstanceID": "i-0554d4452aa4cf91b",
"Time": "2019-10-02T14:26:04Z"
}
{
"EventName": "AttachVolume",
"InstanceID": "i-0554d4452aa4cf91b",
"Time": "2019-10-02T14:25:42Z"
}
**注意:**CloudTrail のデフォルトの検索履歴の長さは 90 日です。90 日以上前のイベントは表示されません。イベントログを 90 日以上保持するには、次の手順を実行します:
- CloudTrailで、独自のトレイルを作成してください 。
- ログを Amazon Simple Storage Service (Amazon S3) バケットに保存します。
- Amazon Athena を使用して、Amazon S3 バケット内のログをクエリします。
関連情報
Lookup-events
AWS CLI で CloudTrail イベントを表示する