”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 将 Azure Functions 部署到 Azure 容器应用程序的两种方法的比较

将 Azure Functions 部署到 Azure 容器应用程序的两种方法的比较

发布于2024-11-07
浏览:516

昨天,我写了一篇题为“在 Azure 容器应用程序上部署 Java Azure Function”的文章。

在那篇文章中,我提到使用 Azure 的集成管理功能,我想澄清这意味着什么以及它与本文中以前的方法有何不同。

旧方法:使用 az containerapp create 创建

Azure 容器应用程序是 Azure 的容器执行环境之一,允许你运行任何容器化服务。以前,如果您想在 Azure 容器应用程序中运行 Azure Functions,您可以使用以下命令创建一个实例:

az containerapp create \
--name general-container-app \
--resource-group $RESOURCE_GROUP_NAME \
--environment $CONTAINER_ENVIRONMENT \
--registry-server $CONTAINER_REGISTRY_SERVER \
--image $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG \
--target-port 80 \
--ingress external \
--query properties.configuration.ingress.fqdn

执行命令后,您将看到如下消息:

Container app created. Access your app at https://general-container-app.niceocean-********.eastus.azurecontainerapps.io/

然后您可以使用curl命令连接到您的Azure Functions服务:

curl https://general-container-app.niceocean-********.eastus.azurecontainerapps.io/api/httpexample?name=World

访问Azure容器应用程序环境后,您将看到general-container-app被创建为容器应用程序,并且此管理界面可用于任何已部署的容器化应用程序。

Comparison of Two Methods for Deploying Azure Functions to Azure Container Apps

https://raw.githubusercontent.com/yoshioterada/Azure-Functions-Deploy-To-Azure-Container-Apps/main/images/ACA-Instance-for-Azure-Functions.png

新方法:使用 az functionapp create 创建

新方法允许您使用 az functionapp create 命令而不是 az containerapp create 在 Azure 容器应用中创建 Azure Functions。

az functionapp create \
--name $AZURE_FUNCTION_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--environment $CONTAINER_ENVIRONMENT \
--storage-account $STORAGE_NAME \
--workload-profile-name "Consumption" \
--max-replicas 15 \
--min-replicas 1 \
--functions-version 4 \
--runtime java \
--image $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG \
--assign-identity

通过此命令,您的Azure Functions将在Azure Container Apps中创建,并且管理界面将清楚地显示它是一个Function App。

Comparison of Two Methods for Deploying Azure Functions to Azure Container Apps

这意味着现在可以通过专用的 Azure Functions 管理界面来管理 Azure Functions,这使其与其他容器应用程序有所不同。

但是,Azure 应用服务中提供的管理功能与容器应用上的 Azure Functions 提供的管理功能之间存在一些差异。例如,诊断工具、部署功能等某些功能可能不可用。

Comparison of Two Methods for Deploying Azure Functions to Azure Container Apps

参考:应用服务上的 Azure Functions(门户)

为了进行比较,这里是部署在 Azure 应用服务上的 Azure Functions 的管理界面。

Comparison of Two Methods for Deploying Azure Functions to Azure Container Apps

应用服务和 Azure 容器应用程序之间的管理功能差异可能包括:

Comparison of Two Methods for Deploying Azure Functions to Azure Container Apps

  • 捡起:
- Diagnose and solve problems
- Microsoft Defender for Cloud
- Events (preview)
- Log stream
- Deployment
- App Service plan
- Development Tools
- Monitoring
- Support   troubleshooting

有些人可能认为缺少某些功能意味着缺少功能。

但是,部署到Azure Container Apps时,运行环境是基于容器的,这就改变了部署和管理方式。 Azure Functions 管理界面中未包含的功能需要通过 Azure 容器应用界面单独管理。

Azure 容器应用程序中容器的管理

使用 az functionapp create 命令在 Azure 容器应用上创建 Azure Functions 实例时,会自动创建一个新的资源组来容纳该容器实例。

Comparison of Two Methods for Deploying Azure Functions to Azure Container Apps

在我的环境中,资源组名称遵循以下约定:

$CONTAINER_ENVIRONMENT_FunctionApps_$UUID

您将看到已生成以您指定的 $AZURE_FUNCTION_NAME 命名的 Azure 容器应用实例。

当您单击此实例时,您将被定向到特定于 Azure 容器应用程序的管理界面,其中 Azure Functions 作为容器实例运行。

Comparison of Two Methods for Deploying Azure Functions to Azure Container Apps

Azure 容器应用提供了与 Azure 应用服务不同的 CI/CD 和部署方法。它还允许在容器级别提供功能,例如可以利用的 Dapr 和 Service Connector。

结论

以前,可以通过将 Azure Functions 容器化在容器执行环境中来运行 Azure Functions,但 Azure Functions 没有专用的管理界面。

通过这种新方法,Azure Functions 和 Azure 容器应用程序已集成,提供具有关联的 Azure Functions 管理界面的容器环境。

我知道一些客户在 Azure Kubernetes 服务 (AKS) 上运行 Azure Functions 容器。以前,他们缺乏专门的管理界面。但是,通过部署到 Azure 容器应用程序,他们现在可以使用 Azure Functions 管理,同时享受与管理 AKS 上的操作相比管理 Azure 容器应用程序的简单性。

将 Azure Functions 部署到 Azure 容器应用程序的方法可能会进一步发展。我期待看到事情如何发展。

版本声明 本文转载于:https://dev.to/azure/comparison-of-two-methods-for-deploying-azure-functions-to-azure-container-apps-2o7o?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确...
    编程 发布于2025-04-27
  • PHP SimpleXML解析带命名空间冒号的XML方法
    PHP SimpleXML解析带命名空间冒号的XML方法
    在php 很少,请使用该限制很大,很少有很高。例如:这种技术可确保可以通过遍历XML树和使用儿童()方法()方法的XML树和切换名称空间来访问名称空间内的元素。
    编程 发布于2025-04-27
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-27
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-04-27
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“检测”中的错误:在功能检测中。”当Face Cascade分类器(即面部检测至关重要的组件)未正确加载时,通常会出现此错误。要解决此问题,必须...
    编程 发布于2025-04-27
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-04-27
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-04-27
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-04-27
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 中删除一个频繁的问题时,在与Chrome and IE9中的图像一起工作时,遇到了一个频繁的问题。和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下CSS ID块创建带...
    编程 发布于2025-04-27
  • 在Java中如何为PNG文件添加坐标轴和标签?
    在Java中如何为PNG文件添加坐标轴和标签?
    如何用java 在现有png映像中添加轴和标签的axes和labels如何注释png文件可能具有挑战性。与其尝试可能导致错误和不一致的修改,不如建议在图表创建过程中集成注释。使用JFReechArt import java.awt.color; 导入java.awt.eventqueue; 导入...
    编程 发布于2025-04-27
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-04-27
  • 在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    Accessing Actual Rendered Font when Undefined in CSSWhen accessing the font properties of an element, the JavaScript object.style.fontFamily and objec...
    编程 发布于2025-04-27
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-04-27
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-04-27
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-04-27

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3