🛠️
何もしていないのに Azure Functions が壊れた
GitHub Actions から Azure Functions にコードをデプロイしたところ、関数が見えなくなる現象に遭遇しました。
- デプロイ前は関数が見えていた
- インフラの変更はしていない
- 依存関係のバージョンを上げただけでコードの変更はしていない
- 依存関係のバージョンを戻しても改善しない
- GitHub Actions のワークフローも変更していない
GitHub Actions のワークフローでは build と deploy でジョブを分割していました。
jobs:
build:
steps:
- name: Checkout repos
uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.x
- name: Build source
shell: pwsh
run: dotnet publish -p:PublishDir=build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts
path: build
deploy:
needs: build
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: artifacts
- name: Connect to Azure
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Deploy artifacts
uses: azure/webapps-deploy@v2
with:
app-name: ${{secrets.AZURE_FUNC_NAME}}
package: artifacts
build ジョブでアップロードした成果物に .azurefunctions フォルダーが含まれていないことが原因でした。Azure Functions では、以下のファイルが含まれている必要があります。
- .azurefunctions/
- extensions.json
- functions.metadata
- host.json
- worker.config.json
.azurefunctions フォルダーが含まれていない理由としては、actions/upload-artifact@v4 の破壊的変更が影響しています。v4.4 からは隠しファイルが対象に含まれなくなりました。.azurefunctions フォルダーは隠しファイルとなるため、含まれなかったということです。
そのため、ワークフローを修正しました。これで正常に動作するようになりました。
jobs:
build:
steps:
- name: Checkout repos
uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.x
- name: Build source
shell: pwsh
run: dotnet publish -p:PublishDir=build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts
path: build
+ include-hidden-files: true
deploy:
needs: build
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: artifacts
- name: Connect to Azure
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Deploy artifacts
uses: azure/webapps-deploy@v2
with:
app-name: ${{secrets.AZURE_FUNC_NAME}}
package: artifacts
マイナーバージョンの変更でも重要な仕様変更がある場合は、リリースノートやドキュメントをしっかり確認することが大切です。
Discussion