从 Azure 部署生成本地 .NET 密钥

作者:Frank Boucher

排版:Alan Wang

通常,示例项目以一些"魔术字符串"开始,这些变量包含与部署或外部资源相关的 URL 和关键信息,我们必须更改这些信息才能使用示例。例如在 .NET 中,它可能如下所示:

csharp 复制代码
string openAIEndpoint = "https://";
string openAIDeploymentName = "my-ai-model";
string openAiKey = "123456abcd789EFGH";
// ...

本文展示了如何从 Azure 部署自动生成 .NET 密钥以及您的 .NET 应用程序如何读取这些密钥。用户想要尝试使用您的示例时,将不必再编辑任何内容!他们只需使用 azd up 进行部署,然后使用 dotnet run 来执行应用程序。听起来很有趣?下面就来实现一下。

整个项目的代码可以在 GitHub 上的 fboucher/hikerai 中找到。

准备工作

Bicep 是一种为要部署的 Azure 资源创建基础结构定义的语言。由于这些资源将包含端点或模型名称等信息,因此我们需要一种导出这些信息的方法,在 Bicep 中我们使用输出语法:

csharp 复制代码
// some bicep deployment...

output AZURE_OPENAI_ENDPOINT string = ai.outputs.AZURE_OPENAI_ENDPOINT
output AZURE_OPENAI_GPT_NAME string = ai.outputs.AZURE_OPENAI_GPT_NAME
output AZURE_OPENAI_KEY string = ai.outputs.AZURE_OPENAI_KEY

使用 Azure Developer CLI(azd)命令 azd env get-values 返回键对值列表中的所有这些值。PowerShell 或 Bash 脚本可以读取这些内容并使用命令 dotnet user-secrets set 创建新的 .NET secrets。这里是脚本 postprovision.ps1。

csharp 复制代码
function Set-DotnetUserSecrets {
    param ($path, $lines)
    Push-Location
    cd $path
    dotnet user-secrets init
    dotnet user-secrets clear
    foreach ($line in $lines) {
        $name, $value = $line -split '='
        $value = $value -replace '"', ''
        $name = $name -replace '__', ':'
        if ($value -ne '') {
            dotnet user-secrets set $name $value | Out-Null
        }
    }
    Pop-Location
}

$lines = (azd env get-values) -split "`n"
Set-DotnetUserSecrets -path "." -lines $lines

该脚本首先创建一个函数 Set-DotnetUserSecrets,它有两个参数。第一个参数 path 用于将脚本目录更改到该位置。这是确保在需要时创建密钥的关键步骤。第二个参数 lines 包含所有保存键对值的子字符串(例如:VARIABLE_NAME="variable_value")。该脚本循环遍历所有行以分隔名称和值,并为每行创建一个密钥 dotnet user-secrets set name value。

在最后两行,脚本使用 azd env get-values 检索输出生成的环境变量,并将结果拆分为子字符串。它最终将调用之前声明的函数 Set-DotnetUserSecrets 并传递路径和行。存储库中还提供了该脚本的 postprovision.sh 版本。

为了在部署后执行脚本,我们需要在 azure.yaml 文件中添加一个后配置钩子。azure.yaml 是定义和描述项目中包含的应用程序和 Azure 资源类型的架构。这是它的样子。

csharp 复制代码
hooks:
  postprovision:
    windows:
      shell: pwsh
      run: ./infra/post-script/postprovision.ps1
      interactive: true
      continueOnError: true

部署

使用 Azure CLI Developer CLI 命令 azd up 执行部署。您可以使用 fboucher/hikerai 上提供的 HikerAI 代码。克隆或下载存储库后,请确保位于根目录以部署解决方案。

请使用命令 dotnet user-secrets list 测试是否已创建 secrets。

使用密钥

使用 NuGet 包 Microsoft.Extensions.Configuration,应用程序将能够读取用户密钥。您现在可以更换这些神奇的字符串。

csharp 复制代码
// == 检索 Azure 部署期间保存的本地密钥==========
using Microsoft.Extensions.Configuration;

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string openAIEndpoint = config["AZURE_OPENAI_ENDPOINT"];
string openAIDeploymentName = config["AZURE_OPENAI_GPT_NAME"];
string openAiKey = config["AZURE_OPENAI_KEY"];

视频

https://www.youtube.com/watch?v=NpE7edalTlQ

总结

本文分享了一些使用从 Azure 部署输出自动生成的用户密钥替换"魔术字符串"的技巧。您可以在您的解决方案中尝试使用它们,或者使用 HikerAI 文件夹中的 fboucher/hikerai 提供的示例。

参考文献

相关推荐
小清兔4 小时前
c#基础知识
开发语言·数据库·学习·unity·c#·游戏引擎·.net
MicrosoftReactor6 小时前
技术速递|使用 AI 应用模板扩展创建一个 .NET AI 应用与自定义数据进行对话
人工智能·.net
weixin_456904279 小时前
C# .NET Framework 4.0 网络编程完全指南
网络·c#·.net
许泽宇的技术分享12 小时前
当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式
数据库·.net·text2sql·mcp
界面开发小八哥13 小时前
.NET表格控件Spread .NET v18.0——支持富文本、增强PDF导出
信息可视化·pdf·.net·数据可视化·spread .net
百锦再17 小时前
.NET + Vue 基于 WebSocket 的聊天室全面实现
vue.js·websocket·rabbitmq·.net·chat·message
专注VB编程开发20年19 小时前
.NET组件读取压缩包中的内存数据电子表格XLSX文件和图片,不需要解压
linux·服务器·windows·c#·.net·excel·zip
追逐时光者1 天前
精选 2 款 .NET 开源、实用的缓存框架,帮助开发者更轻松地处理系统缓存!
后端·.net
404Clukay1 天前
在VSCode中配置.NET项目的tasks.json以实现清理、构建、热重载和发布等操作
vscode·json·.net
时光追逐者2 天前
C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
c#·.net·.netcore·.net core