Как настроить службу приложения Azure для извлечения изображений из ACR с помощью terraform? - PullRequest
1 голос
/ 26 января 2020

У меня есть следующий модуль terraform для настройки служб приложений по тому же плану:

provider "azurerm" {
}

variable "env" {
    type = string
    description = "The SDLC environment (qa, dev, prod, etc...)"
}

variable "appsvc_names" {
    type = list(string)
    description = "The names of the app services to create under the same app service plan"
}

locals {
    location = "eastus2"
    resource_group_name = "app505-dfpg-${var.env}-web-${local.location}"
    acr_name = "app505dfpgnedeploycr88836"
}

resource "azurerm_app_service_plan" "asp" {
    name                = "${local.resource_group_name}-asp"
    location            = local.location
    resource_group_name = local.resource_group_name
    kind                = "Linux"
    reserved            = true

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

resource "azurerm_app_service" "appsvc" {
    for_each            = toset(var.appsvc_names)

    name                = "${local.resource_group_name}-${each.value}-appsvc"
    location            = local.location
    resource_group_name = local.resource_group_name
    app_service_plan_id = azurerm_app_service_plan.asp.id

    site_config {
        linux_fx_version = "DOCKER|${local.acr_name}/${each.value}:latest"
    }

    app_settings = {
        DOCKER_REGISTRY_SERVER_URL = "https://${local.acr_name}.azurecr.io"
    } 
}

output "hostnames" {
  value = {
    for appsvc in azurerm_app_service.appsvc: appsvc.name => appsvc.default_site_hostname
  }
}

Я вызываю его через следующую конфигурацию:

terraform {
    backend "azurerm" {
    }
}

locals {
    appsvc_names = ["gateway"]
}

module "web" {
    source = "../../modules/web"
    env = "qa"
    appsvc_names = local.appsvc_names
}

output "hostnames" {
    description = "The hostnames of the created app services"
    value       = module.web.hostnames
}

Реестр контейнеров имеет Изображения, которые мне нужны:

C:\> az acr login --name app505dfpgnedeploycr88836
Login Succeeded
C:\> az acr repository list  --name app505dfpgnedeploycr88836
[
  "gateway"
]
C:\> az acr repository show-tags --name app505dfpgnedeploycr88836 --repository gateway
[
  "latest"
]
C:\>

Когда я применяю конфигурацию terraform, все создается нормально, но проверка созданного ресурса службы приложения в Azure Портал показывает, что в его настройках контейнера не отображается docker image:

enter image description here

Теперь я могу вручную переключиться на другой ACR, а затем вернуться к тому, который хочу получить только:

enter image description here

Cannot perform credential operations for /subscriptions/0f1c414a-a389-47df-aab8-a351876ecd47/resourceGroups/app505-dfpg-ne-deploy-eastus2/providers/Microsoft.ContainerRegistry/registries/app505dfpgnedeploycr88836 as admin user is disabled. Kindly enable admin user as per docs: https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication#admin-account

Это меня смущает. В соответствии с https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication#admin -account пользователь с правами администратора не должен использоваться, и поэтому в моем ACR его нет. С другой стороны, я понимаю, что мне нужно как-то настроить службу приложения для аутентификации с ACR.

Каков правильный способ сделать это тогда?

1 Ответ

0 голосов
/ 26 января 2020

Таким образом, вы можете использовать авторизацию субъекта службы с Службой приложений , но вам нужно будет создать субъекта службы, предоставив ему полномочия ACRpull для реестра, и использовать логин и пароль участника службы в App Service site_config

DOCKER_REGISTRY_SERVER_USERNAME
DOCKER_REGISTRY_SERVER_PASSWORD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...