1 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
您過(guò)濾和檢索實(shí)例的代碼中存在小錯(cuò)誤。
請(qǐng)注意,ec2.instances.filter()EC2 資源 API 上的方法返回 EC2 實(shí)例,就像在ec2.Instance類(lèi)型的對(duì)象中一樣,無(wú)需將其減少為實(shí)例 ID 列表,然后在您的has_small_vols()方法中將實(shí)例 ID 轉(zhuǎn)換回對(duì)象的類(lèi)型ec2.Instance。您可以簡(jiǎn)單地在ec2.Instance整個(gè)過(guò)程中使用對(duì)象列表,如果需要,最后轉(zhuǎn)換為實(shí)例 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)
請(qǐng)注意,boto3中的客戶(hù)端和資源 API 完全不同。
添加回答
舉報(bào)