Какова правильная команда 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, которые я хочу создать.
- Первое правило HTTP позволяет нашему Angular одностраничному приложению "SPA" работать там, где навигационные щелчки, которые изменяют URL-адрес, не перезагружаются и не уходят со страницы.
- Второе правило HTTP ограничивает маршрутизацию HTTP-трафика на HTTPS.
- Третье правило 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 ошибки (пронумерованные согласно правилу):
- BadRequest - Имя должно быть оставлено пустым для правил доставки в профилях Verizon.
- ошибка проверки: параметр DeliveryRuleAction.name не может иметь значение None.
- 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
точно так же, как и в ваших отладочных выводах, иначе вы получите бесполезную ошибку.
Надеюсь это поможет.