<p>在阐述Michal Gasek的答案时,这里有一个选项可以根据tag:value对的指令过滤asg。</p>
<pre><code>def get_asg_name_from_tags(tags):
asg_name = None
client = boto3.client('autoscaling')
while True:
paginator = client.get_paginator('describe_auto_scaling_groups')
page_iterator = paginator.paginate(
PaginationConfig={'PageSize': 100}
)
filter = 'AutoScalingGroups[]'
for tag in tags:
filter = ('{} | [?contains(Tags[?Key==`{}`].Value, `{}`)]'.format(filter, tag, tags[tag]))
filtered_asgs = page_iterator.search(filter)
asg = filtered_asgs.next()
asg_name = asg['AutoScalingGroupName']
try:
asgX = filtered_asgs.next()
asgX_name = asg['AutoScalingGroupName']
raise AssertionError('multiple ASG\'s found for {} = {},{}'
.format(tags, asg_name, asgX_name))
except StopIteration:
break
return asg_name
</code></pre>
<p>例如:</p>
<pre><code>asg_name = get_asg_name_from_tags({'Env':env, 'Application':'app'})
</code></pre>
<p>它期望只有一个结果,并通过尝试使用next()获取另一个结果来检查这个结果。StopIteration是“好的”情况,然后它会脱离分页器循环。</p>