我该如何使用 AWS CLI 命令列出特定 Amazon EBS 卷的附加或分离历史?

上次更新时间:2019 年 11 月 5 日

我该如何使用 AWS 命令行界面 (AWS CLI) 列出特定 Amazon Elastic Block Storage (Amazon EBS) 卷的附加或分离历史?

简短描述

Amazon Elastic Compute Cloud (Amazon EC2) 和 Amazon EBS 资源不会保存附加或分离的历史。但 AWS CloudTrail 会保留此信息。AWS CloudTrail 是为 AWS 账户记录 AWS API 调用和事件的服务。您可以通过 AWS CLI 使用 AWS CloudTrail API,以提取附加和分离日志。

使用 RunInstances TerminateInstances API 调用进行附加和分离的 Amazon EBS 卷没有单独的 CloudTrail 事件。这些事件不会出现在 CloudTrail lookup-events API 输出当中。

解决方法

运行 CloudTrail lookup-events API。此命令使用 AWS CLI JSON 处理器 (JMESPath) 来搜索 附加分离事件。

您可以使用两种方法返回数据。

打印 Unix Epoch 时间戳:

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)}'

使用您的 Amazon EBS 卷替换 VOLUME_ID ,并将 REGION_ID 替换成适当的区域。使用 max-results 变量设置返回的 Amazon EBS 卷事件的数量。返回结果的默认数量为 50,可能的最大数量也是 50。

2.    CloudTrail 会以 Unix Epoch 时间格式显示时间戳。使用以下一种方法将时间戳转换成 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

以 UTC 时区格式打印人类可读的时间戳:

注意:此方法使用 sed 实用工具和 jq 处理器,而且推荐仅供 Linux 用户使用。

sed 实用工具用于将 CloudTrail 事件值转换为 JSON 友好布局。大多数 Linux 发行版本均已安装 sed 实用程序。如果未安装,您可以从 GNU sed 网站下载实用程序。

jq 处理器用于搜索与返回 EventNameInstanceIDEventTime 的值。如果未安装,您可以前往 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}'

使用您的 Amazon EBS 卷替换 VOLUME_ID ,并将 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 中创建您自己的跟踪

2.    将日志保存到 Amazon Simple Storage Service (Amazon S3) 储存桶。

3.    使用 Amazon Athena 查询 Amazon S3 储存桶中的日志


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?