如何将 .NET Aspire 应用程序部署到 Azure Container App

作者:Jiachen Jiang
排版:Alan Wang

最近发布的用于构建云原生应用程序的 .NET Aspire 与 Azure Container App(ACA)非常匹配。.NET Aspire 旨在轻松管理由一系列相互依赖的微服务组成的应用程序。Azure Container App 专为微服务量身定制。它基于云原生技术构建,这意味着 .NET Aspire 可以无缝集成到其中 - 开箱即用!

最重要的是,.NET Aspire 堆栈通过 Azure Developer CLI (AZD)为 ACA 提供定制的部署体验,让您可以使用单个命令为 Aspire 解决方案创建、配置和部署 Azure 资源。

在这篇博文中,我们讨论了在 ACA 中托管应用程序与非托管集群相比的优势。我们还将通过示例代码向您展示如何轻松上手。

为什么选择 Azure Container App?

Azure Container App(ACA)是一个用于运行容器优先应用程序和微服务的平台。它由 Kubernetes 提供支持,但对于普通开发人员来说使用和管理要简单得多。使用 ACA 的团队可以专注于构建应用程序并投入生产,而不必只是为了入门就必须去学习复杂的集群管理。

如果你想要有灵活性并且最大限度地降低成本,这也是一个不错的选择。作为一种无服务器环境,ACA 既提供可扩展到零的按使用付费的消费托管,也提供具有固定价格和可靠性的专用计算托管。凭借对 Dapr 和 KEDA 等开源技术的全面支持,ACA 允许开发人员从更广泛的微服务生态系统中获取最佳实践和工具——所有这些都来自一个平台!

对于希望以最小的开销和复杂性在云端构建应用程序的开发人员来说,这些功能使 ACA 成为一个很好的选择。如果你感兴趣,请继续阅读——我们将通过一些示例代码让您亲自了解将 .NET Aspire 解决方案部署到 ACA 是多么快速和容易。

.NET 8、.NET Aspire 和 AZD 入门

如果您尚未开始使用 .NET Aspire 和 .NET 8,请参阅 .NET Aspire 文档以了解开始开发所需的一切。这将包括安装 Visual Studio(或 Visual Studio Code)、.NET 8、.NET Aspire 工作负载和 Docker Desktop。如果您愿意,您也可以使用 .NET CLI。

创建您的 .NET Aspire 项目

如果您尚未创建 .NET Aspire 项目,请不要担心,因为入门项目是一个很好的起点。在 Visual Studio 中创建一个新的 .NET Aspire Starter Application,并确保选择“Use Redis for caching”,然后就一切就绪。
在这里插入图片描述
您还可以使用以下命令直接从 .NET CLI 创建它:

dotnet new aspire-starter --use-redis-cache --output AspireSample

设置 Azure Developer CLI

Azure Developer CLI(AZD)是一种新的开源工具,可加速 Azure 部署。AZD 不仅允许您使用单个命令为 Aspire 解决方案创建、配置和部署 Azure 资源,它还与 .NET 工具广泛集成,并且可以从 Visual Studio Code 和 Visual Studio 进行访问。

Visual Studio 的发布团队正在大力投资 AZD 的一些功能。我们已经支持基于 AZD 的发布,因此,如果您还没有尝试过 AZD,现在是受益于 AZD 中可重复、可组合的部署功能的好时机。正如您将在本文后面看到的,Aspire 和 AZD 是为彼此构建的,它们共同创建了一种将 .NET Cloud Native 应用程序部署到 ACA 的自动方式,而无需编写任何基础设施代码。

AZD 建立在 Azure CLI 和 Bicep 的基础上。与 ACA 简化 Kubernetes 的方式相同,AZD 通过为 Aspire 解决方案提供智能默认设置来简化部署。如果需要,您可以进一步自定义 AZD 拉入的 Bicep 模板。

您可以使用此文档安装 AZD。

为 ACA 初始化您的项目

现在,让我们为 .NET Aspire 应用程序创建一个 AZD 环境。在同一环境中部署多个应用程序可以让它们相互通信。

请在 /AspireSample/AspireSample.AppHost 中运行以下命令:

azd init

