如何在 python 脚本中使用 awscli?

Posted

技术标签:

【中文标题】如何在 python 脚本中使用 awscli?【英文标题】:How to use awscli inside python script? 【发布时间】:2014-07-09 19:34:22 【问题描述】:

我正在使用带有 awscli 的 aws ec2 服务。现在我想将我在控制台中输入的所有命令放入一个 python 脚本中。我看到如果我在 python 脚本中编写 import awscli 它工作正常,但我不明白如何在脚本中使用它。例如,如何在import awscli 之后在 python 脚本中执行命令aws ec2 run-instances <arguments>?为了明确起见,我不是在寻找像 os.system('aws ec2 run-instances <arguments>') 这样的解决方案,我在寻找类似的东西

import awscli
awscli.ec2_run-instances(<arguments>)

【问题讨论】:

【参考方案1】:

您可以使用出色的 sh 包来做到这一点。 你可以模仿 python 包,用 sh 为你包装。

import sh
s3 = sh.bash.bake("aws s3")
s3.put("file","s3n://bucket/file")

【讨论】:

sh 包绝对很有趣。感谢您的指点。但它是not for Windows(将在我的 *nix 平台上使用该软件包) 这应该是公认的答案,因为 boto3 缺乏功能和奇怪的限制【参考方案2】:

CLI 将更适合 shell 提示符,要获得更好的 python API,请查看 boto 库。这个例子展示了如何启动一个实例:http://boto.readthedocs.org/en/latest/ec2_tut.html

【讨论】:

太棒了。我完全不喜欢 Bash Shell 脚本。我很急。为胜利而生的 Python。谢谢! 除了 boto 库不能做 awscli 库可以做的一些事情。例如s3 同步。【参考方案3】:

Boto3 没有 cli 的所有功能,因此您可能不得不在脚本中使用 cli 中的某些内容。例如,我在 boto3 中找不到 aws deploy push 的模拟,所以这里是我如何使用 python 脚本中的 cli 推送到 s3。尽管在 Julio 的观点上,我使用 boto 来处理其他所有事情。

import subprocess

cmd='aws deploy push --application-name SomeApp --s3-location  s3://bucket/Deploy/db_schema.zip --ignore-hidden-files' 
push=subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
print push.returncode

【讨论】:

【参考方案4】:

好吧,您可以在 python 脚本中使用subprocess 来运行aws cli 命令。 例如,假设获取s3 存储桶列表。 那么,

import subprocess

push=subprocess.call(['aws', 's3', 'ls', '--recursive', '--human-readable', '--summarize'])

import subprocess

push=subprocess.run(['aws', 's3', 'ls', '--recursive', '--human-readable', '--summarize'])

希望对你有所帮助。

【讨论】:

以上是关于如何在 python 脚本中使用 awscli?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 travis 部署脚本中运行 aws configure?

用于将数据从AWS S3加载到Redshift的Python脚本

AWS Beanstalk 应用程序无法部署,因为 awscli-bundle 部署程序中的 Python 版本太旧

调用 aws cli 的用户数据脚本

ECS 任务。如何在容器中使用 AWS CLI

如何在 tkinter GUI 位于同一文件中的情况下运行 python 脚本?您如何处理用户条目?