提供具有 ACR 访问权限的 Azure 应用程序服务实例的正确方法是什么?

What is the correct way to provision an azure app service instance with ACR access?

从昨天开始我就一直在用头撞墙。我已经阅读了一些 SO 帖子并四处搜索,但我似乎无法让它发挥作用。我想在我的 azure 帐户中提供和应用服务实例,我希望它能够 运行 docker 图像并从 azure 容器注册表中提取 docker 图像。此外,我想用 terraform 来完成所有这些工作。完成此任务的正确方法是什么?到目前为止,我编写的地形看起来像这样,但如上所述不起作用。我得到一个错误

ERROR - Image pull failed: Verify docker image configuration and credentials (if using private repository)

这是地形代码:

resource "azurerm_resource_group" "both_rg" {
  name     = "dpt-both"
  location = "West US"
}


resource "azurerm_app_service_plan" "dpt_both_appservice_plan" {
  name                = "dpt-app-service-plan"
  location            = azurerm_resource_group.both_rg.location
  resource_group_name = azurerm_resource_group.both_rg.name
  kind                = "Linux"
  reserved            = true

  sku {
    tier = "Standard"
    size = "B1"
  }
}

resource "azurerm_app_service" "dpt_app_service" {
  name                = "dpt-app-service"
  location            = azurerm_resource_group.both_rg.location
  resource_group_name = azurerm_resource_group.both_rg.name
  app_service_plan_id = azurerm_app_service_plan.dpt_both_appservice_plan.id
  site_config {
    always_on = false
    linux_fx_version  = "DOCKER|dptacr.azurecr.io/dpt-images:latest"
  }

  app_settings = {
    DOCKER_REGISTRY_SERVER_URL      = "https://dptacr.azurecr.io"
    DOCKER_REGISTRY_SERVER_USERNAME = "<acr username>"
    DOCKER_REGISTRY_SERVER_PASSWORD = "<acr password>"
  }

}

resource "azurerm_container_registry" "dpt_acr" {
  name                     = "dptAcr"
  resource_group_name      = azurerm_resource_group.both_rg.name
  location                 = azurerm_resource_group.both_rg.location
  sku                      = "Basic"
  admin_enabled            = true
  public_network_access_enabled = true
}

您的 Terraform 代码没有问题。这是使用从 Azure 应用服务中提取 Terraform 代码的屏幕截图:

所以 ACR 的凭据不完全正确的可能原因。有两种方法可以获取用户名和密码。一种是使用管理员凭据。您导航到 ACR 访问密钥,然后是管理员用户名和密码。如果未启用,则启用它。另一种是使用正确权限的服务原则,那么用户名就是app id,密码就是secret。获取更多详细信息 here