使用 Terraform 在 Azure 中进行过滤的正则表达式

RegEx for filtering in Azure using Terraform

Terraform azurerm_image 数据源可让您使用 RegEx 识别 ID 与正则表达式匹配的机器图像。

What RegEx should be used to retrieve an image that includes the string MyImageName and that takes the complete form /subscriptions/abc-123-def-456-ghi-789-jkl/resourceGroups/MyResourceGroupName/providers/Microsoft.Compute/images/MyImageName1618954096 ?

以下版本的 RegEx 抛出错误,因为它不接受两个 * 字符。但是,当我们只使用尾部*时,图像没有被检索到。

data "azurerm_image" "search" {
  name_regex          = "*MyImageName*"
  resource_group_name = var.resourceGroupName
}

请注意,结果仅 return 一张图片,因此您无需担心 return 编辑了多张图片。可以设置一个标志来指定升序或降序排序以检索最旧或最新的匹配项。

我们得到的精确错误是:

Error: "name_regex": error parsing regexp: missing argument to repetition operator: `*`  

尼克的建议

根据@Nick 的建议,我们尝试了:

data "azurerm_image" "search" {
  name_regex          = "/MyImageName[^/]+$"
  resource_group_name = 
var.resourceGroupName
}

但结果是:

Error: No Images were found for Resource Group "MyResourceGroupName"  

我们检查了 Azure 门户,在名为 MyResourceGroupName 的资源组中有一个名称中包含 MyImageName 的图像。我们还确认 Terraform 是 运行 作为订阅所有者,因此我们假设订阅所有者有足够的权限来过滤图像名称。

我们还能尝试什么?

经过我的验证,当 name_regex 仅包含一个尾随 * 时,它似乎有效。如果有一个前缀 *,它将生成该错误消息。

例如,我的资源组中有一个图像名称rrr-image-20210421150018

以下作品:

r*
-*
8*
rrr*
image*
2021*

以下无效:

*r
*-
*8
*image*
*rrr*

此外,验证您是否有最新的 azurerm 提供程序。

结果