我正在尝试创建一个 shell 脚本,以使用 az CLI 自动为 Azure 容器应用程序的自定义域创建托管证书。
我遇到的问题与 az CLI 命令将现有证书绑定到现有自定义域时抛出的错误有关,该错误特别指出容器应用程序环境中不存在具有指定名称的证书。
我的下一步是使用以下命令添加自定义域:
az containerapp hostname add -n $CONTAINER_APP_NAME -g $RESOURCE_GROUP --hostname $CUSTOM_DOMAIN --output none
在 CA 环境中创建证书并获取其名称:
az containerapp env certificate create -g $RESOURCE_GROUP -n $CONTAINER_APP_ENV_NAME --hostname $CUSTOM_DOMAIN --validation-method CNAME --query "name" --output tsv
最后将证书与主机名绑定,指定之前获得的证书名称。
az containerapp hostname bind -g $RESOURCE_GROUP -n $CONTAINER_APP_NAME --hostname $CUSTOM_DOMAIN --environment $CONTAINER_APP_ENV_NAME --certificate $MANAGED_CERTIFICATE_NAME --validation-method CNAME --output none
最后一个命令终止并出现错误,指出指定环境中不存在具有给定名称的证书。
我已经使用 Azure Portal 创建了容器应用程序环境
HelloWold-Env
和容器应用程序 helloworld
;另外,在执行最后一个命令之前,我尝试使用以下命令列出容器应用程序环境中存在的所有证书:
az containerapp env certificate list -g $RESOURCE_GROUP -n $CONTAINER_APP_ENV_NAME --managed-certificates-only --output tsv
它实际上显示了已创建并成功配置的证书,我检查了使用此命令获得的名称以及创建命令后返回的名称,它们是否匹配,并在 Azure 门户上验证了所有这些。
有人可以帮忙吗?这可能是 CLI 实现中的一个错误吗? 我考虑过直接使用 REST API 调用来实现一个解决方案,但在深入研究之前,我想了解我是否遗漏了一些明显的东西。
感谢 @Arko 评论,我尝试进一步检查证书的状态,发现它实际上已经正确配置(状态
Succeded
),但 bind
命令仍然给了我同样的错误。
在
az containerapp hostname bind
命令中指定证书时,我通过使用证书的资源 ID(而不是其名称)解决了我的问题。
为了获取资源 ID,我修改了 az containerapp env certificate create
命令的查询,查询“id”而不是名称:
az containerapp env certificate create -g $RESOURCE_GROUP -n $CONTAINER_APP_ENV_NAME --hostname $CUSTOM_DOMAIN --validation-method CNAME --query "id" --output tsv
我不知道问题的根源,但我认为这可能与我的帐户配置以及我的帐户对我创建的资源的权限有关,因为这些权限是由我的大学管理的。