AWS CLI コマンドを使用して、特定の Amazon EBS ボリュームのアタッチまたはアタッチ解除の履歴を一覧表示する方法を教えてください。

最終更新日: 2021 年 1 月 22 日

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 呼び出しを使用して、アタッチおよびアタッチを解除した Amazon EBS ボリュームには、個別の CloudTrail イベントはありません。これらのイベントは CloudTrail lookup-events API 出力に表示されません。

解決方法

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

CloudTrail lookup-events API を実行します。このコマンドは、AWS CLI JSON プロセッサ (JMESPath) を使用して、Attach イベントと Detachイ ベントを検索します。

データを返すために使用できる方法は 2 つあります。

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 ボリュームに、 REGION_ID を適切なリージョンに置き換えます。max-results 変数を使用して、返される Amazon EBS ボリュームイベントの数を設定します。返される結果のデフォルト数は 50 個です。最大で 50 個が可能です。

2.    CloudTrail は Unix エポック時間でタイムスタンプを表示します。次のいずれかの方法を使用して、タイムスタンプを UTC に変換します。

macOS の場合:

タイムスタンプから小数点を削除してから、次のコマンドを実行します。

$ date -r 1571065747 -u
Mon Oct 14 15:09:07 UTC 2019

Linux の場合:

次のコマンドを実行します。

$ date -d @1571065747.0 -u
Mon Oct 14 15:09:07 UTC 2019

Windows:

epochconverter.com などのコンバーターを使用して、タイムスタンプを変換します。

注: このメソッドは sed ユーティリティと jq プロセッサを使用するため、Linux ユーザーのみに推奨されます。

sed ユーティリティは、CloudTrail の Event 値を JSON に適したレイアウトに変換するために使用されます。ほとんどの Linux ディストリビューションには、sed ユーティリティが既にインストールされています。ユーティリティがインストールされていない場合は、GNU sed ウェブサイトからダウンロードできます。

jq プロセッサは、EventNameInstanceID、および EventTimeの値を検索して返すために使用されます。jq プロセッサがインストールされていない場合は、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 ボリュームに、 REGION_ID を適切なリージョンに置き換えます。max-results 変数を使用して、返される Amazon EBS ボリュームイベントの数を設定します。返される結果のデフォルト数は 50 個です。最大で 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 日より長く保持するには:

1.    CloudTrail で独自の Trail を作成します

2.    ログを Amazon Simple Storage Service (Amazon S3) バケットに保存します。

3.    Amazon Athena を使用して、Amazon S3 バケットのログをクエリします。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?