/ / Как да получа Boto да върне EC2 инстанции - S3 работи добре - python, amazon-web-services, amazon-ec2, boto

Как да накарам Boto да върне копия на EC2 - S3 работи добре - python, amazon-web-services, amazon-ec2, boto

Имам някои проблеми с бита 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 за тестване и по-късно да я настроите.