教程:在 Azure 容器应用中连接到 Azure Cache for Redis(预览版)
通过 Azure 容器应用,如果支持你的应用的服务在容器应用所在的同一环境中运行,你可连接到这些服务。
在处于开发期间时,你的应用程序可快速创建并连接到开发服务。 这些服务易于创建,是专为非生产环境设计的开发级服务。
在迁移到生产环境时,应用程序可连接生产级托管服务。
本教程介绍如何将开发级和生产级 Azure Cache for Redis 服务连接到容器应用。
在本教程中,学习:
- 创建新的 Redis 开发服务
- 将容器应用连接到 Redis 开发服务
- 断开服务与应用程序的连接
- 检查运行内存中缓存的服务
先决条件
资源 | 说明 |
---|---|
Azure 帐户 | 需要一个有效的订阅。 如果没有帐户,可以免费创建一个帐户。 |
Azure CLI | 安装 Azure CLI(如果未在计算机上安装)。 |
Azure 资源组 | 在“中国东部”区域创建名为 my-services-resource-group 的资源组。 |
用于 Redis 的 Azure 缓存 | 在 my-services-resource-group 中创建 Azure Cache for Redis 的实例。 |
设置
登录 Azure CLI。
az cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
升级容器应用 CLI 扩展。
az extension add --name containerapp --upgrade
注册
Microsoft.App
命名空间。az provider register --namespace Microsoft.App
注册
Microsoft.ServiceLinker
命名空间。az provider register --namespace Microsoft.ServiceLinker
设置资源组变量。
RESOURCE_GROUP="my-services-resource-group"
为 Azure Cache for Redis DNS 名称创建一个变量。
要显示 Azure Cache for Redis 实例列表,请运行以下命令。
az redis list --resource-group "$RESOURCE_GROUP" --query "[].name" -o table
创建一个变量来放置环境名称。
将
<MY_ENVIRONMENT_NAME>
替换为容器应用环境的名称。ENVIRONMENT=<MY_ENVIRONMENT_NAME>
设置位置变量。
LOCATION="chinanorth3"
创建新环境。
az containerapp env create \ --location "$LOCATION" \ --resource-group "$RESOURCE_GROUP" \ --name "$ENVIRONMENT"
配置 CLI 并创建环境后,现在可以创建应用程序和开发服务了。
创建开发服务
示例应用程序会管理内存中或 Redis 缓存中的一组字符串。
创建 Redis 开发服务并将其命名为 myredis
。
az containerapp add-on redis create \
--name myredis \
--resource-group "$RESOURCE_GROUP" \
--environment "$ENVIRONMENT"
创建容器应用
接下来,创建可访问 Internet 的容器应用。
创建新的容器应用并将其绑定到 Redis 服务。
az containerapp create \ --name myapp \ --image mcr.microsoft.com/k8se/samples/sample-service-redis:latest \ --ingress external \ --target-port 8080 \ --bind myredis \ --environment "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --query properties.configuration.ingress.fqdn
此命令会返回完全限定的域名 (FQDN)。 将此位置粘贴到 Web 浏览器中,以便在本教程中检查应用程序的行为。
containerapp create
命令使用--bind
选项在容器应用与 Redis 开发服务之间创建链接。绑定请求会收集连接信息(包括凭据和连接字符串),并将其作为环境变量注入应用程序。 这些值现在可供应用程序代码使用,以便创建与服务的连接。
在这种情况下,应用程序可使用以下环境变量:
REDIS_ENDPOINT=myredis:6379 REDIS_HOST=myredis REDIS_PASSWORD=... REDIS_PORT=6379
如果通过浏览器访问应用程序,可以在 Redis 数据库中添加和移除字符串。 Redis 缓存负责存储应用程序数据,因此即使在缩放为零后重启应用程序后,数据也可用。
还可从应用程序中移除绑定。
取消绑定 Redis 开发服务。
若要从容器应用中移除绑定,请使用
--unbind
选项。az containerapp update \ --name myapp \ --unbind myredis \ --resource-group "$RESOURCE_GROUP"
编写应用程序,使得在未定义环境变量的情况下,将文本字符串存储在内存中。
在此状态下,如果应用程序缩放为零,数据将丢失。
可返回到 Web 浏览器并刷新 Web 应用程序来验证此更改。 现在可以看到,显示的配置信息指示数据存储在内存中。
现在可以将应用程序重新绑定到 Redis 服务,来查看之前存储的数据。
重新绑定 Redis 开发服务。
az containerapp update \ --name myapp \ --bind myredis \ --resource-group "$RESOURCE_GROUP"
重新连接服务后,可刷新 Web 应用程序来查看存储在 Redis 中的数据。
连接到托管服务
当应用程序准备好迁移到生产环境后,可以将应用程序绑定到托管服务而不是开发服务。
以下步骤将应用程序绑定到 Azure Cache for Redis 的现有实例。
为你的 DNS 名称创建变量。
请确保将
<YOUR_DNS_NAME>
替换为 Azure Cache for Redis 实例的 DNS 名称。AZURE_REDIS_DNS_NAME=<YOUR_DNS_NAME>
绑定到 Azure Cache for Redis。
az containerapp update \ --name myapp \ --unbind myredis \ --bind "$AZURE_REDIS_DNS_NAME" \ --resource-group "$RESOURCE_GROUP"
此命令在移除开发绑定的同时建立与生产级托管服务的绑定。
返回到浏览器并刷新页面。
控制台会打印出如下例所示的值。
AZURE_REDIS_DATABASE=0 AZURE_REDIS_HOST=azureRedis.redis.cache.chinacloudapi.cn AZURE_REDIS_PASSWORD=il6HI... AZURE_REDIS_PORT=6380 AZURE_REDIS_SSL=true
现在当你添加新字符串时,值将存储在 Azure Cache for Redis 实例中而不是开发服务中。
清理资源
如果不打算继续使用本教程中创建的资源,可以删除应用程序和 Redis 服务。
应用程序和服务是独立的。 这种独立性意味着服务可以连接到环境中的任意数量的应用程序,并且在显式删除之前一直存在,即使与所有应用程序都断开连接也是如此。
运行以下命令来删除容器应用和开发服务。
az containerapp delete --name myapp
az containerapp add-on redis delete --name myredis
或者,可删除资源组来移除容器应用和所有服务。
az group delete \
--resource-group "$RESOURCE_GROUP"