1. Terminal configure root/iam account-keys/credential using:
aws configure --profile XXname
OR
aws configure
Then type the keys.
echo %HOMEPATH%
cd .aws
.aws>dir
then you will see config(存放region和output(可以是json)信息) and credencials(存放keys信息) 2 files, check them:
.aws>type config
.aws>type credentials
<<
https://github.com/AutomationWithScripting/UdemyBoto3Scripts
2. Access IAM with boto3
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html#service-resource
# session 和 resource 方式连接:
import boto3
aws_mag_console = boto3.session.Session(profile_name='账户名字'). # 进入console
iam_console_res = aws_mag_console.resource('iam') # 进入iam
# iam_console_res = aws_mag_console.resource(service_name='iam',region_name='us-west-2') # 进入iam,用dir(iam_console_res)可以查看可以直接调用的方法
for user in iam_console_res.users.all():
print(user.name)
user_ob = iam_console_res.User('s3_developer')
print(user_ob.user_name)
# client方式连接。用client相比resource,用法会更麻烦一点,这是low level services access,而resource属于high level的object-oriented services access,可以直接调用方法,实现简单。
import boto3
iam_console_cli = aws_mag_console.client(service_name='iam',region_name='us-west-2') # 进入iam,用dir(iam_console_cli)发现不能直接调用方法,相比resource,用法会更麻烦一点,这是low level services access,而resource属于high level的object-oriented services access。
for user in iam_console_cli.list_users['Users']:
print(user['UserName'])
3. Access s3 with boto3
aws_mag_console = boto3.session.Session(profile_name='root') # 进入console
s3 = aws_mag_console.resource('s3') # 进入s3
# s3 = boto3.resource('s3') # 或者直接进入s3,跳过前2句,使用默认account
for bucket in s3.buckets.all():
print(bucket.name)
4. Access ec2 with boto3
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/ec2-example-managing-instances.html
import boto3
from pprint import pprint # 适合打印json格式,很整齐
aws_mag_console = boto3.session.Session(profile_name='root') # 进入console
ec2 = aws_mag_console.client(service_name='ec2', region='us-west-2')
response = ec2.describe_instances()
# response = ec2.describe_instances(Filters=[f1, f2])
for x in response['Reservations']:
for y in x['Instances']:
print(y['InstanceId'])
print('Image id is:{}\nInstanceId is:{} '.format(y['ImageId'], y['InstanceId']))
response_v = ec2.describe_volumes()['Volumes']
for x in response_v:
print(x['VolumeId'])
import boto3
from pprint import pprint # 适合打印json格式,很整齐
aws_mag_console = boto3.session.Session(profile_name='root') # 进入console
ec2 = aws_mag_console.resource(service_name='ec2', region='us-west-2')
response = ec2.instances
# for x in response.limit(2): # only select 2
f1 = {'Name':'instance-state-name','Values':['running','stopped']} # f1 = {}
f2 = {'Name':'instance-type','Values':['t2.micro']}
# for x in response.filter(Filters=[f1, f2]): #
for x in response:
print(x)
collections:
# for x in response.limit(2): # only select 2
# for x in response.filter(): #
# for x in response:
waiter
def start_inst(self,instant_id):
# inst_obj = self.ec2_re.Instance(instant_id)
# inst_obj.start()
# inst_obj.wait_until_running() # 40 checks, check every 15s??
# below use client
self.ec2_cli.start_instances(InstanceIds=[instant_id])
waiter = self.ec2_cli.get_waiter('instance_running')
waiter.wait(InstanceIds=[instant_id]) # # 40 checks, check every 5s till success, after 200s may get error
print('It is running now!')
meta, resource 通过meta可以获取client信息,而不用再用client方法
import boto3
from pprint import pprint # 适合打印json格式,很整齐
aws_mag_console = boto3.session.Session(profile_name='root') # 进入console
ec2 = aws_mag_console.client(service_name='ec2', region='us-west-2')
pprint(ec2_re.meta.client.describe_regions()['Regions']) # get all regions info
-
Access sts with boto3
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html -
Paginator, client的方法
import boto3
ec2_cli = boto3.client('ec2','us-west-2')
f_prod_bk = {'Name': 'tag:Prod', 'Values':['Backup', 'backup'] }
print('client ')
paginator = ec2_cli.get_paginator('describe_volumes') # ec2: 'describe_instances',iam: 'list_users', s3:'list_objects'
list_val_ids = []
for page in paginator.paginate(Filters=[f_prod_bk]):
print(page)
for vol in page['Volumes']:
list_val_ids.append(vol['VolumeId'])
当我们链接的时候,不同的服务位于不同的区域,需要说明region——name,否则可能会出错。