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

作者:Frank Boucher
排版:Alan Wang

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

string openAIEndpoint = "https://";
string openAIDeploymentName = "my-ai-model";
string openAiKey = "123456abcd789EFGH";
// ...

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

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

准备工作

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

// 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。

function Set-DotnetUserSecrets {param ($path, $lines)Push-Locationcd $pathdotnet user-secrets initdotnet user-secrets clearforeach ($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 资源类型的架构。这是它的样子。

hooks:postprovision:windows:shell: pwshrun: ./infra/post-script/postprovision.ps1interactive: truecontinueOnError: true

部署

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

请使用命令 dotnet user-secrets list 测试是否已创建 secrets。
在这里插入图片描述

使用密钥

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

// == 检索 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 提供的示例。

参考文献

  • 所有代码来自示例 HikerAI fboucher/hikerai
  • Azure Developer CLI
  • 开发中的 APP 密钥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/290849.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用vue2实现在线创建组件的功能

前言 我们使用vue2构建了一个项目&#xff0c;项目有个需求&#xff1a;用户可以在线创建vue组件&#xff0c;创建后的组件可以动态编译&#xff0c;项目无需重新部署&#xff0c;就可以在表单等位置引入使用组件。 实现记录 引用vue的esm包 项目中引入vue的代码&#xff0…

【Roadmap to learn LLM】Large Language Models in Five Formulas

by Alexander Rush Our hope: reasoning about LLMs Our Issue 文章目录 Perpexity(Generation)Attention(Memory)GEMM(Efficiency)用矩阵乘法说明GPU的工作原理 Chinchilla(Scaling)RASP(Reasoning)结论参考资料 the five formulas perpexity —— generationattention —— m…

电脑分辨率怎么调,电脑分辨率怎么调整

随着电脑的普及以及网络的发展&#xff0c;我们现在在工作中都离不开对电脑的使用&#xff0c;今天小编教大家设置电脑分辨率&#xff0c;现在我们先了解这个分辨率是什么?通常电脑的显示分辨率就是屏幕分辨率&#xff0c;显示屏大小固定时&#xff0c;显示分辨率越高图像越清…

数据可视化为什么能在智慧港口中发挥作用?

随着全球贸易活动日益频繁&#xff0c;港口作为国际贸易的重要节点&#xff0c;其运营效率与智能化程度直接影响着整个物流链的效能。在此背景下&#xff0c;智慧港口的概念应运而生&#xff0c;它借助先进的信息技术手段对传统港口进行改造升级&#xff0c;其中&#xff0c;数…

【AIGC】如何在Windows/Linux上部署stable diffusion

文章目录 整体安装步骤windows10安装stable diffusion环境要求安装步骤注意事项参考博客其他事项安装显卡驱动安装cuda卸载cuda安装对应版本pytorch安装git上的python包Q&A linux安装stable diffusion安装anaconda安装cudagit 加速配置虚拟环境挂载oss&#xff08;optional…

Spring Aop 源码解析(下)

ProxyFactory选择cglib或jdk动态代理原理 ProxyFactory在生成代理对象之前需要决定到底是使用JDK动态代理还是CGLIB技术: config就是ProxyFactory对象,把自己传进来了,因为ProxyFactory继承了很多类,其中一个父类就是ProxyConfig // config就是ProxyFactory对象// 是不是…

02正式学习第一天

1、windows上加载socket库 链接输入ws2_32.lib 代码code&#xff1a; #ifdef _WIN32 #include<windows.h> #else #include <sys/socket.h> #include<sys/types.h> #include<unistd.h> #include<cstring> #include<arpa/inet.h> #include…

【Java】LinkedList模拟实现

目录 整体框架IMyLinkedList接口IndexNotLegalException异常类MyLinkedList类成员变量(节点信息)addFirst(头插)addLast(尾插)在指定位置插入数据判断是否存在移除第一个相等的节点移除所有相等的节点链表的长度打印链表释放回收链表 整体框架 IMyLinkedList接口 这个接口用来…

WPF 路由事件 数据驱动 、Window 事件驱动

消息层层传递&#xff0c;遇到安装有事件侦听器的对象&#xff0c;通过事件处理器响应事件&#xff0c;并决定事件是否继续传递&#xff1b; 后置代码中使用AddHandler方法设置事件监听器&#xff0c;该方法的 第一个参数是指定监听的路由事件类型对象&#xff0c; 第二个参数…

微服务demo(四)nacosfeigngateway

一、gateway使用&#xff1a; 1、集成方法 1.1、pom依赖&#xff1a; 建议&#xff1a;gateway模块的pom不要去继承父工程的pom&#xff0c;父工程的pom依赖太多&#xff0c;极大可能会导致运行报错&#xff0c;新建gateway子工程后&#xff0c;pom父类就采用默认的spring-b…

CSS之动画

一&#xff0c;动画的制作 实现盒子绕圈走 二&#xff0c; 动画的常用属性 三&#xff0c;动画简写属性 前面两个属性一定要写&#xff0c;第三个linear是指匀速的意思&#xff08;默认是ease&#xff09;

【快速解决】解决谷歌自动更新的问题,禁止谷歌自动更新,如何防止chrome自动升级 chrome浏览器禁止自动升级设置方法

目录 问题描述 解决方法 1、搜索栏搜索控制面板 2、搜索&#xff1a;服务 ​编辑 3、点击Windows工具 4、点击服务 ​5、禁止谷歌更新 问题描述 由于我现在需要装一个谷歌的驱动系统&#xff0c;但是目前的谷歌驱动系统的版本都太旧了&#xff0c;谷歌自身的版本又太新了…

手写简易操作系统(十五)--实现内核线程

前情提要 前面我们实现了内存管理系统&#xff0c;内存管理系统可以实现进程与进程之间的隔离。 Linux中高1GB是操作系统内核的地址&#xff0c;低3GB是用户的地址&#xff0c;高1GB对于所有用户都是一致的&#xff0c;低3GB才是用户自己的自留地。 既然已经实现了内存管理&…

[flink 实时流基础] flink组件栈以及任务执行与资源划分

文章目录 7. Flink组件栈1. 部署层&#xff08;1&#xff09;Local模式&#xff08;2&#xff09;Cluster模式&#xff08;3&#xff09;Cloud模式 2.运行时3.API层4. 上层工具 8. 任务执行与资源划分1. 再谈逻辑视图到物理执行图2. 任务、算子子任务与算子链3. Slot与计算资源…

Linux文件IO(2):使用标准IO进行文件的打开、关闭、读写、流定位等相关操作

目录 前言 文件的打开和关闭的概念 文件的打开 文件的打开函数 文件打开的模式 文件的关闭 文件的关闭函数 注意事项 字符的输入&#xff08;读单个字符&#xff09; 字符输入的函数 注意事项 字符的输出&#xff08;写单个字符&#xff09; 字符输出的函数 注意…

Git版本管理使用手册 - 8 - 合并分支、解决冲突

合并整个开发分支 切换到本地test分支&#xff0c;选择右下角远程开发分支&#xff0c;选择Merge into Current。然后提交到远程test仓库。 合并某次提交的代码 当前工作区切换成test分支&#xff0c;选择远程仓库中的dev开发分支&#xff0c;选择需要合并的提交版本右击&a…

HarmonyOS实战开发-实现Ability内页面间的跳转和数据传递。

介绍 本篇Codelab基于Stage模型下的Ability开发&#xff0c;实现Ability内页面间的跳转和数据传递。 最终效果图如下&#xff1a; 相关概念 页面路由&#xff1a;提供通过不同的url访问不同的页面&#xff0c;包括跳转到应用内的指定页面、用应用内的某个页面替换当前页面、…

网络七层模型之物理层:理解网络通信的架构(一)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

企业数据资产管理的战略价值与实施策略

一、引言 数据资产不仅记录了企业的历史运营情况&#xff0c;更能够揭示市场的未来趋势&#xff0c;为企业的决策提供有力支持。因此&#xff0c;如何有效地管理和利用数据资产&#xff0c;已经成为企业竞争力的重要体现。本文将探讨企业数据资产管理的战略价值与实施策略&…

【Java多线程】3——Lock API控制多线程

3 Lock API控制多线程 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个…