我正在尝试匹配不以连字符(-)开头的EC2实例名称,以便可以从关闭过程中跳过以-开头的实例名称。如果我使用^或*,这些基本正则表达式运算符可以正常工作,但如果我尝试使用更高级的模式匹配,则匹配不正确。模式[a-zA-Z0-9]被忽略,并且不返回任何实例。
import boto3
# Enter the region your instances are in, e.g. 'us-east-1'
region = 'us-east-1'
#def lambda_handler(event, context):
def lambda_handler():
ec2 = boto3.resource('ec2', region_name=region)
filters= [{
'Name':'tag:Name',
#'Values':['-*']
'Values':['^[a-zA-Z0-9]*']
},
{
'Name': 'instance-state-name',
'Values': ['running']
}]
instances = ec2.instances.filter(Filters=filters)
for instance in instances:
for tags in instance.tags:
if tags["Key"] == 'Name':
name = tags["Value"]
print 'Stopping instance: ' + name + ' (' + instance.id + ')'
instance.stop(DryRun=True)
lambda_handler()
当使用CLI和各种api时,EC2实例过滤不是由“regex”完成的。相反,过滤器是简单的
*
和?
通配符。根据本文Listing and Filtering Your Resources,它确实提到了regex过滤。但是,在这一节中,还不清楚它是在api中受支持,还是仅仅在AWS管理控制台中受支持。
但是,在同一文档的后面部分,在“使用CLI和API列出和筛选”中,它说:
在本节中,没有提到regex支持。
结论,我怀疑regex过滤仅在管理控制台UI中受支持。
我试过这样的方法:
它返回我需要的值。
我刚试过?和*字符的过滤值和它的工作就像一个魅力。。!
相关问题 更多 >
编程相关推荐