Azure Functions Maven插件部署403报错,如何配置复用现有存储账户
执行
mvn azure-functions:deploy 异常说明 原始错误日志
[ERROR] Failed to execute goal com.microsoft.azure:azure-functions-maven-plugin:1.10.0:deploy (default-cli) on project function-sample-azure: Unknown error with status code 403: Unrecognized field "evaluationDetails" (class com.microsoft.azure.PolicyViolationErrorInfo), not marked as ignorable (13 known properties: "policyDefinitionId", "policyDefinitionReferenceId", "policyDefinitionDisplayName", "policyAssignmentParameters", "policyAssignmentName", "policySetDefinitionName", "policyDefinitionName", "policyAssignmentScope", "policyDefinitionEffect", "policyAssignmentId", "policySetDefinitionId", "policySetDefinitionDisplayName", "policyAssignmentDisplayName") [ERROR] at [Source: (String)"{\"policyDefinitionDisplayName\":\"STORAGE - Deny Storage account Version 1\", \"policySetDefinitionDisplayName\":\"Storage-initiative-npd\",\"evaluationDetails\":{\"evaluatedExpressions\": [{\"result\":\"True\",\"expressionKind\":\"Field\",\"expression\":\"type\",\"path\":\"type\",\"expressionValue\":\"Microsoft.Storage/storageAccounts\", \"targetValue\":\"Microsoft.Storage/storageAccounts\",\"operator\":\"Equals\"},{\"result\":\"True\",\"expressionKind\":\"Field\",\"expression\":\"kind\",\"path\":\"kind\",\"expressionValue\":\"Storage\", \"targetValue\":\"Sto\"[truncated 911 chars]; line: 1, column: 154] (through reference chain: com.microsoft.azure.CloudError["additionalInfo"]->java.util.ArrayList[0]->com.microsoft.azure.PolicyViolationErrorInfo["evaluationDetails"]) [ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.microsoft.azure:azure-functions-maven-plugin:1.10.0:deploy (default-cli) on project function-sample-azure: Unknown error with status code 403
根因定位
- 直接报错触发点:当前使用的
azure-functions-maven-plugin1.10.0版本中,用于解析Azure错误信息的PolicyViolationErrorInfo类未标记忽略接口新增的evaluationDetails字段,反序列化Azure返回的政策违规响应时失败 - 底层触发原因:插件默认会自动创建与函数应用配套的存储账户,当前操作命中企业资源策略
STORAGE - Deny Storage account Version 1,被Azure平台返回403拦截,插件未正确解析该政策违规的返回内容,仅抛出通用403错误
现有Maven配置
<properties> <java.version>1.8</java.version> <functionAppName>12345600SampleFunctionApp</functionAppName> <functionAppRegion>eastus2</functionAppRegion> <region>eastus2</region> <functionResourceGroup>myFunctionResourceGroup</functionResourceGroup> <stagingDirectory>${project.build.directory}/azure-functions/${functionAppName}</stagingDirectory> <start-class>com.wi.prdc.azure.sample.function.Main</start-class> <azure.functions.java.library.version>1.4.2</azure.functions.java.library.version> <azure.functions.maven.plugin.version>1.10.0</azure.functions.maven.plugin.version> <wrapper.version>1.0.23.RELEASE</wrapper.version> <appServicePlanName>myfunctionAppServicPlan</appServicePlanName> </properties>
复用存量存储账户配置实现
配置要求
- 禁止插件自动新建存储账户,需指定已存在的存量存储账户
- 若存量存储账户与函数应用所属资源组不同,需额外指定存储账户所属资源组
- 部署使用的账号需对存量存储账户拥有写入权限
具体配置修改
在pom.xml的azure-functions-maven-plugin插件配置节点下新增以下参数:
<plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-functions-maven-plugin</artifactId> <version>${azure.functions.maven.plugin.version}</version> <configuration> <!-- 原有函数应用配置 --> <resourceGroup>${functionResourceGroup}</resourceGroup> <appName>${functionAppName}</appName> <region>${functionAppRegion}</region> <appServicePlanName>${appServicePlanName}</appServicePlanName> <!-- 新增:指定存量存储账户名称 --> <storageAccountName>你的存量存储账户名称</storageAccountName> <!-- 新增:若存量存储账户在其他资源组,指定该资源组名称 --> <storageAccountResourceGroup>存量存储账户所属资源组名称</storageAccountResourceGroup> </configuration> </plugin>
注意:
- 配置完成后可执行
mvn azure-functions:deploy -X查看debug日志,确认插件已读取指定的存量存储账户,不会触发新建逻辑- 存量存储账户需为StorageV2类型,符合Azure函数运行要求
内容的提问来源于stack exchange,提问作者Gul
相关产品推荐
相关产品推荐

