如何在 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脚本