Я успешно завершил обучение по контейнерным функциям в приложениях-контейнерах Azure.
Теперь, когда я собираюсь настроить Github Actions для непрерывного развертывания из приложения-контейнера на портале Azure, я получаю такую ошибку:
Не удалось настроить непрерывное развертывание с ошибкой: клиент «{email-address}» с идентификатором объекта «{user-uuid}» имеет разрешение на выполнение действия «Microsoft.Resources/deployments/write» в области «/subscriptions/{subscription». -uuid}/resourcegroups/{strange-containerapp-resource group}/providers/Microsoft.Resources/deployments/Microsoft-Continious-Deployment-cb0020a2-8aed'; однако доступ запрещен из-за запрещенного назначения с именем "{deny-assignment-uuid}" и идентификатором "{deny-assignment-uuid}" в области "/subscriptions/{subscription-uuid}/resourceGroups/{strange- контейнерное приложение-ресурсная группа}'.
Что такое «отказ в назначении» и почему он не позволяет мне настроить непрерывное развертывание?
Само приложение-контейнер находится в странной группе ресурсов с именем типа MyContainerappEnvironment_FunctionApps_{deny-assignment-uuid}
. Все остальные ресурсы, созданные в соответствии с руководством, находятся в ожидаемой группе ресурсов AzureFunctionsContainers-rg
, но не в самом приложении-контейнере!
Если я попытаюсь переместить приложение-контейнер в другую группу ресурсов, я получу аналогичную ошибку «запретить назначение».
О чем это? Разве мы не должны настраивать непрерывное развертывание внутри самого приложения-контейнера? Помощь!
Связанный вопрос на Github:
https://github.com/Azure/azure-functions-on-container-apps/issues/65
Не удалось настроить непрерывное развертывание с ошибкой: клиент «{email-address}» с идентификатором объекта «{user-uuid}» имеет разрешение на выполнение действия «Microsoft.Resources/deployments/write» в области «/subscriptions/{subscription». -uuid}/resourcegroups/{strange-containerapp-resource group}/providers/Microsoft.Resources/deployments/Microsoft-Continious-Deployment-cb0020a2-8aed'; однако доступ запрещен из-за запрещенного назначения с именем "{deny-assignment-uuid}" и идентификатором "{deny-assignment-uuid}" в области "/subscriptions/{subscription-uuid}/resourceGroups/{strange- контейнерное приложение-ресурсная группа}'.
Эта ошибка возникает из-за отказа в назначениях в созданной группе ресурсов, в которой размещено приложение-контейнер.
Я столкнулся с той же ошибкой при развертывании функций в приложениях-контейнерах с помощью действий GitHub.
Это связано с тем, что Azure автоматически создает запретные назначения для защиты ресурсов, и эти назначения невозможно удалить. Это не позволяет пользователям выполнять развертывания даже после получения полного доступа.
Выполните следующие шаги, чтобы настроить развертывание с помощью действий GitHub:
Создайте новый Function App
вместе с новым Container Apps Environment
.
Настройте следующие секреты в разделе GitHub=>Settings=>Secrets
:
Используйте приведенную ниже команду CLI для создания учетных данных RBAC:
az ad sp create-for-rbac --name <appname> --role contributor \
--scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/sites/{app-name} \
--sdk-auth
Выход:
{
"clientId": "3d45e7b0-72d7-XXXXXX",
"clientSecret": ".148Q~jpO4zA6vGoIdzmiXXXXv",
"subscriptionId": "d93995e6-2XXXXX52bc",
"tenantId": "9329cXXXXXXb6e37b19af6d",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}
Команда CLI для получения имени пользователя и пароля:
az acr credential show -n <registryname> --query "[username, passwords[0].value]" -o tsv
Рабочий процесс:
name: Deploy container to Azure Functions App
on:
push:
branches: [ main ]
permissions:
contents: read
# set up the environment variables
env:
AZURE_FUNCTION_APP_NAME: 'your-app-name'
LOGIN_SERVER: 'login-server'
REGISTRY: 'your-registry'
NAMESPACE: 'your-namespace'
IMAGE: 'your-image'
TAG: ${{ github.sha }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout to the branch
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Log in to container registry
uses: docker/login-action@v1
with:
registry: ${{ env.LOGIN_SERVER }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push container image to registry
uses: docker/build-push-action@v2
with:
push: true
tags: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE }}:${{ env.TAG }}
file: ./Dockerfile
context: ./
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_RBAC_CREDENTIALS }}
- name: 'Run Azure Functions Container Action'
uses: Azure/functions-container-action@v1
id: fa
with:
app-name: ${{ env.AZURE_FUNCTION_APP_NAME }}
image: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE }}:${{ env.TAG }}
- name: Azure logout
run: |
az logout
Статус развертывания:
Я столкнулся с той же проблемой. Я даже не могу создать новую версию своего приложения-контейнера для развертывания на портале. И он не будет автоматически обновляться, когда я добавляю новое изображение. Является ли единственный способ создать новую версию или обновить образ путем создания учетных данных RBAC и использования рабочего процесса действий GitHub?
Спасибо, я задал тот же вопрос на Github, и они дали аналогичный ответ: github.com/Azure/azure-functions-on-container-apps/issues/…