在 Azure 容器应用中管理修订和机密
Azure 容器应用通过创建修订来实现容器应用版本控制。 修订是容器应用版本的不可变快照。 可以使用修订发布新版本的应用,或快速还原到应用的早期版本。 使用修订范围更改更新应用程序时,会创建新的修订。 还可以根据特定修订更新容器应用。
可以控制哪些修订处于活动状态,以及路由到每个活动修订的外部流量。 修订名称用于标识修订,位于修订的 URL 中。 可以通过设置修订后缀来自定义修订名称。
默认情况下,容器应用会创建唯一的修订名称,后缀由字母数字字符的半随机字符串组成。 例如,对于名为 album-api 的容器应用,将修订后缀名称设置为 1st-revision 会创建一个名为 album-api--1st-修订。 可以通过 Azure CLI az containerapp create
和 az containerapp update
命令,或者在通过 Azure 门户创建修订时,在 ARM 模板中设置修订后缀。
更新容器应用
使用 az containerapp update
命令,可以修改环境变量、计算资源、缩放参数和部署其他映像。 如果容器应用更新包含修订范围更改,则生成新的修订。
az containerapp update \
--name <APPLICATION_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--image <IMAGE_NAME>
可以使用 az containerapp revision list
命令列出与容器应用关联的所有修订。
az containerapp revision list \
--name <APPLICATION_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
-o table
有关容器应用命令的详细信息,请访问 az containerapp
参考。
在 Azure 容器应用中管理机密
凭借 Azure 容器应用,应用程序可以安全地存储敏感配置值。 一旦在应用程序级别定义了机密,容器应用就可以使用安全值。 具体来说,可以在缩放规则中引用安全值。
- 机密的范围仅限于某一应用程序,在应用程序的任何特定修订之外。
- 添加、删除或更改机密不会生成新修订。
- 每种应用程序修订都可以引用一个或多个机密。
- 多个修订可以引用相同的机密。
已更新或删除的机密不会自动影响应用中的现有修订。 如果更新或删除了机密,可以通过以下两种方式之一对更改进行响应:
- 部署新修订。
- 重启现有修订。
删除机密之前,请部署不再引用旧密码的新修订。 然后停用引用机密的所有修订。
注意
容器应用不支持 Azure Key Vault 集成。 相反,请在容器应用中启用托管标识,并在应用中使用 Key Vault SDK 来访问机密。
定义机密
创建容器应用时,将使用 --secrets
参数来定义机密。
- 参数接受以空格分隔的名称/值对的集合。
- 每个对都由等于号 (
=
) 分隔。
在以下示例中,--secrets
参数中声明了用于连接队列存储帐户的连接字符串。 队列链接字符串的值来自名为 $CONNECTION_STRING
的环境变量。
az containerapp create \
--resource-group "my-resource-group" \
--name queuereader \
--environment "my-environment-name" \
--image demos/queuereader:v1 \
--secrets "queue-connection-string=$CONNECTION_STRING"
在应用程序级别声明机密后,可以在容器应用中创建新修订时在环境变量中引用这些机密。 当环境变量引用机密时,将使用机密中定义的值进行填充。 若要通过 Azure CLI 在环境变量中引用机密,请将其值设置为 secretref:
,后跟机密的名称。
下面的示例显示了一个应用程序,该应用程序在应用程序级声明连接字符串。 此连接在容器环境变量中引用。
az containerapp create \
--resource-group "my-resource-group" \
--name myQueueApp \
--environment "my-environment-name" \
--image demos/myQueueApp:v1 \
--secrets "queue-connection-string=$CONNECTIONSTRING" \
--env-vars "QueueName=myqueue" "ConnectionString=secretref:queue-connection-string"