教程:在 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 的实例。

设置

  1. 登录 Azure CLI。

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Public Azure.
    
  2. 升级容器应用 CLI 扩展。

    az extension add --name containerapp --upgrade
    
  3. 注册 Microsoft.App 命名空间。

    az provider register --namespace Microsoft.App
    
  4. 注册 Microsoft.ServiceLinker 命名空间。

    az provider register --namespace Microsoft.ServiceLinker
    
  5. 设置资源组变量。

    RESOURCE_GROUP="my-services-resource-group"
    
  6. 为 Azure Cache for Redis DNS 名称创建一个变量。

    要显示 Azure Cache for Redis 实例列表,请运行以下命令。

    az redis list --resource-group "$RESOURCE_GROUP" --query "[].name" -o table
    
  7. 创建一个变量来放置环境名称。

    <MY_ENVIRONMENT_NAME> 替换为容器应用环境的名称。

    ENVIRONMENT=<MY_ENVIRONMENT_NAME>
    
  8. 设置位置变量。

    LOCATION="chinanorth3"
    
  9. 创建新环境。

    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 的容器应用。

  1. 创建新的容器应用并将其绑定到 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 浏览器中,以便在本教程中检查应用程序的行为。

    运行 Redis 缓存服务的容器应用的屏幕截图。

    containerapp create 命令使用 --bind 选项在容器应用与 Redis 开发服务之间创建链接。

    绑定请求会收集连接信息(包括凭据和连接字符串),并将其作为环境变量注入应用程序。 这些值现在可供应用程序代码使用,以便创建与服务的连接。

    在这种情况下,应用程序可使用以下环境变量:

    REDIS_ENDPOINT=myredis:6379
    REDIS_HOST=myredis
    REDIS_PASSWORD=...
    REDIS_PORT=6379
    

    如果通过浏览器访问应用程序,可以在 Redis 数据库中添加和移除字符串。 Redis 缓存负责存储应用程序数据,因此即使在缩放为零后重启应用程序后,数据也可用。

    还可从应用程序中移除绑定。

  2. 取消绑定 Redis 开发服务。

    若要从容器应用中移除绑定,请使用 --unbind 选项。

    az containerapp update \
      --name myapp \
      --unbind myredis \
      --resource-group "$RESOURCE_GROUP"
    

    编写应用程序,使得在未定义环境变量的情况下,将文本字符串存储在内存中。

    在此状态下,如果应用程序缩放为零,数据将丢失。

    可返回到 Web 浏览器并刷新 Web 应用程序来验证此更改。 现在可以看到,显示的配置信息指示数据存储在内存中。

    现在可以将应用程序重新绑定到 Redis 服务,来查看之前存储的数据。

  3. 重新绑定 Redis 开发服务。

    az containerapp update \
      --name myapp \
      --bind myredis \
      --resource-group "$RESOURCE_GROUP"
    

    重新连接服务后,可刷新 Web 应用程序来查看存储在 Redis 中的数据。

连接到托管服务

当应用程序准备好迁移到生产环境后,可以将应用程序绑定到托管服务而不是开发服务。

以下步骤将应用程序绑定到 Azure Cache for Redis 的现有实例。

  1. 为你的 DNS 名称创建变量。

    请确保将 <YOUR_DNS_NAME> 替换为 Azure Cache for Redis 实例的 DNS 名称。

    AZURE_REDIS_DNS_NAME=<YOUR_DNS_NAME>
    
  2. 绑定到 Azure Cache for Redis。

    az containerapp update \
      --name myapp \
      --unbind myredis \
      --bind "$AZURE_REDIS_DNS_NAME" \
      --resource-group "$RESOURCE_GROUP"
    

    此命令在移除开发绑定的同时建立与生产级托管服务的绑定。

  3. 返回到浏览器并刷新页面。

    控制台会打印出如下例所示的值。

    AZURE_REDIS_DATABASE=0
    AZURE_REDIS_HOST=azureRedis.redis.cache.chinacloudapi.cn
    AZURE_REDIS_PASSWORD=il6HI...
    AZURE_REDIS_PORT=6380
    AZURE_REDIS_SSL=true
    

    注意

    用于加载项的环境变量名称和托管服务略有不同。

    若要查看本教程使用的示例代码,请参阅 https://github.com/Azure-Samples/sample-service-redis

    现在当你添加新字符串时,值将存储在 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"

后续步骤