在这里插入图片描述
几秒钟内,AZD 将检测到这是一个 .NET Aspire 应用程序,并建议部署到 ACA。确认并继续。
在这里插入图片描述
AZD 现在显示了 .NET Aspire 解决方案的每个组件。您现在可以选择要公开部署的组件,这意味着它们将对所有互联网流量开放 HTTP 入口。在此入门应用程序中,有一个前端和一个 API。我们希望 Web 前端是公开的,而 API 应该仅对 ACA 环境是私有的。

若要进行该设置,请选择 webfrontend。

最后,我们将设置环境名称 - 例如,dev、prod 和 test。提供环境名称并继续。

然后 AZD 完成应用程序的初始化,并生成一个 markdown 文件,该文件提供有关 CLI 在底层执行的操作的详细信息。

将您的项目部署到 ACA

AZD 允许您在单个步骤中配置和部署解决方案。不过,首先我们需要使用 Azure AD 进行身份验证,以便可以调用 Azure 资源管理 API。

为此,请运行以下命令启动浏览器以验证命令行会话:

azd auth login

现在,我们将配置和部署我们的应用程序:

azd up

然后,系统会要求您提供要部署到的订阅和位置。

注意:如果在运行 azd up 后出现无法调用部署操作的错误,请确保您在注册表中拥有管理员用户。 打开 Azure Portal 并导航到您部署到的订阅。输入容器注册表/设置/访问密钥,然后选中管理员用户复选框。这将生成一个用户名和两个密码,供您访问 ACR 资源。系统将提示您输入用户名和密码。输入 Azure Portal 中显示的值。有关详细信息,请参阅启用管理员用户。

AZD 将生成指向 Web 前端和 API 服务应用程序的链接。终端输出的最后一行包含指向 Azure Portal 页面的链接,该页面显示所有已部署的资源。
在这里插入图片描述
Azure Portal 提供了大量资源来帮助您扩展和了解您的应用程序。不仅有管理成本、性能和安全性的工具,您还可以将应用程序设置为根据传入需求进行扩展。
在这里插入图片描述
就是这样!您可以阅读本文档详细了解 AZD 在配置和部署应用程序方面所做的工作。

下一步

恭喜,您现在可以将 Aspire 应用程序部署到 ACA。现在,您应该对将 Aspire 应用程序部署到 ACA 的优势有了更好的了解。感谢您的阅读!

想了解更多?您可以:

  • 查看 Azure 容器应用文档。

  • 从 Azure 容器应用定价页面了解有关定价详细信息的更多信息。

  • 随时通过我们的 GitHub microsoft/azure-container-apps 存储库直接与我们联系。

  • 在 X 和 Discord 上与 Azure 容器应用团队联系。

注意:此博客最初发布到 Azure 上的应用博客,其中包含完整的演示。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue样式绑定

1. 绑定 HTML class ①通过class名称的bool值判断样式是否被启用 <template><!--通过样式名称是否显示控制样式--><div :class"{ haveBorder: p.isBorder, haveBackground-color: p.isBackgroundcolor }">此处是样式展示区域</div><br /…

消息队列MQ 保证消息不丢失(消息可靠性)

文章目录 概述RabbitMQ 怎么避免消息丢失&#xff08;可靠传输&#xff09;RocketMQ 怎么确保消息不丢失Kafka 怎么保证消息不丢失activeMQ 怎么避免消息丢失MQ 宕机了消息是否会丢失线上服务宕机时&#xff0c;如何保证数据100%不丢失吗&#xff1f;消息队列消息持久化 概述 …

猫头虎分享已解决Bug || SyntaxError: Unexpected token < in JSON at position 0

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Docker本地部署Rss订阅工具并实现公网远程访问

文章目录 1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 Rsshub是一个开源、简单易用、易于扩展的RSS生成器&#xff0c;它可以为各种内容生成RSS订阅源。 Rsshub借助于开源社…

一.CMake的工具安装包的下载

下载 cmake工具 进入cmake官网下载cmake&#xff1a;Download CMake 可以选择最新的Windows x64 installer 的包&#xff08;下载需要科学上网&#xff09;

nginx之web性能location优先级

