如何在Python脚本中使用awscli?
我正在使用 AWS 的 EC2 服务,并且通过 AWS CLI 来操作。现在我想把我在控制台输入的所有命令放到一个 Python 脚本里。我发现如果在 Python 脚本中写 import awscli
是可以的,但我不太明白怎么在脚本里使用它。比如说,我想在导入 awscli
之后,怎么在 Python 脚本里执行命令 aws ec2 run-instances <arguments>
?为了更清楚,我并不是在寻找像 os.system('aws ec2 run-instances <arguments>')
这样的解决方案,我想要的是类似于
import awscli
awscli.ec2_run-instances(<arguments>)
6 个回答
你可以直接在Python中使用awscli
from awscli.clidriver import create_clidriver
cli_driver = create_clidriver()
result = cli_driver.main(args=["s3api", "list-buckets"])
这样你可以触发命令,但结果只会包含返回的代码。我还没找到办法获取工具的实际输出。而且,如果出现问题,实例会退出。
所以,我不推荐这样做。只是想提供这个信息。
你可以在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'])
希望这对你有帮助。
Boto3并不是所有命令行工具都有的功能,所以有时候你可能需要在脚本里用到命令行工具里的某些东西。比如,我找不到在boto3中和aws deploy push相对应的功能,所以这里是我如何在Python脚本中通过命令行工具把文件推送到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
你可以使用一个很棒的叫做 sh 的工具包来实现这个功能。这个工具包可以帮你模拟 Python 包的使用,让你更方便地进行操作。
import sh
s3 = sh.bash.bake("aws s3")
s3.put("file","s3n://bucket/file")
命令行界面(CLI)更适合在终端中使用。如果你想要更好的 Python 接口,可以看看 boto 这个库。下面这个例子展示了如何启动一个实例: http://boto.readthedocs.org/en/latest/ec2_tut.html