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

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

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

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

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

@ Christopher Cabezudo Rodriguez имеет bruteforced , как получить это значение, но это не помогает при попытке настроить это с помощью CLI.

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

  1. Первое правило HTTP позволяет нашему Angular одностраничному приложению «SPA» работать там, где навигационные щелчки, изменяющие URL-адрес, не перезагружаются и не уходят со страницы.
  2. Второе правило HTTP ограничивает c 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 В Rules Engine они будут выглядеть так:

enter image description here

Я наполовину собрал вместе свое лучшее предположение о том, что мне может понадобиться в качестве команд 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 - Name должно быть оставлено пустым для правил доставки в профилях 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 правильно, но все равно не работает (выдает ошибку crypti c, как показано ниже) .

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

'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'

1 Ответ

0 голосов
/ 24 июня 2020

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

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

...