我们如何使用 python boto3 获取挂载到 EC2 实例的所有文件系统(EFS)的列表?

Posted

技术标签:

【中文标题】我们如何使用 python boto3 获取挂载到 EC2 实例的所有文件系统(EFS)的列表?【英文标题】:How can we get list of all file systems(EFS) mounted to an EC2 instance using python boto3? 【发布时间】:2020-03-19 21:11:27 【问题描述】:

我在 AWS 上使用 Boto3 自动化了很多事情,但最近有人要求列出 EC2 实例的所有文件系统。我无法找到任何直接方法将所有已安装的文件系统 (AWS EFS) 获取到 EC2 实例。

我只有实例 ID。我以编程方式访问 AWS 资源,但无法直接访问目标实例。我已经检查了 EC2 和 EFS 客户端,但我肯定遗漏了一些东西,所以在这里询问是否有人遇到过类似的情况,希望在这里分享他/她的方法。

我知道我们可以运行“df -h”来列出所有挂载文件系统,但我无法登录到实例。

【问题讨论】:

【参考方案1】:

如果您具有对 AWS 资源的编程访问权限,则可以轻松解决您的问题。您可以做的是使用 AWS System Manager Run Command (Send Command) API。

它允许您直接在服务器上运行命令,您可以轻松地将命令的响应作为 API 响应获取,并通过它可以得到您想要的响应。

您可以使用 Run 命令在实例上执行 df -h ,然后您可以过滤 Python 代码中的响应或执行单行命令,这将返回挂载系统的名称列表。

以下是 AWS System Manager 运行命令(发送命令)的链接:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm.html#SSM.Client.send_command

【讨论】:

嗯“您可以轻松地将命令的响应作为 API 响应获取”。运行 cmd 永远不会返回执行的 cmd 输出。它返回执行的 cmd 状态。我通过配置存储桶来捕获运行 cmd 输出来实现它的任何方法。等待 5 秒,然后以 cmdid 作为过滤器读取 s3 存储桶的文件。 它确实返回一个命令输出,但最多 25000 个字符左右。您收到的命令输出实际上与您在命令的输出部分中看到的输出相同。在 API 中,密钥将为“StandardOutputContent”。在此键下,您将能够看到命令的输出。

以上是关于我们如何使用 python boto3 获取挂载到 EC2 实例的所有文件系统(EFS)的列表?的主要内容,如果未能解决你的问题,请参考以下文章

使用 boto3 和 python 将 AWS EC2 详细信息导出到 xlsx/csv

使用 Python 和 Boto3 获取列表集群 Amazon Redshift

如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?

如何使用 boto3 获取我拥有的 EBS 快照列表?

python 使用Python和Boto3获取具有实例ID的实例标记信息

Python Boto3 使用 NextToken 通过路径从 SSM 获取参数