1

或者改写另一种方式,有人可以为az cdn endpoint rule add命令的不同参数提供解释吗?

Verizon文档与 Azure CLI 不太匹配。

Verizon 已经从他们的 v3 规则引擎迁移到 v4,虽然它在布局和可用性方面有了巨大的改进,但它仍然没有提供有关特定字段是什么的信息,或者它们如何映射到 Azure CLIaz cdn endpoint rule add命令。

一个问题是新的 v4 接口丢失了带有内部创建的 Verizon Id 的“源”下拉列表。

@Christopher Cabezudo Rodriguez暴力破解了如何获取此值,但在尝试使用 CLI 进行设置时没有帮助。

我有 3 个我想创建的 HTTP 规则。

  1. 第一条 HTTP 规则允许我们的 Angular 单页应用程序“SPA”在更改 URL 地址的导航点击不会重新加载或导航离开页面的情况下工作。
  2. 第二个 HTTP 规则限制 HTTP 流量路由到 HTTPS。
  3. 第三条 HTTP 规则告诉浏览器始终检查 CDN 和缓存之间是否有任何变化。这将确保用户始终下载最新版本的客户端应用程序。

首先,我创建 CDN 和 Endpoint,如下所示:

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”不能为无。
  3. az cdn 端点规则添加:错误:需要以下参数:--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'
4

2 回答 2

0

我也得到第一个错误。错误 2 和 3 可以很容易地解决,例如: --action-name CacheExpiration
--order 0
--rule-name global \

我的问题仍然是 Azure Cli 不接受 Verizon Sku 的 --name 参数。这很奇怪,因为需要端点名称才能在端点上设置缓存规则。

于 2021-01-25T11:34:26.490 回答
0

文档在这方面不是很好 - 我发现运行它很有帮助,debug因为最终新的 CDN 规则需要对所有现有 CDN 规则加上你拥有的规则的 POST 请求。

此外,您必须获得某些字符串,例如--operator, --match-variable,并且--selector与您的调试输出完全一样,否则您会得到一个无用的错误。

希望这可以帮助。

于 2020-06-24T19:29:32.710 回答