昨年の9月に Azure Functions v2 が GA しましたので、これから .NET で Azure Functions を構築するなら、.NET Core 2.1 ベースの v2 を選択することになります。
今回は、Azure DevOps を使って Azure Functions v2 の CI/CD パイプラインを構築する手順をまとめておきます。
ローカル開発環境
Azure Functions v2 は、Azure にデプロイせずとも、ローカル開発環境で Visual Studio を使って開発とデバッグができます。基本的には、下記の2つのツールがインストールされていれば大丈夫です。
- Visual Studio の拡張機能「Azure Functions と Web ジョブ ツール」
- Azure Storage Emulator
Visual Studio のプロジェクトテンプレートを選択すれば、すぐにローカル開発環境で Azure Functions を実行できますし、Visual Studio の発行機能を使えば、Azure Functions にデプロイすることもできます。
詳細な手順は、公式ドキュメントが分かりやすいです。先日 GA したばかりの Visual Studio 2019 でも、同様の手順で実行できます。
docs.microsoft.com
サンドボックスな Azure 環境であればこの方法でもいいですが、自動でビルドやデプロイを行いたい場合は、Azure DevOps で CI/CD パイプラインを構築するのがお勧めです。
ソースコードのリポジトリ
Azure DevOps のリポジトリを使ってもよかったのですが、今回は GitHub のリポジトリを使いました。上記の手順でプロジェクトを作成し、そのままプッシュしたシンプルなリポジトリです。
Azure DevOps と GitHub の関連付けは、Pipelines メニューから行います。
Build パイプライン
Azure DevOps の Pipelines - Builds メニューより、「ASP.NET Core」のテンプレートを選択します。
Azure Functions v2 向けに、デフォルトの設定から1つだけ変更する必要があります。通常の Web アプリケーションではないので、「Publish Web Projects」のチェックをオフにします。
Save & Queue ボタンを押し、ビルドを実行して結果を確認します。
Releases パイプライン
事前に、Azure Portal から Azure Functions を作成しておきます。今回は、Consumption で .NET 向けの Azure Functions を作成しました。
Azure DevOps の Pipelines - Releases メニューより、「Azure App Service deployment」のテンプレートを選択します。
Azure Functions v2 向けに、デフォルトの設定から2つだけ変更する必要があります。
- App Service type は「Function App on Windows」を選択する
- Additional Deployment Options で「Select deployment method」のチェックをオンにし、「Run From Package」を選択する
Build と Releases パイプラインの関連付け
まず、Releases パイプラインにおいて、Build パイプラインで生成した Artifact を関連付けます。
次に、Build パイプラインの Continuous deployment trigger を有効にします。
最後に、Releases パイプラインにおいて、新しいリリースを作成します。
以上で、Azure Functions v2 向けの CI/CD パイプラインが完成しました。
CI/CD パイプラインの実行
GitHub のリポジトリに変更をプッシュし、CI/CD パイプラインを実行します。トリガーが発火すると、Build パイプラインの Artifact を使って、Azure Functions にデプロイが実行されます。
Azure Portal を開くと、Azure Functions にデプロイされていることが確認できます。
Kudu で「data/SitePackages」ディレクトリを確認すると、Run From Package の zip ファイルが配置されていることが分かります。
まとめ
サーバーレスの Azure Functions ですが、v2 になってローカル開発から CI/CD パイプラインの構築まで、通常の Web アプリケーションと同じように開発できるようになりました。
コールドスタートやVNET統合などに対応した Premium Plan(Public Preview)も登場してきましたし、Durable Functions もあるので、サーバーレスを適用できるシナリオは増えてくると思います。