gpt4 book ai didi

python - Azure 功能(消费 Linux 计划)无法与系统标识一起访问用于 zip 部署的存储帐户

转载 作者:行者123 更新时间:2023-12-03 03:34:11 25 4
gpt4 key购买 nike

由于“AzureWebJobsStorage 的托管身份”已发布,使函数应用程序能够访问存储帐户,我想尝试一下并在我们的 API 中实现。但是,这不适用于 Azure Function Linux 消费计划。设置如下:

  • 函数运行时间:~4
  • Python版本:3.9
  • 服务计划:Linux 使用
  • 已激活系统身份,并分配 Blob 所有者 + SA 贡献者来访问 SA。
  • 部署方法:
    • 通过任务 AzureFunctionApp@1 的 Azure DevOps 管道
    • 我尝试过 zip 部署和 runFromPackage

我的问题与应用程序设置有关。我不太清楚应该配置 AzureWebJobsStorage__accountName:[SA_NAME] 旁边的哪些应用程序设置。更具体地说,消费 Linux 计划不支持根据 MSFT 文档设置 WEBSITE_RUN_FROM_PACKAGE:1 应用程序,必须使用 WEBSITE_RUN_FROM_PACKAGE:[URL]。通常,如果没有托管标识访问权限,部署工具将负责调整每个部署的 URL,并将其指向存储帐户中的正确包名称。 AzureWebJobsStorage__accountName 不会发生此调整,因为它无论如何都无法访问存储帐户。

如何测试呢?只需在 Azure 中创建一个消费 Linux python 函数并添加\调整 AzureWebJobsStorage__accountName:[SA_NAME] 即可。然后尝试使用在 vscode 中创建的基本 HTTPTrigger 来部署该函数。

我不知道python http触发代码是否必须调整。如果有人可以提供有关它和应用程序设置的更多信息,那就太好了。

最佳答案

以下内容适合我(Linux 消费计划):

trigger:
- none

variables:
# Azure Resource Manager connection created during pipeline creation
azureSubscription: 'xxx'
resourceGroupName: 'xxx'
# Function app name
functionAppName: 'xxx'
# Agent VM image name
vmImageName: 'ubuntu-latest'

# Working Directory
workingDirectory: ''


storage_str: 'xxx'

stages:
- stage: Build
displayName: Build stage

jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)

steps:
- task: UsePythonVersion@0
displayName: 'Use Python 3.9'
inputs:
versionSpec: 3.9 # Functions V2 supports Python 3.6 as of today
architecture: 'x64'

- bash: |
pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
workingDirectory: $(workingDirectory)
displayName: 'Install application dependencies'

- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)"
includeRootFolder: false
archiveType: zip
archiveFile: "$(System.DefaultWorkingDirectory)/$(Build.BuildId).zip"
replaceExistingArchive: true

- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/$(Build.BuildId).zip'
artifactName: 'drop'

- stage: Deploy
displayName: Deploy stage
dependsOn: Build
condition: succeeded()

jobs:
- deployment: Deploy
displayName: Deploy
environment: 'test'
pool:
vmImage: 'windows-latest'

strategy:
runOnce:
deploy:
steps:
- task: DownloadPipelineArtifact@2
displayName: 'Download Pipeline Artifact'
inputs:
buildType: 'current'
artifactName: 'drop'
targetPath: '$(Pipeline.Workspace)/drop/'
- task: AzureAppServiceSettings@1
inputs:
azureSubscription: '$(azureSubscription)'
appName: '$(functionAppName)'
resourceGroupName: '$(resourceGroupName)'
appSettings: |
[
{
"name": "AzureWebJobsStorage",
"value": "$(storage_str)",
"slotSetting": false
}
]
- task: AzureFunctionApp@1
inputs:
azureSubscription: '$(azureSubscription)'
appType: 'functionAppLinux'
appName: '$(functionAppName)'
package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
runtimeStack: 'PYTHON|3.9'

关于python - Azure 功能(消费 Linux 计划)无法与系统标识一起访问用于 zip 部署的存储帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73898612/

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