从GitHub部署PowerShell代码至Azure Function(Windows消费计划)遇阻
PowerShell Azure Function部署问题(GitHub Actions + Terraform)
问题概述
通过GitHub Actions将PowerShell代码部署至Terraform创建的Windows消费计划Azure Function时,遇到以下问题:
- 初始Workflow执行成功,但Function门户无函数列表
- 简化Workflow后,出现Runtime错误:
Microsoft.Azure.WebJobs.Script: Did not find functions with language [dotnet].,Runtime版本显示Error
当前环境配置
项目目录结构
.\packaged-functions\rules-backup-function .\packaged-functions\rules-backup-function\analytical-rules-backup-function .\packaged-functions\rules-backup-function\.funcignore .\packaged-functions\rules-backup-function\.gitignore .\packaged-functions\rules-backup-function\host.json .\packaged-functions\rules-backup-function\local.settings.json .\packaged-functions\rules-backup-function\profile.ps1 .\packaged-functions\rules-backup-function\requirements.psd1 .\packaged-functions\rules-backup-function\analytical-rules-backup-function\function.json .\packaged-functions\rules-backup-function\analytical-rules-backup-function\run.ps1 .\packaged-functions\rules-backup-function\analytical-rules-backup-function\sample.dat
注:目录结构符合官方PowerShell Function规范(项目根目录含host.json,函数代码位于子文件夹内)
初始GitHub Workflow
name: Deploy Azure Function on: workflow_dispatch jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Zip folder run: | cd packaged-functions/rules-backup-function zip -r ../../output.zip . shell: bash - name: Upload zip file uses: actions/upload-artifact@v2 with: name: function-zip path: output.zip deploy-azure-function: runs-on: windows-latest needs: build-and-deploy environment: dev steps: - name: 'Checkout GitHub Action' uses: actions/checkout@v3 - name: 'Download zip file' uses: actions/download-artifact@v2 with: name: function-zip path: . - name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 with: app-name: ${{ secrets.AZURE_FUNCTIONAPP_NAME }} package: . publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}
修改后的GitHub Workflow
name: Deploy PowerShell project to Azure Function App on: workflow_dispatch # [push] env: AZURE_FUNCTIONAPP_PACKAGE_PATH: 'packaged-functions\rules-backup-function' # set this to the path to your function app project, defaults to the repository root jobs: build-and-deploy: runs-on: windows-latest environment: dev steps: - name: 'Checkout GitHub Action' uses: actions/checkout@v3 - name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 id: fa with: app-name: ${{ secrets.AZURE_FUNCTIONAPP_NAME }} package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }} publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}
Terraform配置
resource "azurerm_service_plan" "analytical-rules-backup" { name = "analytical-rules-backup-plan" resource_group_name = module.environment.resource_group_name location = module.environment.location os_type = "Windows" sku_name = "Y1" } resource "azurerm_windows_function_app" "analytical-rules-back-function" { name = "analytical-rules-backup-function" resource_group_name = module.environment.resource_group_name location = module.environment.location storage_account_name = azurerm_storage_account.analytical-rules-backup-sa.name storage_account_access_key = azurerm_storage_account.analytical-rules-backup-sa.primary_access_key service_plan_id = azurerm_service_plan.analytical-rules-backup.id site_config {} }
解决方案
1. 修复Terraform Function App配置(核心)
Azure Function默认使用.NET Runtime,需显式指定PowerShell Runtime及相关配置:
resource "azurerm_windows_function_app" "analytical-rules-back-function" { name = "analytical-rules-backup-function" resource_group_name = module.environment.resource_group_name location = module.environment.location storage_account_name = azurerm_storage_account.analytical-rules-backup-sa.name storage_account_access_key = azurerm_storage_account.analytical-rules-backup-sa.primary_access_key service_plan_id = azurerm_service_plan.analytical-rules-backup.id # 指定PowerShell Runtime site_config { application_stack { powershell_version = "7.2" # 选择兼容的PowerShell版本,如7.0/7.2 } } # 设置App Settings,确保Runtime配置生效 app_settings = { "FUNCTIONS_WORKER_RUNTIME" = "powershell" "FUNCTIONS_EXTENSION_VERSION" = "~4" # 对应PowerShell 7.2的扩展版本,~3对应7.0 } }
执行terraform apply更新Function App配置。
2. 调整GitHub Workflow路径格式
Windows环境下路径分隔符用\可能引发问题,统一改为/:
env: AZURE_FUNCTIONAPP_PACKAGE_PATH: 'packaged-functions/rules-backup-function'
保持使用windows-latest runner,避免跨OS打包导致的路径或文件权限问题。
3. 验证部署结果
重新触发Workflow部署后,检查Azure Function门户:
- Runtime版本应显示为
PowerShell 7.x - 函数列表会自动加载
analytical-rules-backup-function
内容的提问来源于stack exchange,提问作者Coco
相关产品推荐
相关产品推荐

