今回は Azure Function Core Tools の CLI を使って Blob Storage へ Zip デプロイ、Run From Package する方法のメモです。前回作成したプロジェクトを使って進めていきます。
Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (1/4)
- Run From Package とは
- Azure Functions V2 (C#) のサンプルアプリ作成
- Visual Studio から Zip デプロイ、Run From Package
- Run From Package の設定と Zip デプロイの動作
Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (2/4) : 今回!!
- Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (3/4)
- Azure Repos にソースを Push
- Build Pipeline の作成
- Release Pipeline の作成: Functions のローカルへ zip デプロイ編
- Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (4/4)**
- Release Pipeline の作成: リモート (Blob) へ zip デプロイ編
ソースのプロジェクトは、前回作成したものを引き続き使います。
Azure Function Core Tools の CLI
コマンドは、Azure CLI ではなく、Azure Function Core Tools の CLI です。Functions の開発してる人ならおなじみ?の func
から始まるやーつです。
Azure Function Core Tools インストールは以下の公式ドキュメントに書いてます。v2をインストールです。
Azure Functions Core Tools の操作 | Microsoft Docs
Azrure CLI じゃない時点で、なんかめんどいなーという気もしますし、ドキュメントないよねー(コマンドのヘルプ見ればわかるけどさ....アップデートした機能をキャッチアップがのつらかったとか...修羅みがありました....)という心の叫びはありました。
Azure CLI で Az login
func
のコマンドで話を進めるのですが、その前に Azure CLI で Azure にログインが必要です。以下をやっておきましょう。
az login
でログインしておきましょう。az account list -o table
でこれから操作したい サブスクリプションにいることを確認しましょう。違うサブスクリプションにいる場合は、az account set -s <id or name>
でセットします。- ディレクトリーは、Functions のプロジェクトに移動します。ソリューションファイル(
.sln
)ではなく、対象のプロジェクトの.csproj
ファイルがあるディレクトリーです。
CLI で Blob への Zip デプロイ
func
のコマンドを使って Blob Storage へ Zip デプロイをします。と一言でいいますが、これから行うコマンドをたたくと実行される内容は、2018年12月時点だと以下になっています。
- zip のパッケージを Azure Functions の Storage の Blob へアップロード
- Storage は、Azure Functions のアプリケーション設定「AzureWebJobsStorage」に設定されてる Storage
- Blob のコンテナー名は「function-releases」
- ファイル名は <UTC時間のyyyyMMddHHmmss>-
にリネーム - Azure Functions のアプリケーション設定で
WEBSITE_RUN_FROM_ZIP
にこのファイル(Blob)の url + SASトークンをセット
え?WEBSITE_RUN_FROM_PACKAGEじゃない...GAする前の以前の環境変数名のままですね。読み込む実装にはなってるけど混在すると気持ち悪いですね。
では、今回は、Azure Functions のリソース名が「FunctionApp25」の場合、コマンドは以下となります。
func azure functionapp publish FunctionApp25
これで、前述した動作が実行されます。環境変数名が旧バージョンの名前(WEBSITE_RUN_FROM_ZIP
)のままですので、WEBSITE_RUN_FROM_PACKAGE
と両方が入っているケースも考えられます。この場合、現時点では WEBSITE_RUN_FROM_ZIP
の値が優先されます。といっても二つあると意味わからんので、運用は気を付けましょう。
もし古いバージョンにすぐ戻したかったら、Azure Functions のリソースの環境変数 WEBSITE_RUN_FROM_ZIP
の値を更新すればよいですね。
SAS トークンの生成について書いておくと、Azure Portal で対象の Blob Storage の「function-releases」コンテナーを開き、戻したい zip ファイルの右のほうにあるボタンをクリック > SAS の生成 をクリックします。
有効期限を設定して、「BLOB SAS トークンおよびURLの生成」をクリックすると生成できます。「BLOB SAS URL」の値を Azure Functions のリソースの環境変数 WEBSITE_RUN_FROM_ZIP
の値に張り付ければ完了されます。
とは書いたものの、こんなことを(パイプライン組まずに)手作業でやるような開発の現場なんてないとは思いますが。
その他
func azure functionapp
のコマンドにはいくつかオプションがあります。以下のコマンドで確認するといいことがあるかもしれません。
func azure functionapp -help
次回、ようやく本題の Azure DevOps に取り掛かります。