Имам някои проблеми с бита EC2 на Boto (Boto v2.8.0, Python v2.6.7).
Първата команда връща списък с S3 Buckets -всичко е наред! Втората команда за получаване на списък от EC2 инстанции взривява с 403 с "Query-string authentication изисква подпис, Expires и AWSAccessKeyId параметри"
s3_conn = S3Connection(AWSAccessKeyId, AWSSecretKey)
print s3_conn.get_all_buckets()
ec2_conn = EC2Connection(AWSAccessKeyId, AWSSecretKey)
print ec2_conn.get_all_instances()
Също така, всичките ми пълномощия са добри (Full admin) - тествах ги с помощта на Ruby aws-sdk.
Аз също забелязах, че домакин атрибут в обекта ec2_conn s3-eu-west-1.amazonaws.com, "s3" ...? Сигурно това е грешно? Опитах се да го фиксирам в правилната крайна точка, но няма късмет.
Всяка помощ ще бъде много оценявам Благодаря
Отговори:
6 за отговор № 1Ето работен код, който използвам, за да изброя всичките си копия в потенциално няколко региона. Това прави много повече, отколкото ти трябва, но може би можеш да го намалиш до това, което искаш.
#!/usr/bin/python
import boto
import boto.ec2
import sys
class ansi_color:
red = " 33[31m"
green = " 33[32m"
reset = " 33[0m"
grey = " 33[1;30m"
def name(i):
if "Name" in i.tags:
n = i.tags["Name"]
else:
n = "???"
n = n.ljust(16)[:16]
if i.state == "running":
n = ansi_color.green + n + ansi_color.reset
else:
n = ansi_color.red + n + ansi_color.reset
return n
def pub_dns( i ):
return i.public_dns_name.rjust(43)
def pri_dns( i ):
return i.private_dns_name.rjust(43)
def print_instance( i ):
print " " + name(i) + "| " + pub_dns(i) + " " + pri_dns(i)
regions = sys.argv[1:]
if len(regions)==0:
regions=["us-east-1"]
if len(regions)==1 and regions[0]=="all":
rr = boto.ec2.regions()
else:
rr = [ boto.ec2.get_region(x) for x in regions ]
for reg in rr:
print "========"
print reg.name
print "========"
conn = reg.connect()
reservations = conn.get_all_instances()
for r in reservations:
# print ansi_color.grey + str(r) + ansi_color.reset
for i in r.instances:
print_instance(i)
2 за отговор № 2
Има команда connect_to_region:
import boto.ec2
connection = boto.ec2.connect_to_region("eu-west-1", aws_access_key_id=AWSAccessKeyId,
aws_secret_access_key=AWSSecretKey)
Най- Урок за Boto дава друг начин. Този метод ще работи по следния начин:
import boto.ec2
for region in boto.ec2.regions():
if region.name == "my-favorite-region":
connection = region.connect()
break
Това не работи по-стари версии на Boto.
0 за отговор № 3
Имате ли вашите идентификационни данни за IAM? Даденият ключ за достъп трябва да има права за EC2. Ако не сте сигурни, можете да добавите политиката AmazonEC2FullAccess за тестване и по-късно да я настроите.