我如何让Boto返回EC2实例- S3工作正常



我在Boto (Boto v2.8.0, Python v2.6.7)的EC2位有一些问题。

第一个命令返回S3 bucket的列表—一切正常!第二个获取EC2实例列表的命令出现了一个带有"查询字符串身份验证需要签名、过期和AWSAccessKeyId参数"的403。

s3_conn = S3Connection(AWSAccessKeyId, AWSSecretKey)
print s3_conn.get_all_buckets()
ec2_conn = EC2Connection(AWSAccessKeyId, AWSSecretKey)
print ec2_conn.get_all_instances()

此外,我的证书都很好(完全管理员)-我使用Ruby aws-sdk测试了它们,EC2和S3都工作得很好。

我还注意到ec2_conn对象中的host属性是s3- eu-west1.amazonaws.com ,"s3"…?这肯定是错的吧?我试过复古修复它到正确的端点,但没有运气。

任何帮助将是非常感激的由于

下面是我用来列出可能跨越多个区域的所有实例的工作代码。它做的比你需要的多得多,但也许你可以把它缩减到你想要的。

#!/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)

有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不支持此功能

您是否有您的IAM凭据?给定的访问键应该具有EC2的权限。如果您不确定,可以将策略AmazonEC2FullAccess添加到测试中,然后将其调低。

最新更新