我有大约 400 个 redis 服务器需要连接 60gb EBS 卷。一些较旧的节点将小于 60gb。
我的方法是遍历每个实例,找到卷,如果卷小于 60GB,则返回 instance_id 但它似乎不起作用。
redis = []
def has_small_vols(instlist):
for i in instlist:
instance = ec2.Instance(str(i))
instid = i.instance_id
vols = instance.volumes.all()
for volume in vols:
if volume.size < 60:
redis.append(instid)
但是for volume in vols循环中有问题,我不确定为什么。我从这里得到了这个想法
我已经尝试过 boto3.resource('ec2') 并且我不确定我是否需要使用 boto3.client('ec2') 。
创建实例列表不是问题:
import boto3
ec2 = boto3.resource('ec2')
def get_redis_nodes():
filters = [{'Name':'tag:Service', 'Values':['redis']}]
filt = [{'Name':'tag:Environment', 'Values':['production*']}]
instlist = list(ec2.instances.filter(Filters=filters).filter(Filters=filt).instance_id)
return instlist
我所期望的是代码会通过过滤的实例,获取 EBS 卷,找到适合 IF 的 EBS 卷,然后附加到列表中。
但是,如果我尝试通过迭代打印,我不会得到卷大小:
for i in instlist:
instance = ec2.Instance(str(i))
vols = instance.volumes.all()
print(i.instance_id)
print(vols)
for volume in vols:
print(volume.size)
>>> get_redis_info()
i-a689ba6efa
ec2.Instance.volumesCollection(ec2.Instance(id="ec2.Instance(id='i-a689ba6efa')"), ec2.Volume)
i-f4b8212aev5748d
ec2.Instance.volumesCollection(ec2.Instance(id="ec2.Instance(id='i-f4b8212aev5748d')"), ec2.Volume)
i-0Ad235afh3a1d0f4
ec2.Instance.volumesCollection(ec2.Instance(id="ec2.Instance(id='i-0Ad235afh3a1d0f4')"), ec2.Volume)
汪汪一只猫
相关分类