[玩转系统] 设计用于生产的 Azure Function App
作者:精品下载站 日期:2024-12-14 07:14:11 浏览:16 分类:玩电脑
设计用于生产的 Azure Function App
这篇文章是有关 Azure Functions 和 PowerShell 的系列文章的一部分。查看该系列中其他帖子的列表!
介绍
在 Azure 门户中创建 Azure Function 非常简单,只需点击“添加”,选择“函数应用程序”,点击“创建”并填写表单即可。这适用于演示,但它只为我们提供了一个简单的功能应用程序,没有任何自定义。当我想在生产(或类似生产)环境中运行函数应用程序时,我总是倾向于自定义一些内容。
让我们首先简要介绍一下 Function App、一些功能及其依赖项,以便更好地了解我们想要创建的架构。对于前两篇文章,我将专注于设计,而不是讨论如何编写任何脚本。如果您想使用 ARM 模板部署函数应用程序,将会有一篇相关文章,请查看我的本系列中的第一篇文章以获取更新的索引。
标准架构
最简单的形式是,Function App 依赖于应用服务和存储帐户。应用服务提供计算(本质上是CPU和RAM),存储帐户用于存储它应该运行的代码。使用 Azure 门户中的默认配置时,存储帐户还用于存储用于调用我的函数的 API 密钥。这是可行的,但现在当我们谈论生产使用时,我想要定制一些东西。这篇文章将涵盖我通常在任何函数应用程序上自定义的通用内容,无论我稍后打算使用什么语言。
分配托管身份
Azure 中的许多服务都支持托管身份和功能,也不例外。托管标识将为您的代码提供 Azure Active Directory 中的标识,该标识可用于对 Key Vault 等其他 Azure 资源进行身份验证,或者为什么不提供数据库呢?另一个常见场景是使用托管标识向 Azure 资源管理器 API 进行身份验证,以自动管理 Azure 资源。
托管身份可以是用户分配的,也可以是系统分配的。我更喜欢尽可能使用系统分配的托管身份。系统分配的托管身份是使用我的函数应用程序创建的,并在删除我的应用程序时自动清理。它的简洁性吸引了我,它帮助我确保不会在多个应用程序之间重复使用或共享身份。
您可以在文档中阅读有关托管标识和函数的更多信息:如何使用应用服务和 Azure Functions 的托管标识
在 Key Vault 中存储机密
机密应尽可能存储在 Key Vault 中。 Azure 应用服务是 Azure Functions 的基础服务,它与 Azure Key Vault 具有良好的集成。通过创建密钥保管库并分配上述托管身份对机密的访问权限,集成可以无缝运行!
首先,我想将连接字符串存储到 KeyVault 中的存储帐户。创建包含连接字符串的机密并授予托管身份访问权限以从保管库获取 GET 机密后,我所需要做的就是在应用程序设置“AzureWebJobsStorage”中输入 Key Vault 引用而不是实际的连接字符串。参考可以是以下两个示例中的任何一个。我通常使用 SecretUri 变体。
@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)
@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret;SecretVersion=ec96f02080254f109c51a1f14cdb1931)
如果您愿意,可以在文档上阅读有关如何使用 App Service 和 Azure Functions 的 Key Vault 引用的更多信息。
但我们还没有完成!您还记得我之前提到的 API 密钥吗?用于调用函数的那些。默认情况下,它们存储在名为“azure-webjobs-secrets”的 blob 容器中。任何对存储帐户具有读取权限的人都可以提取它们,但这是行不通的。
在 Key Vault 中存储功能密钥
你猜怎么了?我们当然可以将它们存储在 Key Vault 中!为此,托管身份不仅需要对保管库中的机密进行 GET 访问,还需要 LIST 和 SET 访问。完成此操作后,我需要设置三项应用程序设置,一项设置告诉 Function App 使用“keyvault”的 AzureWebJobSecretStorageType,一项设置将 AzureWebJobsSecretStorageKeyVaultName
设置为我的 Key Vault 的名称。还有第三个设置,称为 AzureWebJobsSecretStorageKeyVaultConnectionString ,当我们使用托管标识时不需要该设置。我将其设置为空字符串只是为了确保我拥有它。
例如:
"AzureWebJobSecretStorageType": "keyvault",
"AzureWebJobsSecretStorageKeyVaultName": "my-keyvault",
"AzureWebJobsSecretStorageKeyVaultConnectionString": ""
我还没有在某处找到此记录,但 Azure Functions 是开源的,并且可以在 GitHub 上找到实现此功能的代码
确保访问安全
默认情况下,设置 Function App 时,可以使用 FTP 部署代码,并且接受所有版本的 TLS。
为了确保这一点,我通常会禁用 FTP 访问,因为我不会使用它,而且我通常将我的应用程序配置为需要 TLS 1.2。
FTP 状态可以在配置 -> 常规设置下设置为禁用。
TLS/SSL 设置下可能需要 TLS 1.2。
监控和日志
登录 Applicatin Insights
对于生产,我还想将所有日志和指标发送到 Application Insights。在门户中创建 Function App 时,或者通过将 Application Insights 资源的检测密钥添加到名为 APPINSIGHTS_INSTRUMENTATIONKEY
的应用程序设置中时,可以启用此选项。据我所知,将此密钥存储在 Key Vault 中是行不通的。
审核 Key Vault 访问
除此之外,我还希望对我的 Key Vault 进行一些审核,以便我知道谁访问了我的密钥。在我的以下帖子中,我将通过将审核事件从 Key Vault 发送到我的 Azure 存储帐户以及选择性地使用 Key Vault 上的诊断设置将审核日志发送到现有 Log Analytics 工作区来解决这个问题。
登录到日志分析
还有一个选项(当前处于预览状态)可将诊断日志从 Function App 发送到 Log Analytics。与 Application Insights 相比,我没有发现它能给我带来任何额外的好处,所以我没有使用过它。请在评论中告诉我你是如何使用它的!
为 PowerShell 配置函数应用程序
选择 PowerShell 作为运行时
要将 PowerShell 设置为所选语言运行时,我们只需设置应用程序设置 FUNCTIONS_WORKER_RUNTIME="powershell"
。就那么简单!
设置 PowerShell 版本
要运行 PowerShell 7,我们需要运行函数运行时的版本 3。只需设置两个应用程序设置 FUNCTIONS_EXTENSION_VERSION="~3"
和 FUNCTIONS_WORKER_RUNTIME_VERSION="~7"
即可配置此功能。
配置并发
对于并发性,我们需要考虑两个设置。 PowerShell 运行时一次只能处理一个函数的一次调用。如果我想一次发送大量请求或者我希望我的函数相互调用,这是行不通的!
有两种方法可以提高运行 PowerShell 的函数应用程序的并发性。它可以运行 PowerShell 的多个实例,并且可以在每个 PowerShell 实例中运行多个运行空间。由于我的函数通常不是非常占用 CPU 资源,因此我总是将函数设置为在每个 Function App 实例中运行最多 10 个 PowerShell 实例。这是通过设置应用程序设置 FUNCTIONS_WORKER_PROCESS_COUNT=10
来完成的。
如果我的函数确实需要一次处理大量请求,我还可以通过将应用程序设置 PSWorkerInProcConcurrencyUpperBound
设置为大于 1 的值,在每个 PowerShell 进程中运行多个运行空间。这对于例如,当您需要多次调用 ARM api 来启动/停止虚拟机等资源或进行大规模扩展练习时。基本上任何时候我的代码大部分都是空闲的,等待来自 API 等的响应,并发性非常棒!然而! Function 运行时使用的运行空间之间存在一些共享状态,如果遇到奇怪的错误,请尝试将 PSWorkerInProcConcurrencyUpperBound 设置回 1 来进行故障排除。
就是这样!我们有一个可以运行 PowerShell 的函数应用程序!
化妆品
为了获得额外清晰的外观和感觉,我还想添加名为 AzureWebJobsDisableHomepage
的应用程序设置,该设置将禁用状态页面,告诉用户“您的 Functions 3.0 应用程序已启动并正在运行”
"AzureWebJobsDisableHomepage": true
为了防止任何人从门户编辑我的 Function App 的代码,我还添加了应用程序设置 FUNCTIONS_APP_EDIT_MODE
。根据文档,此设置指示是否启用 Azure 门户中的编辑。有效值为“读写”和“只读”。
"FUNCTIONS_APP_EDIT_MODE": "readonly"
概括
现在我们的 Function App 具有托管身份,所有机密都存储在 Key Vault 中,并且日志正在发送到 Application Insights,事情开始看起来非常好!
我最不想添加到功能应用程序中的事情是身份验证和授权。例如,我可以要求调用我的 Function App 的任何用户都拥有来自 Azure AD 的有效访问令牌。由于这是一个相当大的主题,我将在有关 Azure Functions 和 Azure AD 身份验证的单独帖子中讨论该主题。
请继续关注下一部分,我将介绍在 PowerShell 中编写函数时要自定义的内容!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag