为什么Azure函数部署到api管理失败?

问题描述 投票:0回答:1

使用 Visual Studio 17.8.3,我尝试将 .Net8 隔离的 C# Azure Function 项目发布到 Azure,包括使用 Github CI/CD 工作流程将其加载到 API 管理服务。这是发布菜单上的选项之一。

更改后构建阶段可以工作:

DOTNET_CORE_VERSION_INPROC: 6.0.x

DOTNET_CORE_VERSION_INPROC: 8.0.x

但是部署阶段失败并显示以下消息:

“登录失败,错误:使用身份验证类型:SERVICE_PRINCIPAL。并非所有值都存在。确保提供“client-id”和“tenant-id”。确保运行程序上安装了“az”。如果“enable” -AzPSSession' 为 true,请确保 'pwsh' 与 Azure PowerShell 模块一起安装在运行器上。仔细检查 'auth-type' 是否正确。”

在 Visual Studio 生成的工作流可以工作之前,似乎需要采取一些步骤。

我错过了什么吗?有详细教程吗?

我的工作流程:

name: Build and deploy .NET Core application to Function App NewKimaAPI with API Management Service KimaAPI-NewKimaAPI
on:
  push:
    branches:
    - master
env:
  AZURE_FUNCTIONAPP_NAME: NewKimaAPI
  AZURE_FUNCTIONAPP_PACKAGE_PATH: NewKimaAPI
  CONFIGURATION: Release
  DOTNET_CORE_VERSION: 8.0.x
  WORKING_DIRECTORY: NewKimaAPI
  DOTNET_CORE_VERSION_INPROC: 8.0.x
  AZURE_APIM_RESOURCEGROUP: HeritageBrowserIL
  AZURE_APIM_SERVICENAME: KimaAPI
  AZURE_APIM_API_ID: NewKimaAPI
  AZURE_APIM_RESOURCE_PATH: /
  AZURE_APIM_SWAGGERURL: ''
jobs:
  build:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v4
    - name: Setup .NET SDK
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_CORE_VERSION }}
    - name: Setup .NET Core (for inproc extensions)
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ env.DOTNET_CORE_VERSION_INPROC }}
    - name: Restore
      run: dotnet restore "${{ env.WORKING_DIRECTORY }}"
    - name: Build
      run: dotnet build "${{ env.WORKING_DIRECTORY }}" --configuration ${{ env.CONFIGURATION }} --no-restore
    - name: Publish
      run: dotnet publish "${{ env.WORKING_DIRECTORY }}" --configuration ${{ env.CONFIGURATION }} --no-build --output "${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}"
    - name: Publish Artifacts
      uses: actions/upload-artifact@v3
      with:
        name: functionapp
        path: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
  deploy:
    runs-on: windows-latest
    needs: build
    steps:
    - name: Download artifact from build job
      uses: actions/download-artifact@v3
      with:
        name: functionapp
        path: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
    - name: Deploy to Azure Function App
      uses: Azure/functions-action@v1
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        publish-profile: ${{ secrets.NewKimaAPI_AABB }}
        package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
    - name: Azure Login
      uses: azure/login@v1
      with:
        creds: ${{ secrets.KimaAPI_SPN }}
    - name: Import API into Azure API Management
      run: az apim api import --path "${{ env.AZURE_APIM_RESOURCE_PATH }}" --resource-group ${{ env.AZURE_APIM_RESOURCEGROUP }} --service-name ${{ env.AZURE_APIM_SERVICENAME }} --api-id ${{ env.AZURE_APIM_API_ID }} --specification-url "${{ env.AZURE_APIM_SWAGGERURL }}" --specification-format OpenApi --subscription-required false
azure visual-studio deployment azure-functions azure-api-management
1个回答
0
投票

您可以按照以下给出的替代方案来实现您的要求。

  • 使用 GitHub 操作将函数部署到 Azure 函数应用。
  • 在 Portal 中手动配置 Function App 中的 APIM。

我的 GitHub 工作流程将函数部署到 Azure:

on:
  push:
    branches:
      - main
  workflow_dispatch:
  
#set environment variables

env:
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'
  DOTNET_VERSION: '8.0.x' 

jobs:
  build-and-deploy:
    runs-on: windows-latest
    steps:
      - name: 'Checkout GitHub Action'
        uses: actions/checkout@v4

      - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: 'Resolve Project Dependencies Using Dotnet'
        shell: pwsh
        run: |
          pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
          dotnet build --configuration Release --output ./output
          popd
      - name: 'Run Azure Functions Action'
        uses: Azure/functions-action@v1
        id: fa
        with:
          app-name: '<functionapp_name>'
          slot-name: 'Production'
          package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_C5XXXXX1019 }}

GitHub 中的部署状态:

enter image description here

传送门:

enter image description here

导航至

Function App=>API Management=>Create New APIM and API or select existing ones

  • 创建了新的 APIM 并将其链接到函数应用程序。

enter image description here

  • 点击
    Go to API management
    =>转到API=>创建新API=>选择函数应用程序并提供函数应用程序的详细信息。

enter image description here

现有 APIM:

enter image description here

测试导入的函数:

enter image description here

参考资料:

在 Azure API 管理中将 Azure Function App 作为 API 导入

© www.soinside.com 2019 - 2024. All rights reserved.