Azure Developer CLI がプレビューで利用出来るようになりました

2022.07.13

いわさです。

Azure Developer CLI (azd) がプレビューで公開されました。

クラウドアプリケーション開発者のためのCLIツールで、主にアプリケーションとAzureインフラの初期化とデプロイを行うことが出来ます。
サンプルリポジトリにテンプレートが用意されていて、アプリコード、ツール、インフラが含まれています。
本日時点でテンプレートは以下が用意されています。

  • Node.js
    • Azure App Service + Azure CosmosDB
    • Azure Container Apps + Azure CosmosDB
    • Azure Static Web Apps + Azure Functions + Azure CosmosDB
  • Python
    • Azure App Service + Azure CosmosDB
    • Azure Container Apps + Azure CosmosDB
    • Azure Static Web Apps + Azure Functions + Azure CosmosDB
  • C#
    • Azure App Service + Azure CosmosDB

加えて、Java と Azure Kubernetes Service がサポートされる予定となっています。
本日はこのうちの C# のテンプレートを試しに使ってみました。

インストールと初期化

ツールは Windows, Linux, macOS とクロスプラットフォームで提供されています。
実行環境についてもローカルからコンテナと様々な環境がサポートされていますが、今回は Remote Containers を使った DevContainer を使ってみました。
Docker が必要で、かつコンテナの初期化に少し時間かかるのがデメリットですが、依存関係など含めクリーンにローカル環境保てるので良さそうかなと思いました。

Get started using Azure Developer CLI (azd) Preview | Microsoft Docs

この記事では、macOS上でセットアップを進めていきます。

% curl -fsSL https://aka.ms/install-azd.sh | bash
Archive:  /var/folders/d_/_8lb414x7_sg_kc6y534t_s40000gn/T/tmp.OCEwXwd3/azd-darwin-amd64.zip
  inflating: /var/folders/d_/_8lb414x7_sg_kc6y534t_s40000gn/T/tmp.OCEwXwd3/azd-darwin-amd64  
install-azd: Successfully installed to /usr/local/bin/azd

続いで、テンプレートから初期化を行います。
どうやらazd upからテンプレートを指定して一気にAzureリソース作成まで出来るようなのですが、initから初めてみました。

% azd init --template todo-csharp-cosmos-sql
Initializing a new project in /Users/iwasa.takahito/work/hoge0713azd

? Please enter a new environment name: iwasa0713
? Please select an Azure location to use:  9. (Asia Pacific) Japan East (japaneast)
? Please select an Azure Subscription to use:  1. ほげほげ (hogehoge-hoge-hoge-hoge-hogehogehoge)

Environment Nameは全てのAzureリソースのプレフィックスに使われるとのドキュメント記述がありました。
後述しますが、どうやらリソースグループのプレフィックスとしては使われるようですが全リソースに使われるわけではないようです。

Location と Subscription の選択がスマートで「すげえや」と思いました。
なお、この時点ではローカルにアプリケーションやインフラのコードテンプレート一式を作成するだけで、Azure上へはデプロイはされていません。

テンプレートの構成

今回は特に修正せずにそのままデプロイしちゃいますが、テンプレートの構成を軽く見ておきたいと思います。

まず、アプリケーションコードとしてはフロントのWebアプリと、バックエンドのAPIが用意されています。
Webアプリは React で構築されていて、API は ASP.NET Core で構築されていました。

そしてインフラストラクチャは、Bicepで記述されていますね!今流行りの。

実際には、ここでアプリケーションやインフラ構成をごにょごにょカスタマイズする流れになるかと思います。

デプロイ

続いてデプロイを行います。
本日は先程のテンプレートをそのままデプロイします。

まずは、azd upすれば良いようです。
これによって、全てのAzureリソースが作成され、アプリケーションもデプロイされるようです。

個別に行うにはazd provisionでリソースのプロビジョニングを行い、azd deployでアプリのデプロイを行う流れのようです。

$ azd up
WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.
WARNING: The following tenants don't contain accessible subscriptions. Use 'az login --allow-no-subscriptions' to have tenant level access.
Provisioning Azure resources can take some time.

You can view detailed progress in the Azure Portal:
https://portal.azure.com/#blade/HubsExtension/DeploymentDetailsBlade/overview/id/%2Fsubscriptions%2Fhogehoge-hoge-hoge-hoge-hogehogehogef%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2Fiwasa0713

Created Azure resources

Deploying service api

Deployed service api
 - Endpoint: https://app-api-7pqzunb7xd73o.azurewebsites.net/

Deploying service web

Deployed service web
 - Endpoint: https://app-web-7pqzunb7xd73o.azurewebsites.net/

View the resources created under the resource group iwasa0713-rg in Azure Portal:
https://portal.azure.com/#@/resource/subscriptions/hogehoge-hoge-hoge-hoge-hogehogehoge/res

次々とAzureリソースが作成されています。
初期化時に指定したEnvironment Nameがプレフィックスに使われるとドキュメントには記述があったのですが、リソースグループにしか使われていないですね。
こういう気づいた点があればどんどんフィードバックしましょうね。

完了すると、出力にエンドポイントが表示されますので、service webエンドポイントへアクセスしてみます。

作成されたリソースも少し観察してみましょう。
Bicepテンプレートを見れば把握出来るのでしょうけど、ここでは実際にデプロイされたものを見てみます。

Web と API はそれぞれ別の App Service がデプロイされていて、 App Service Plan は共通です。
App Service Plan は Windows の Basic 1 がプロビジョニングされています。

そして、ダッシュボードを始め、アプリケーション監視のために Application Insights や Log Analytics Workspace などもデプロイされていました。
ダッシュボードは以下のような形式です。

全体像を図にすると以下のような形でしょうか。
データベースは Cosmos DB でした。

後始末

なお、後始末のコマンドも用意されていました。 azd downすると、Azure上からリソースが削除されます。リソースグループごとされました。

さいごに

本日は、Azure Developer CLI を使ってみました。
所感としては AWS でいう SAM CLI に似ていますね。
クラウドワークロード用のアプリケーションとインフラのテンプレートが用意されていて、デプロイからパイプライン構築の仕組みまでが CLI で提供されている開発者ツールという感じです。

本環境でデバッグ実行を行ったり、カスタムテンプレートを作成することも出来ます。
詳細は以下をご参照ください。

また、Azure Developer CLI は現在プレビューです。
気になった点はどんどんフィードバックしましょう!