1 回答
TA贡献1898条经验 获得超8个赞
您过滤和检索实例的代码中存在小错误。
请注意,ec2.instances.filter()EC2 资源 API 上的方法返回 EC2 实例,就像在ec2.Instance类型的对象中一样,无需将其减少为实例 ID 列表,然后在您的has_small_vols()方法中将实例 ID 转换回对象的类型ec2.Instance。您可以简单地在ec2.Instance整个过程中使用对象列表,如果需要,最后转换为实例 ID 列表。
尝试以下操作:
import boto3
ec2 = boto3.resource('ec2')
def has_small_vols(instance):
vols = instance.volumes.all()
for volume in vols:
if volume.size < 60:
return True
return False
def get_redis_nodes():
filters = [
{'Name':'tag:Service', 'Values':['redis']},
{'Name':'tag:Environment', 'Values':['production*']}
]
return ec2.instances.filter(Filters=filters)
redis_instances = get_redis_nodes()
redis_instances_small = [i for i in redis_instances if has_small_vols(i)]
print(redis_instances_small)
redis_small_ids = [i.id for i in redis_instances_small]
print(redis_small_ids)
请注意,boto3中的客户端和资源 API 完全不同。
添加回答
举报