【问题标题】:AWS Python SDK - Sending CLI CommandsAWS Python 开发工具包 - 发送 CLI 命令
【发布时间】:2018-10-29 04:14:42
【问题描述】:

我知道 AWS Python 开发工具包 (Boto/Boto3) 具有各种 AWS 服务 (https://boto3.readthedocs.io/en/latest/guide/resources.html) 的资源,但我想知道是否有资源可以发送直接的 AWS CLI 命令,例如,我可以创建一个 AWS EMR 集群,例如 aws emr create-cluster ...configuration stuff here...。有没有像cli = boto.resource('cli') 这样的东西,或者我只是使用常规 Python 来执行 bash 命令,例如,

from subprocess import call
call(["aws emr create-cluster ...configuration stuff here..."])

【问题讨论】:

  • 当您有 boto3 Python 库包可供您使用时,使用 Python 调用 awscli 会有点不寻常。
  • 我知道它不能完全回答您的问题,但出于好奇,我想知道为什么不使用基础设施作为代码,例如 Terraform?在这种情况下,似乎用 python 编写自动化来创建基础设施就是重新发明轮子。无论哪种方式,您还需要使用配置和安装的 cli 来编排您的环境,这似乎是一种开销
  • @Dvir669 我认为自己处于与 OP 类似的情况。基本上有一个低于成熟的 Terraform 等的级别。您有两个或多个 CloudFormation 模板,您想要的只是发出少量相同的 aws CLI 命令。总结和记录你的日常工作,你主要是为自己做的。在这种情况下,任何类型的基础设施工程都将是矫枉过正
  • @Ichthyo 我听到了,但即使那样我也不会使用 CLI,我会使用其中一个发布的 SDK。正如您所说,使用任何 SDK 客户端编写脚本要简单得多,例如,我使用 Ruby 来重新部署没有我们的标记约定的实例 - 我的意思是,如果您已经投入时间来配置环境使用 CLI 并在其上编写脚本,我认为使用 TF 是一样的努力。

标签: python amazon-web-services amazon-ec2 boto3 aws-cli


【解决方案1】:

Boto3 有两个级别的 API。 Client (low-level) API 提供到 AWS CLI 的映射,然后是 Resource (high-level) API 提供资源对象和集合,您可以像对待任何其他对象一样对待(遍历、访问某些方法和参数等)。

在您的情况下,boto.resource('cli') 没有任何意义,因为 CLI 不是资源。如果您想提供 EMR 资源,您正在寻找一个客户端级别的 API(我知道这有点令人困惑)。

Boto3 有一个 EMR 客户端 (client = boto3.client('emr')),您可以像使用 CLI 一样使用它来创建 EMR 资源。 You can see the documentation for this here.

【讨论】:

  • 我考虑使用 CLI 创建 EMR 的一个原因是因为我可以使用 AWS 管理控制台(更容易使用)创建 EMR,然后测试 EMR,当我对此我很满意,我可以通过按下 UI 屏幕上的按钮简单地导出 CLI 创建命令,然后在 CLI 命令中使用该命令。但我知道这并不理想,因为我必须弄清楚 EMR 何时启动并添加一个工作组和其他东西。
  • 我可能想使用 CLI 创建 EMR 的另一个原因是,与 Data Pipeline 一样,它们不提供安全配置字段,如我的问题所示 stackoverflow.com/a/50399662/3299397
  • 也许可以编写一个帮助程序来获取从管理控制台生成的 aws CLI 并将其转换为 boto3.client 命令?这不会太难。您可以在代码中将 aws CLI 命令作为字符串。至于你关于安全配置的问题,恐怕我无法回答,因为我不熟悉这些细节。
  • 是的,这就是我的想法,您可以从管理控制台复制 CLI 命令并使用其中包含命令的字符串执行它。我只是想知道是否有一个 boto3 类可以用来执行命令,或者我是否像使用标准 Python 库的任何常规 shell 命令一样执行它。
  • 是的,Boto3 很棒。如果不是最好的可用 AWS 开发工具包之一。我正在查看适用于 Node.js 的 AWS 开发工具包>:(
猜你喜欢
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 2017-10-20
  • 1970-01-01
  • 2020-09-30
  • 2011-11-10
  • 2012-05-24
相关资源
最近更新 更多