4.2 event事件 events {worker_connections 65536; #设置单个工作进程的最大并发连接数use epoll;#使用epoll事件驱动&#xff0c;Nginx支持众多的事件驱动&#xff0c;比如:select、poll、epoll&#xff0c;只能设置在events模块中设置。accept_mutex on; #on为同一时刻一个…

【刷题】牛客 JZ64 求1+2+3+...+n

刷题 题目描述思路一 &#xff08;暴力递归版&#xff09;思路二 &#xff08;妙用内存版&#xff09;思路三 &#xff08;快速乘法版&#xff09;思路四 &#xff08;构造巧解版&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01…

Flutter 3.19.0 版本新特性

其实在每个版本的更新中呢&#xff0c;都会合并很多很多的这个合并请求、还有开发建议&#xff0c;那么本版本的也不例外&#xff0c;社区官方发布的公告是合并了168个社区成员的1429个拉请求。 当然&#xff0c;如果你的时间允许的话&#xff0c;你可以去查看一下这些请求&am…

Linux篇:进程

一. 前置知识 1.1冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 为什么计算机要采用冯诺依曼体系呢&#xff1f; 在计算机出现之前有很多人都提出过计算机体系结构&#xff0c;但最…

linux 网络服务小实验

实验图和要求&#xff1a; 1&#xff09;网关服务器&#xff1a;ens36&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.44.254/24&#xff1b;Server1&#xff1a;192.168.44.20/24&#xff1b;PC1和Server2&#xff1a;自动获取IP&#xff1b;交换机无需配置。…

仿慕课网html+css+js特效

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 文件目录内容图片部分代码下载路径 文件目录 –css ----index –images –js ----index.js ----jquery.…

MySQL 查询遇到Illegal mix of collations的错误

业务同学线上业务执行 SQL 时报错&#xff0c; ### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,COERCIBLE) for operation like含义是对like操作非法混合了排序规则(utf8mb4_ge…

汉诺塔问题—java详解(附源码)

来源及应用 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标&#xff1a;把A杆上的金盘全部移到C杆上&#xff0c;并仍…

【人工智能学习思维脉络导图】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 知识图谱1. 基础知识2.人工智能核心概念3.实践与应用4.持续学习与进展5.挑战与自我提升6.人脉网络 知识图谱 人工智能学习思维脉络导图 1. 基础知识 计算机科学基础数学基础&#xff08;线性代数、微积分、概率论和统计学…

PNG图片压缩-UPNG.js参数说明及示例

UPNG.js是一个非常轻量且高效的库&#xff0c;用于处理PNG图像。它可以编码和解码PNG图片&#xff0c;同时支持压缩和解压缩功能。特别适合在前端项目中处理图像&#xff0c;尤其是在需要优化图像大小而不牺牲质量时。 UPNG.encode()函数是UPNG.js中用于将图像数据编码成PNG格…

第三十九天| 62.不同路径、63. 不同路径 II

Leetcode 62.不同路径 题目链接&#xff1a;62 不同路径 题干&#xff1a;一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “…

Android进阶(二十九) 走近 IntentFilter

文章目录 一、什么是IntentFilter &#xff1f;二、IntentFilter 如何过滤隐式意图&#xff1f;2.1 动作测试2.2 类别测试2.3 数据测试 一、什么是IntentFilter &#xff1f; 如果一个 Intent 请求在一片数据上执行一个动作&#xff0c; Android 如何知道哪个应用程序&#xf…

三维测量技术及应用

接触式测量&#xff08;Contact Measurement&#xff09;&#xff1a; 坐标测量机&#xff08;CMM, Coordinate Measuring Machine&#xff09;&#xff1a;通过探针直接接触物体表面获取三维坐标数据。优点是精度高&#xff0c;但速度慢&#xff0c;对软质材料测量效果不佳&am…

JavaScript 设计模式之享元模式

享元 将一部分共用的方法提取出来作为公用的模块 const Car {getName: function () {return this.name},getPrice: function (price) {return price * 30} }const BMW function (name, price) {this.name namethis.price price } BMW.prototype Car const bmw new BMW(…

【嵌入式学习】IO进程线程day02.22

一、思维导图 二、习题 1> 将互斥机制的代码实现 #include <myhead.h>//定义一个全局变量 char str[128]"我是一个全局字符串数组"; //1、创建一个互斥锁变量 pthread_mutex_t mutex;//线程1 void *pth1(void *arg) {//上锁pthread_mutex_lock(&mutex…