gpt4 book ai didi

azure - 如何引用存储和 key 保管库更新 Azure 函数应用程序的应用程序设置? - 带有二头肌和模块

转载 作者:行者123 更新时间:2023-12-03 06:07:47 30 4
gpt4 key购买 nike

背景

这个想法是拥有一个小型“工作负载”/“管道”,其中包含一个函数应用程序,用于按计划的时间间隔调用某些第 3 方 API 并将响应写入 Blob 存储。

所以就我需要/想要拥有的资源而言:

  • 函数应用的存储
  • 功能应用程序以及将其链接到上述存储的应用程序设置
  • 数据存储,即 API 响应
  • 一个 keyvault,用于将数据存储的 key 作为 secret 存储,并具有允许函数应用访问 keyvault secret 的访问策略
  • 函数应用的更新设置,其中将包括对 keyvault key 的引用

我非常想要一个可重复使用的模板,所以我尝试使用二头肌模块。到目前为止,这是我的 IaC 项目的结构:

./main.bicep
./modules/AppServicePlan/ConsumptionPlan.bicep
./modules/FunctionApp/FunctionApp.bicep
./modules/KeyVault/KeyVault.bicep
./modules/KeyVault/Secret.bicep
./modules/Storage/StorageAccount.bicep

因此,我使用 StorageAccount.bicep 创建数据存储(来自 main.bicep 作为模块)以及函数存储(来自 FunctionApp.bicep 作为一个模块)。 FunctionApp.bicep 还创建应用服务计划资源,并分配初始应用设置(即将其链接到函数存储的 AzureWebJobsStorage 设置)。

我也在以类似的方式处理 keyvault。因此,我从 main.bicep 创建一个 keyvault 作为模块,并传入函数应用程序的对象 ID 作为参数,以便在 keystore 访问策略中允许它获取和列出 secret 。

问题

最后,我尝试更新函数应用程序中的应用程序设置,以包含对 keyvault 中 secret 的引用。首先,我尝试使用新的应用程序设置“扩展”,如 Is there a workaround to keep app settings which not defined in Bicep template? 中所述。我无法让它工作。所以现在我正在尝试用一种更简单的方法来完全替换应用程序设置。但是我收到一条错误消息,指出未找到函数资源的存储(?)

"error\": {\r\n    \"code\": \"ResourceNotFound\",\r\n    \"message\": \"The Resource 'Microsoft.Storage/storageAccounts/<storageForFuncName>' under resource group '<resourceGroup>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix\"\r\n  }\r\n}"}

如果我查看部署,所有子部署(包括用于存储功能的子部署)都成功,只有主部署因上述错误详细信息而失败。事实上,除了更新的应用程序设置之外,所有资源都已创建。甚至是有问题的函数的存储,甚至是我作为 FunctionApp.bicep 的一部分创建的初始应用程序设置,顺便说一句,它包含完全相同的 AzureWebJobsStorage key -值,当我尝试创建更新的应用设置时,这会在 main.bicep 中出现问题。

我该如何解决这个问题?或者我应该完全改变我的模块方法?

(顺便说一下,这是我的第一个 IaC 项目,我是二头肌新手,但我已经很恼火了,我需要做一些事情,比如必须使用 resource 有效地重新声明资源和现有,即使是用module声明的,同时还必须特别提及api版本和资源类型。只是发泄我的挫败感...;))

我尝试过的事情

  1. 我使用空的初始应用设置(即应用设置作为 FunctionApp.bicep 的一部分)测试了部署 - 我得到了相同的结果。

  2. 我作为模块创建的每个资源,我再次声明为资源并使用现有关键字,并将其添加到依赖项中应用程序设置:

resource functionApp1AppSettings 'Microsoft.Web/sites/config@2022-09-01' = {
kind: 'string'
name: 'appsettings'
parent: functionApp1r // resource //https://github.com/Azure/bicep/issues/7328

properties: {
// these settings were created at the point of function app creation with the `FunctionApp.bicep`
AzureWebJobsFeatureFlags: 'EnableWorkerIndexing'
// the below line is the problematic one and the one giving error
AzureWebJobsStorage: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount4funcName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount4func1r.listKeys().keys[0].value}'
FUNCTIONS_EXTENSION_VERSION: '~4'
FUNCTIONS_WORKER_RUNTIME: 'python'
WEBSITE_TIME_ZONE: 'Europe/Amsterdam'
// this is the "new" setting we are trying to update the appsettings with
KV_SOME_SECRET: '@Microsoft.KeyVault(VaultName=${keyVaultName};SecretName=${secret.name})'
}

dependsOn: [
functionApp1 //module
kv //module
kvr //existing resource of the above
storageAccounts4func //module
storageAccount4func1r //existing resource of the above
]
}

这没有帮助。

  • 我尝试将以下内容放入我的 main.bicep 中:
  • var dummy = storageAccount4func1r.identity.principalId
    output dummy string = dummy

    根据以下建议:https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-not-found?tabs=bicep#solution-4-get-managed-identity-from-resource

    但这并没有帮助。

    最佳答案

    您无法声明存储帐户资源,然后使用现有函数在同一个二头肌文件中检索相同的存储帐户。您收到的错误可能来自现有函数,因为您无法为其设置依赖项。 (即:它试图引用尚不存在的资源)。

    尝试在 appSettings 之上的级别声明存储帐户,然后将 StorageAccount 名称传递到 appSettings bicep 文件。然后,您可以使用其中的现有功能来检索您的存储帐户引用,它应该可以工作。

    如果您发布二头肌文件,可能会更容易提供帮助。

    关于azure - 如何引用存储和 key 保管库更新 Azure 函数应用程序的应用程序设置? - 带有二头肌和模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77150311/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com