BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (2/4)

今回は Azure Function Core Tools の CLI を使って Blob Storage へ Zip デプロイ、Run From Package する方法のメモです。前回作成したプロジェクトを使って進めていきます。


- 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 の生成 をクリックします。

f:id:beachside:20181218175714p:plain

有効期限を設定して、「BLOB SAS トークンおよびURLの生成」をクリックすると生成できます。「BLOB SAS URL」の値を Azure Functions のリソースの環境変数 WEBSITE_RUN_FROM_ZIP の値に張り付ければ完了されます。

とは書いたものの、こんなことを(パイプライン組まずに)手作業でやるような開発の現場なんてないとは思いますが。


その他

func azure functionapp のコマンドにはいくつかオプションがあります。以下のコマンドで確認するといいことがあるかもしれません。

func azure functionapp -help

f:id:beachside:20181218174718p:plain

次回、ようやく本題の Azure DevOps に取り掛かります。

beachside.hatenablog.com