ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure DevOps を使って Azure Functions v2 の CI/CD パイプラインを構築する

昨年の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 メニューから行います。

f:id:TonyTonyKun:20190404182141p:plain

Build パイプライン

Azure DevOps の Pipelines - Builds メニューより、「ASP.NET Core」のテンプレートを選択します。

f:id:TonyTonyKun:20190404182220p:plain

Azure Functions v2 向けに、デフォルトの設定から1つだけ変更する必要があります。通常の Web アプリケーションではないので、「Publish Web Projects」のチェックをオフにします。

f:id:TonyTonyKun:20190404182232p:plain

Save & Queue ボタンを押し、ビルドを実行して結果を確認します。

Releases パイプライン

事前に、Azure Portal から Azure Functions を作成しておきます。今回は、Consumption で .NET 向けの Azure Functions を作成しました。
Azure DevOps の Pipelines - Releases メニューより、「Azure App Service deployment」のテンプレートを選択します。

f:id:TonyTonyKun:20190404182246p:plain

Azure Functions v2 向けに、デフォルトの設定から2つだけ変更する必要があります。

  • App Service type は「Function App on Windows」を選択する
  • Additional Deployment Options で「Select deployment method」のチェックをオンにし、「Run From Package」を選択する

f:id:TonyTonyKun:20190404182302p:plain

Build と Releases パイプラインの関連付け

まず、Releases パイプラインにおいて、Build パイプラインで生成した Artifact を関連付けます。

f:id:TonyTonyKun:20190404182318p:plain

次に、Build パイプラインの Continuous deployment trigger を有効にします。

f:id:TonyTonyKun:20190404182331p:plain

最後に、Releases パイプラインにおいて、新しいリリースを作成します。

f:id:TonyTonyKun:20190404182344p:plain

以上で、Azure Functions v2 向けの CI/CD パイプラインが完成しました。

CI/CD パイプラインの実行

GitHub のリポジトリに変更をプッシュし、CI/CD パイプラインを実行します。トリガーが発火すると、Build パイプラインの Artifact を使って、Azure Functions にデプロイが実行されます。

f:id:TonyTonyKun:20190404182415p:plain

Azure Portal を開くと、Azure Functions にデプロイされていることが確認できます。

f:id:TonyTonyKun:20190404182427p:plain

Kudu で「data/SitePackages」ディレクトリを確認すると、Run From Package の zip ファイルが配置されていることが分かります。

f:id:TonyTonyKun:20190404182441p:plain

まとめ

サーバーレスの Azure Functions ですが、v2 になってローカル開発から CI/CD パイプラインの構築まで、通常の Web アプリケーションと同じように開発できるようになりました。
コールドスタートやVNET統合などに対応した Premium Plan(Public Preview)も登場してきましたし、Durable Functions もあるので、サーバーレスを適用できるシナリオは増えてくると思います。