🚚

コマンドラインからAzure Functionの関数アプリをデプロイする

2024/07/28に公開

概要

今まで以下の記事でVSCode上でEnd2Endに関数アプリを作成する方法を紹介してきましたが、コマンドライン上からスクリプトで複数のアプリを一括デプロイしたいニーズがあったので方法を調べました。

今回はAzure Functions Core Tools(funcで始まるコマンド)、Azure CLI(azで始まるコマンド)の2つそれぞれを使ったデプロイの方法を紹介します。今回紹介するのはコードの関数アプリのデプロイで、Dockerやk8sを使ったコンテナ関数アプリのデプロイは少し違うコマンドになるようです。

検証環境

  • Windows 11
  • Powershell

前提

インストールがまだの場合は以下が必要です。(リンク先はインストール方法のページ)

WindowsのPowershell上でCore Toolsからデプロイする場合、Azure Powershellでログイン情報を取得するため別途インストールが必要になります。(他のOSの場合は必要ないかもしれません)

Azure Functions Core Toolsを使ってデプロイ

# Azure Powershellでデプロイ先のアカウントにログインしていない場合 
Connect-AzAccount 
# デプロイする関数アプリのホームディレクトリで実行
func azure functionapp publish <App名> --publish-local-settings -i

オプション

開発中よく使うオプションです。その他についてはこちらを参考にしてください。

  • --publish-local-settings -i
    • local.settings.jsonの環境変数をデプロイできます。既存の環境変数に変更がある場合、上書きするかどうか1つ1つ確認が入ります。
  • --publish-settings-only
    • local.settings.jsonの環境変数の設定のみ更新します。
  • --no-build
    • デプロイ中にビルドを行わない。pythonの関数アプリの場合はpip install -r requirements.txtをスキップできるため、pythonの関数アプリで処理内容のみ変更する場合はこちらを付けるとデプロイ時間を短縮できます。

メリット

VSCode + Azure Functions Core Toolsでの開発と親和性が高く、ローカルテスト環境をコマンド1つでそのままデプロイできる。

デメリット

Azure Powershellを追加でインストール・Powershellコマンドでログインする必要がある。

Azure CLIを使ってデプロイ

# zipまたはwarからデプロイする
az webapp deploy --name <App名> --resource-group <リソースグループ名> --src-path <ソースコードのパス(zipまたはwar)>
# local.settings.jsonから環境変数を設定する
az webapp config appsettings set --name <App名> --resource-group <リソースグループ名> --settings @local.settings.json

オプション

こちらを参考にしてください。

メリット

Azure CLIさえインストールしていればよく、azコマンドに慣れていれば使いやすい。

デメリット

デプロイ前にZIPに圧縮する必要があり、覚えるオプション・確認する名前が多い。
環境変数の設定ファイル使う場合、別コマンドの実行が必要。

参考

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-core-tools-reference?tabs=v2#func-azure-functionapp-publish
https://learn.microsoft.com/ja-jp/cli/azure/webapp?view=azure-cli-latest#az-webapp-deploy

あとがき

Azure Functions Core Tools、Azure CLIどちらにもメリット・デメリットがあり、理想的には両方使いこなして場合によって使い分けるのが一番効率的に開発出来そうです。
デプロイ作業をしているとき、Core Toolsで上手くデプロイできなかったものが、Azure CLIでは問題なくデプロイできた、ということがあったのでどっちも使えるといいかもしれません(結局このときデプロイできなかった理由はわからないままです……)
Github Actions や Azure DevOps によるCI/CDデプロイ管理もできるので、また記事にしたいと思っています。

ヘッドウォータース

Discussion