Azure Functions Flex ConsumptionでCICDしたい

今Public Previewな新しいAzure FunctionsのホスティングプランであるFlex Consumptionですが、Previewらしく細かい制限が今のところあります。(考慮事項を参照)
その中に以下のようなものがあります。

  • デプロイ: これらのデプロイ関連の機能は現在サポートされていません。
    • デプロイ スロット
    • Azure DevOps タスク (AzureFunctionApp@2) を使用した継続的デプロイ
    • GitHub Actions (functions-action@v1) を使用した継続的デプロイ

Azure PipelinesやGitHub Actionsで使うFunctionsのデプロイ用タスクが使えないんですよね。何も考えずにCDしようとしてハマりました。とはいえVisual Studio CodeやCLIからはデプロイできるので何かしら方法はあるということです。というわけで正式対応されるまでの間の暫定のCDの方法をメモしておきます。

簡単にいうとFlex Consumptionではデプロイするファイルの管理方法がちょっと変わってるのと、 WEBSITE_RUN_FROM_PACKAGE が未対応なのが原因ぽいです。なので通常のFunctions用のタスクをそのまま使うとWEBSITE_RUN_FROM_PACKAGEが未対応みたいなエラーになったりします。

というわけで、ローカルPCからデプロイするときと同様にFunctions Core Toolsを使ったデプロイをしようと思います。

    - task: FuncToolsInstaller@0
      inputs:
        version: 'latest'
    - task: AzureCLI@2
      displayName: 'func azure functionapp publish'
      inputs:
        azureSubscription: '$(AzureSubscription)'
        scriptType: bash
        scriptLocation: inlineScript
        inlineScript: |
          func azure functionapp publish $(AzureFunctionsAppName) --no-build --dotnet-isolated --nozip
        workingDirectory: '$(Build.SourcesDirectory)/$(projectDir)/output'
        failOnStandardError: true

FuncToolsInstallerでツールをインストールして、–no-build –nozip をつけてビルド済みの出力ディレクトリを指定(上記だとworkingDirevtory)すればいけると思います。(.NETで作ったので –dotnet-isolated も付けてる)
上記はAzure PipelinesですがGitHub Actionsでも同じようなのあると思うのでちょっと手直ししたら行けると思います。

追加情報

さもありなん。

コメントを残す