コマンドラインからAzure Functionの関数アプリをデプロイする
概要
今まで以下の記事でVSCode上でEnd2Endに関数アプリを作成する方法を紹介してきましたが、コマンドライン上からスクリプトで複数のアプリを一括デプロイしたいニーズがあったので方法を調べました。
- Azure Functions Core ToolsでAzure FunctionsをローカルのVSCode上で開発・テストできるようにする
- ローカルで開発したAzure FunctionsをVSCode上からAzureにデプロイする
今回はAzure Functions Core Tools(func
で始まるコマンド)、Azure CLI(az
で始まるコマンド)の2つそれぞれを使ったデプロイの方法を紹介します。今回紹介するのはコードの関数アプリのデプロイで、Dockerやk8sを使ったコンテナ関数アプリのデプロイは少し違うコマンドになるようです。
検証環境
- Windows 11
- Powershell
前提
インストールがまだの場合は以下が必要です。(リンク先はインストール方法のページ)
- Azure Functions Core Toolsを使う場合
- Azure CLIを使う場合
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の関数アプリで処理内容のみ変更する場合はこちらを付けるとデプロイ時間を短縮できます。
- デプロイ中にビルドを行わない。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に圧縮する必要があり、覚えるオプション・確認する名前が多い。
環境変数の設定ファイル使う場合、別コマンドの実行が必要。
参考
あとがき
Azure Functions Core Tools、Azure CLIどちらにもメリット・デメリットがあり、理想的には両方使いこなして場合によって使い分けるのが一番効率的に開発出来そうです。
デプロイ作業をしているとき、Core Toolsで上手くデプロイできなかったものが、Azure CLIでは問題なくデプロイできた、ということがあったのでどっちも使えるといいかもしれません(結局このときデプロイできなかった理由はわからないままです……)
Github Actions や Azure DevOps によるCI/CDデプロイ管理もできるので、また記事にしたいと思っています。
Discussion