Какова правильная команда Azure CLI для создания правил HTTP на конечных точках CDN (версия Verizon Premium)?

Или перефразируя другим способом, может ли кто-нибудь дать объяснения различных параметров для az cdn endpoint rule add команда?

Verizon документация не соответствует очень хорошо с Azure CLI.

Verizon перешла со своего механизма правил v3 на v4, и, хотя это значительное улучшение макета и удобства использования, оно по-прежнему не предоставляет информации о конкретных полях или о том, как они будут отображаться в Azure CLI. az cdn endpoint rule add команда.

Одна из проблем заключается в том, что новый интерфейс v4 потерял раскрывающийся список "источник" с внутренне созданным идентификатором Verizon.

@Christopher Cabezudo Родригес bruteforced, как получить это значение, но это не помогает при попытке установить это с помощью интерфейса командной строки.

У меня есть 3 правила HTTP, которые я хочу создать.

  1. Первое правило HTTP позволяет нашему Angular одностраничному приложению "SPA" работать там, где навигационные щелчки, которые изменяют URL-адрес, не перезагружаются и не уходят со страницы.
  2. Второе правило HTTP ограничивает маршрутизацию HTTP-трафика на HTTPS.
  3. Третье правило HTTP предписывает браузеру всегда проверять, не изменилось ли что-нибудь между CDN и кешем. Это гарантирует, что пользователь всегда загружает последнюю версию клиентского приложения.

Для начала я создаю CDN и конечную точку следующим образом:

az cdn profile create --name $AZ_APP_CDN --resource-group $AZ_RESOURCE_GROUP_APP --location $AZ_LOCATION --sku Premium_Verizon

az cdn endpoint create --name $AZ_APP_CDN_ENDPOINT --resource-group $AZ_RESOURCE_GROUP_APP --profile-name $AZ_APP_CDN --origin $ST_BLOB_ORIGIN_DOMAIN --no-http true

В движке правил V4 они будут выглядеть так:

Я наполовину собрал свое лучшее предположение о том, что мне может понадобиться в качестве команд CLI для этого:

az cdn endpoint rule add -g $AZ_RESOURCE_GROUP_APP -n $AZ_APP_CDN_ENDPOINT --profile-name $AZ_APP_CDN --order 0 --rule-name "Redirect" --match-variable RequestHeaderWildcard --match-variable "User-Agent" --operator Equal --match-values "ECPurge/*"--negate-condition true  --action-name "UrlRewrite" --source-pattern "[^?.]*(\?.*)?$" --custom-fragment "client/index.html"

az cdn endpoint rule add -g $AZ_RESOURCE_GROUP_APP -n $AZ_APP_CDN_ENDPOINT --profile-name $AZ_APP_CDN --order 1 --rule-name "Http to Https" --match-variable RequestScheme --operator Equal --match-values HTTPS --action-name "UrlRedirect" --redirect-protocol Https --redirect-type Moved

az cdn endpoint rule add -g $AZ_RESOURCE_GROUP_APP -n $AZ_APP_CDN_ENDPOINT --profile-name $AZ_APP_CDN --order 2 --rule-name "Overwrite cache-control header" --match-variable Always --operator Equal --match-values HTTPS --action-name "ModifyClientResponseHeader" --header-action "Overwrite" --header-name "CacheControl" --header-value "max-age=0, must-revalidate, public"

Особо отметим, что второе правило фактически приводится в справке CLI в качестве примера, но оно не работает. Увидеть:

az cdn endpoint rule add -h

Для каждой из приведенных выше команд я получаю следующие 3 ошибки (пронумерованные согласно правилу):

  1. BadRequest - Имя должно быть оставлено пустым для правил доставки в профилях Verizon.
  2. ошибка проверки: параметр DeliveryRuleAction.name не может иметь значение None.
  3. az cdn endpoint rule add: error: необходимы следующие аргументы: --order, --rule-name, --action-name

Любая помощь очень ценится... Я все равно буду биться головой об эту стену и опубликую, если я с этим справлюсь.

ОБНОВЛЕНИЕ: за то, что не хочу заявлять очевидное, с ошибкой № 1 выше, если я удалю --name параметр (как следует из ошибки), вместо этого я получаю следующую ошибку:

(--name | --ids) are required

ОБНОВЛЕНИЕ 2: на следующей странице справки Azure предлагаетсяaz cdn endpoint rule action add правильно, но все равно не работает (дает загадочную ошибку, как показано ниже).

Выполнение команды завершилось непредвиденной ошибкой. Вот трассировка:

'NoneType' object has no attribute 'rules'
Traceback (most recent call last):
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\knack\knack\cli.py", line 215, in invoke
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 631, in execute
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 695, in _run_jobs_serially
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 688, in _run_job
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\six\six.py", line 703, in reraise
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 665, in _run_job
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\commands\__init__.py", line 324, in __call__
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli-core\azure\cli\core\__init__.py", line 574, in default_command_handler
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-7cl6xofh\azure-cli\azure\cli\command_modules\cdn\custom.py", line 396, in add_action
AttributeError: 'NoneType' object has no attribute 'rules'

2 ответа

Я также получаю первую ошибку. Ошибки 2 и 3 можно довольно легко решить, например:--action-name CacheExpiration --order
0
--rule-name global \

Моя проблема по-прежнему заключается в параметре --name, который Azure Cli не принимает для Verizon Sku. Это странно, поскольку имя конечной точки необходимо для установки правила кэширования для конечной точки.

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

Кроме того, вам нужно получить определенные строки, например --operator, --match-variable, а также --selector точно так же, как и в ваших отладочных выводах, иначе вы получите бесполезную ошибку.

Надеюсь это поможет.

Другие вопросы по тегам