gpt4 book ai didi

azure - 部署的隔离功能应用程序返回 404

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

在我使用 Azure Devops(YAML 和 Bicep 的组合)部署我的(隔离的 V7)Azure Function App 后,我似乎无法访问我的 HTTPTrigger;返回 404。

这是我的 C# HttpTrigger,一个无需身份验证的基本 GET:

        [Function(nameof(StartImport))]
public async Task<HttpResponseData> StartImport(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequestData req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
// call orchestrator...
}

在本地,这一切都运行良好,当使用 Postman 获取 http://localhost:7222/api/StartImport 时,我得到了 200 OK 响应。

这是用于构建项目的 YAML:

      - task: UseDotNet@2
inputs:
packageType: "sdk"
version: "7.x"

- task: DotNetCoreCLI@2
inputs:
command: "restore"
projects: "**/[PROJECT].csproj"

- task: DotNetCoreCLI@2
inputs:
projects: "**/[PROJECT].csproj"
arguments: "--configuration $(BuildConfiguration)"

- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: false
projects: "**/[PROJECT].csproj"
arguments: "--configuration $(BuildConfiguration) --output publish_output"
modifyOutputPath: false

- task: ArchiveFiles@2
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
includeRootFolder: false
archiveFile: "$(System.ArtifactsDirectory)/build$(Build.BuildId).zip"

- task: PublishBuildArtifacts@1
displayName: "Publish build artifacts"

然后运行 ​​Bicep 文件来部署基础设施。它创建一个具有高级 (EP1) 计划和存储帐户的 Function App。以下是创建计划和相应站点的 Bicep 文件的一部分:

resource plan 'Microsoft.Web/serverfarms@2022-09-01' = {
name: 'pl-${functionAppName}'
location: resourceLocation
sku: {
tier: 'ElasticPremium'
name: 'EP1'
}
kind: 'elastic'
properties: {
targetWorkerCount: 0
maximumElasticWorkerCount: 20
elasticScaleEnabled: true
isSpot: false
}
}

resource functionappsite 'Microsoft.Web/sites@2022-09-01' = {
name: '${functionAppName}'
location: resourceLocation
kind: 'functionapp'
identity: {
type: 'SystemAssigned'
}
properties: {
httpsOnly: true
siteConfig: {
appSettings: [
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: 'dotnet-isolated'
}
{
name: 'WEBSITE_RUN_FROM_PACKAGE'
value: '1'
}
{
name: 'AzureWebJobsStorage'
value: '[CONNECTION]'
}
{
name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
value: '[CONNECTION]'
}
{
name: 'WEBSITE_CONTENTSHARE'
value: '[SHARE NAME]'
}
{
name: 'AzureBlobConnectionString'
value: '[CONNECTION]'
}
]
use32BitWorkerProcess: true
}
serverFarmId: plan.id
clientAffinityEnabled: false
}
}

最后,部署 ZIP:

          - task: AzureFunctionApp@1
inputs:
azureSubscription: [SUBSCRIPTION]
appName: ${{ parameters.functionAppName }}
package: $(Agent.BuildDirectory)/drop/build$(Build.BuildId).zip

我可以看到 ZIP 文件已部署到我的函数应用程序中;它位于“C:\home\data\SitePackages”内。

我在功能应用程序“功能”边栏选项卡中看不到任何功能,但这似乎是预期的:

enter image description here

看起来存储帐户也已成功为函数应用实例化:

enter image description here

但是,当我尝试访问触发器时,通过将 GET 请求发送到 https://[FUNCTIONAPPNAME].azurewebsites.net/api/StartImporthttps://[ FUNCTIONAPPNAME].azurewebsites.net/StartImport,返回 404。网站本身 (https://[FUNCTIONAPPNAME].azurewebsites.net/) 确实显示了一个确认屏幕,表明我的应用程序已启动并正在运行...

如何访问我的触发器?如何检查部署是否成功以及我的触发器是否可用?

最佳答案

这是由于我的发布输出被压缩了两次造成的。一切都已成功部署,但 wwwroot 中的最终输出只是空的,导致 404。

通过删除 ArchiveFiles@2 任务并稍微修改使用的路径来修复此问题:

      - task: UseDotNet@2
inputs:
packageType: "sdk"
version: "7.x"

- task: DotNetCoreCLI@2
inputs:
command: "restore"
projects: "**/[PROJECT].csproj"

- task: DotNetCoreCLI@2
inputs:
projects: "**/[PROJECT].csproj"
arguments: "--configuration $(BuildConfiguration)"

- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: false
projects: "**/[PROJECT].csproj"
arguments: "--configuration $(BuildConfiguration) --no-build --output publish_output"
modifyOutputPath: false

- task: PublishBuildArtifacts@1
displayName: "Publish build artifacts"
PathtoPublish: 'publish_output'
ArtifactName: 'drop'
publishLocation: 'Container'

关于azure - 部署的隔离功能应用程序返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76255239/

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