Reputation: 4039
I'm using aws ec2 service with awscli. Now I want to put all the commands I type in the console into a python script. I see that if I write import awscli
inside a python script it works fine but I don't understand how to use it inside the script. For instance how do I execute the commands aws ec2 run-instances <arguments>
inside the python script after import awscli
? Just to make it clear, I'm not looking for a solution like os.system('aws ec2 run-instances <arguments>')
, I'm looking for something like
import awscli
awscli.ec2_run-instances(<arguments>)
Upvotes: 34
Views: 78670
Reputation: 1
Fix/example to the answer of smokeny using sh. As an answer since I can't comment yet and edit is not working.
from sh import aws
aws("s3","cp","s3://folder/", ".", "--recursive", "--exclude", "*", "--include", "*.txt")
Upvotes: 0
Reputation: 171
You can use awscli direclty in python
from awscli.clidriver import create_clidriver
cli_driver = create_clidriver()
result = cli_driver.main(args=["s3api", "list-buckets"])
That way you trigger the command but the result will only contain the return code. I haven't found a way to capture the actual output from the tool. Additionally the instance will exit if things go wrong.
So, I don't recommend using this. Just wanted to add this for informational purpose
Upvotes: 3
Reputation: 1591
Well, you can run aws cli
command by using subprocess
in python script.
For instance, suppose to get the s3
bucket list.
Then,
import subprocess
push=subprocess.call(['aws', 's3', 'ls', '--recursive', '--human-readable', '--summarize'])
or
import subprocess
push=subprocess.run(['aws', 's3', 'ls', '--recursive', '--human-readable', '--summarize'])
Wish help for you.
Upvotes: 2
Reputation: 1222
Boto3 doesn't have everything the cli has so you may have to use something from the cli in a script once in a blue moon. I can't find an analog for aws deploy push in boto3 for example so here is how I push to s3 with the cli from a python script. Although to Julio's point, I use boto for everything else.
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
Upvotes: 18
Reputation: 392
You can do it with brilliant sh package. You could mimic python package with sh doing wrapping for you.
import sh
s3 = sh.bash.bake("aws s3")
s3.put("file","s3n://bucket/file")
Upvotes: 27
Reputation: 13501
The CLI would be more suited for the shell prompt, for a better python API, check the boto library. This example shows how to launch an instance: http://boto.readthedocs.org/en/latest/ec2_tut.html
Upvotes: 18