Когда вы используете Azure CDN для доставки контента, вам может потребоваться очистить вашу конечную точку, чтобы внесенные вами изменения отправлялись вашим пользователям, поскольку файлы кэшируются в Azure CDN до истечения срока их жизни (TTL). Если вы не установили срок жизни для своих файлов, Azure автоматически устанавливает срок жизни в 7 дней. Даже если вы установите более низкий TTL, ваши обновления могут не совпадать с истечением срока действия кеша.

Например, мой личный веб-сайт использует Azure CDN и обновляется при каждой отправке данных на GitHub. Для этого сложно установить хорошее правило кэширования, потому что мои изменения непредсказуемы. Когда я работаю над своим сайтом, я могу нажимать несколько раз в день, но я также могу неделями не изменять свой сайт.

Хотя можно очистить конечную точку через портал Azure, я хотел автоматизировать этот процесс. К счастью, это возможно с GitHub Actions.

Создание субъекта-службы

Субъект-служба Azure — это удостоверение, созданное для использования с приложениями, размещенными службами и автоматизированными инструментами для доступа к ресурсам Azure. Для повышения безопасности рекомендуется использовать субъекты-службы с автоматизированными инструментами, поскольку доступ ограничен ролями, назначенными субъекту-службе. В этом разделе я расскажу, как создать субъект-службу и назначить ему роль Участник конечной точки CDN. Для начала вам понадобится Azure CLI.

Чтобы создать новый субъект-службу, введите следующую команду в своем терминале, обязательно скопировав правильные <subscription_id> и <resource_group_name> с вашего портала Azure.

az ad sp create-for-rbac -n "<name_of_service_principal>" --role "CDN Endpoint Contributor" --sdk-auth --scopes /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>

Вывод будет выглядеть примерно так: обязательно скопируйте и сохраните его в безопасном месте, так как вы не сможете получить clientSecret в будущем.

{                                                                                 "clientId": "<GUID>",                             
"clientSecret": "<GUID>",                         
"subscriptionId": "<GUID>",                       
"tenantId": "<GUID>"
}

В команде мы создаем субъект-службу и назначаем ему роль CDN Endpoint Contributor. Это позволяет субъекту-службе управлять конечными точками CDN. Флаг --sdk-auth приводит к правильному форматированию вывода для использования в действии GitHub; без него вы получите следующую ошибку при копировании вывода на GitHub.

Error: Not all values are present in the creds object. Ensure clientId, clientSecret, tenantId and subscriptionId are supplied.

Добавление секретов GitHub

Добавьте следующие секреты (зашифрованные переменные среды) в свой репозиторий GitHub:

  1. AZURE_CREDENTIALS: вставьте вывод команды az ad sp create-for-rbac.
  2. AZURE_CDN_ENDPOINT: имя вашей конечной точки Azure CDN.
  3. AZURE_CDN_PROFILE_NAME: имя вашего профиля Azure CDN.
  4. AZURE_RESOURCE_GROUP: имя группы ресурсов, содержащей профиль Azure CDN.

Написание файла рабочего процесса GitHub Actions

Теперь, когда у вас есть субъект-служба и секреты GitHub, остается только написать действие GitHub. В рабочем процессе есть два основных этапа: 1) вход в Azure и 2) очистка CDN. Для начала перейдите в свой репозиторий на GitHub и выберите вкладку «Действия». Нажмите «Новый рабочий процесс», затем выберите «Создать рабочий процесс самостоятельно» или соответствующий стартовый процесс для ваших нужд.

Ниже приведен минимум, необходимый для этого рабочего процесса.

На шаге Azure service principal login выполняется вход в Azure CLI с учетными данными, которые вы добавили в свой секрет GitHub. Шаг Purge CDN очищает CDN, поэтому ваши обновления должны происходить между этими двумя шагами. На шаге Purge CDN --content-paths "/*" удаляется все содержимое. --no-wait означает, что сценарий не ожидает завершения операции очистки перед продолжением; этот флаг является необязательным. Подробнее о команде az cdn endpoint purge можно прочитать здесь.

Вот и все, удачного кодирования!