提问人:ValeriaN 提问时间:8/29/2023 更新时间:8/31/2023 访问量:127
在 Bicep 文件中使用 MSDeploy 的 Azure 函数部署错误
Azure function deploy error using MSDeploy in Bicep file
问:
我正在使用二头肌文件来部署 Azure 资源,其中包括一个 FunctionApp 和 3 个 Functions
FunctionApp 部署工作正常。
我正在使用从之前创建的 FunctionApp 和 Functions 上的“下载应用内容”按钮创建并上传到 git 存储库的 zip 文件部署 Functions
这是二头肌内容:
resource funcAppDeploy 'Microsoft.Web/sites/extensions@2020-12-01' = {
parent: funcApp
name: 'MSDeploy'
properties: {
packageUri: funcPackageUri
}
}
其中 funcPackageUri 是这样的
var funcPackageUri = 'https://github.com/<repoorg>/<reponame>/raw/main/<foldername>/funcapp-deploy.zip'
我在部署过程中遇到此错误:
{“code”:“失败”,“message”:“ARM-MSDeploy 部署失败: 'Microsoft.Web.Deployment.DeploymentDetailedException:类型的对象 “package”和路径 “C:\local\Temp\f5e1b1e4-1a43-4567-95d7-d4ae670fd17f.zip”不能是 创建。如需了解更多信息,请访问:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_EXCEPTION_WHILE_CREATING_OBJECT。 ---> Microsoft.Web.Deployment.DeploymentException:Zip 包“C:\local\Temp\f5e1b1e4-1a43-4567-95d7-d4ae670fd17f.zip”不能 加载。---> System.IO.EndOfStreamException:无法读取超出 流的末尾。\r\n 在 System.IO.BinaryReader.FillBuffer(Int32 numBytes)\r\n 在 System.IO.BinaryReader.ReadInt32()\r\n 在 Microsoft.Web.Deployment.ZipFile.Load()\r\n 位于 Microsoft.Web.Deployment.ZipPackageProvider..ctor(DeploymentProviderContext) providerContext、DeploymentBaseContext baseContext、字符串路径)\r\n --- 内部异常堆栈跟踪结束---\r\n 位于 Microsoft.Web.Deployment.ZipPackageProvider.GetAttributes(DeploymentAddAttributeContext) addContext)\r\n 在 Microsoft.Web.Deployment.DeploymentObject.EnsureValidAttributes()\r\n --- 内部异常堆栈跟踪结束---\r\n 位于 Microsoft.Web.Deployment.DeploymentManager.CreateObjectPrivate(DeploymentProviderContext) providerContext、DeploymentBaseOptions baseOptions、DeploymentObject sourceObject,字符串 serverVersion)\r\n 在 Microsoft.Web.Deployment.DeploymentManager.CreateObject(DeploymentProviderOptions providerOptions、DeploymentBaseOptions baseOptions)\r\n 位于 Microsoft.Web.Deployment.DeploymentManager.CreateObject(字符串) provider、String 路径、DeploymentBaseOptions baseOptions)\r\n 位于 Microsoft.Web.Deployment.DeploymentManager.CreateObject(DeploymentWellKnownProvider provider、String 路径、DeploymentBaseOptions baseOptions)\r\n 位于 Microsoft.Web.Deployment.WebApi.AppGalleryPackage.Deploy(字符串) deploymentSite, String siteSlotId, Boolean doNotDelete) C:__w\1\s\src\hosting\wdeploy\Microsoft.Web.Deployment.WebApi\AppGalleryPackage.cs:line 250\r\n 在 Microsoft.Web.Deployment.WebApi.DeploymentController.d__25.MoveNext() 在 C:__w\1\s\src\hosting\wdeploy\Microsoft.Web.Deployment.WebApi\Controllers\DeploymentController.cs:line 492'"}
你能帮我了解问题所在吗?
答:
在尝试使用 bicep 将 zip 推送部署到函数应用时,我遇到了类似的问题。解决方法后,似乎 zip 部署推送存在问题。但是,如果我们关注错误消息,则意味着 zip 文件已损坏,因此无法加载以进行部署。MSDeploy
我还尝试通过创建一个新的存储库来通过 bicep 部署它。这同样是失败的。因此,我尝试了以下方法来满足您的要求。
我为函数应用部署创建了一个 bicep 文件,然后使用该命令将函数部署到该特定函数应用。AzCLI
Functionapp.bicep
:
param functionAppName string = 'func-${uniqueString(resourceGroup().id)}'
param storageAccountType string = 'Standard_LRS'
param location string = resourceGroup().location
param appInsightsLocation string = resourceGroup().location
param functionWorkerRuntime string = 'node'
@allowed([
'Windows'
'Linux'
])
param functionPlanOS string = 'Windows'
param planSku string = 'S1'
var hostingPlanName = functionAppName
var applicationInsightsName = functionAppName
var storageAccountName = '${uniqueString(resourceGroup().id)}functions'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'Storage'
}
resource hostingPlan 'Microsoft.Web/serverfarms@2021-02-01' = {
name: hostingPlanName
location: location
sku: {
tier: 'Standard'
name: PlanSku
family: 'S'
capacity: 1
}
properties: {}
}
resource applicationInsights 'microsoft.insights/components@2020-02-02' = {
name: applicationInsightsName
location: appInsightsLocation
properties: {
Application_Type: 'web'
}
kind: 'web'
}
resource functionApp 'Microsoft.Web/sites@2021-02-01' = {
name: functionAppName
location: location
kind: 'functionapp'
properties: {
reserved: isReserved
serverFarmId: hostingPlan.id
siteConfig: {
alwaysOn: true
appSettings: [
{
name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
value: reference(applicationInsights.id, '2015-05-01').InstrumentationKey
}
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${listKeys(storageAccount.id, '2019-06-01').keys[0].value}'
}
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: functionWorkerRuntime
}
{
name: 'WEBSITE_NODE_DEFAULT_VERSION'
value: '~14'
}
{
name: 'WEBSITE_RUN_FROM_PACKAGE'
value: '0'
}
]
}
}
}
CLI 命令:
az functionapp deployment source config-zip -g <resourcegroup> -n warriorfunc --src Firstrepojahnavi-main.zip
部署成功:
或者,也可以尝试将 zip 文件或文件夹上传到 blob 存储容器,上传后,从中获取容器 URL,并将其粘贴到 bicep 代码中的包 uri 位置,如 MSDoc 中所述。
如果需要,您可以参考此处了解其他 Zip 部署方式。
评论