在 Azure 容器应用中管理修订和机密

已完成

Azure 容器应用通过创建修订来实现容器应用版本控制。 修订是容器应用版本的不可变快照。 可以使用修订发布新版本的应用,或快速还原到应用的早期版本。 使用修订范围更改更新应用程序时,会创建新的修订。 还可以根据特定修订更新容器应用。

可以控制哪些修订处于活动状态,以及路由到每个活动修订的外部流量。 修订名称用于标识修订,位于修订的 URL 中。 可以通过设置修订后缀来自定义修订名称。

默认情况下,容器应用会创建唯一的修订名称,后缀由字母数字字符的半随机字符串组成。 例如,对于名为 album-api 的容器应用,将修订后缀名称设置为 1st-revision 会创建一个名为 album-api--1st-修订。 可以通过 Azure CLI az containerapp createaz 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 容器应用,应用程序可以安全地存储敏感配置值。 一旦在应用程序级别定义了机密,容器应用就可以使用安全值。 具体来说,可以在缩放规则中引用安全值。

  • 机密的范围仅限于某一应用程序,在应用程序的任何特定修订之外。
  • 添加、删除或更改机密不会生成新修订。
  • 每种应用程序修订都可以引用一个或多个机密。
  • 多个修订可以引用相同的机密。

已更新或删除的机密不会自动影响应用中的现有修订。 如果更新或删除了机密,可以通过以下两种方式之一对更改进行响应:

  1. 部署新修订。
  2. 重启现有修订。

删除机密之前,请部署不再引用旧密码的新修订。 然后停用引用机密的所有修订。

注意

容器应用不支持 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"