Terraform中aws_ami的name_regex与name过滤器的区别
Terraform AWS AMI数据源:name_regex与name过滤器的差异
核心差异主要体现在三个方面:
执行层级不同
filter块中的name过滤是AWS API层面的筛选:Terraform把过滤条件发送给AWS,由AWS服务端先筛选出符合条件的AMI列表,再返回给Terraform。name_regex是Terraform本地的二次筛选:Terraform先获取AWS返回的所有符合filter条件的AMI,再在本地用正则表达式做进一步过滤。
匹配规则不同
filter的name用的是AWS的通配符匹配:比如代码里的myami-*,*代表任意长度的任意字符,只能实现简单的前缀/后缀匹配,逻辑较基础。name_regex用的是标准正则表达式:比如代码里的^myami-\\d{3},要求AMI名称必须以myami-开头,后面紧跟3个数字,能实现更精准、复杂的匹配逻辑(比如限定字符类型、长度等)。
性能效率不同
filter在API层面过滤,能直接减少返回给Terraform的数据量,当账户内AMI数量较多时,能有效降低网络传输和后续处理的压力,提升整体效率。name_regex是本地过滤,需要先接收所有filter筛选后的结果再处理,如果前置筛选返回的结果量大,会增加Terraform的本地处理时间。
结合你的代码举例说明
你的代码中,AWS会先返回所有满足以下条件的AMI:
- 名称匹配
myami-* - 根设备类型为
ebs - 虚拟化类型为
hvm
之后Terraform会在这些结果里,再筛选出名称符合^myami-\\d{3}规则的AMI,最终取其中最新的一个(most_recent = true)。
内容的提问来源于stack exchange,提问作者keshav swami
相关产品推荐
相关产品推荐

