こちらのブログの続きです。
前回はスタータープロジェクトをローカルで動かしましたが、今回はそのプロジェクトを少し改造してデプロイまでしたいと思います。
Azure Blob Storageコンポーネントの作成
少し改造ということでAzure Blob Storageに接続してみました。
ドキュメントではAzuriteを使用していますが、今回は実際にリソースを作成します。専用のストレージアカウントとBlobコンテナを作成しておきます。
試しにBlobに接続するだけなのでサンプルプロジェクトのAPIに、配列をJSON化してBlobコンテナーにアップロードする処理を足しました。トレースがどのように変化するか確認します。
失敗談とエラーの観測例
その前にエラー例について書かせてください。
上記の処理を実装する際に、接続文字列を記述するプロジェクトを間違えてしまいエラーが起きてしまいました。(APIプロジェクトではなくオーケストレータのプロジェクトに記述する)
ちょうどよかったのでトレースを確認します。余談ですがAzure Blob Storageコンポーネントはログとトレースのみサポートしていて、メトリックはサポートしていません。
トレース画面
ステータスコードがエラーのスパンは赤い!マークがついています。この画面から何度かリトライの処理が走っていることがわかりますね。このようにトレーシングを行うことでどの通信の部分でエラーが起きたのかを視覚化することができます。
成功した際のトレース画面
最後のスパンにある通り作成したストレージアカウントへのリクエストが成功していることがわかります。
Aspireプロジェクトのデプロイ
現在サポートしているのはAzure Container Appsのみで今後Azure Functionsなどデプロイ可能なリソースが増えていく予定らしいです。
ドキュメントを参考にしてデプロイを行っていきます。現時点で.NET Aspireプロジェクトをデプロイするもっとも簡単な方法はAzure Developer CLIを使用することです。
とりあえずリソースの作成までできましたが、なぜかストレージアカウントも作成されていました。調べたところオーケストレータのプロジェクトに.AddAzureStorage()の記述があるとストレージアカウントを作成するようです。
既存のストレージアカウントに接続するために必要な記述ですが、どうしたものか。両方のストレージアカウントのBlobコンテナーを確認したところ、jsonファイルのアップロードはされていませんでした。
なのでAPI側のコンテナのログを確認します。
(本当はダッシュボードの画面から見に行きたかったのですが、デプロイ後にダッシュボードをどう見るかのドキュメントが見当たらず諦めました。そもそもダッシュボード画面をデプロイできていないと思うので今後の情報に期待です。)
Blobコンテナーが存在しないエラーでしたね。とりあえず作成された方のストレージアカウントにazure portalからコンテナーを作成してみます。
もう一度フロントからAPIをたたいたところ、デプロイ時に作成されたストレージアカウントのBlobコンテナーにファイルがアップロードされていました。
この事象について
そもそもとんだ勘違いをしていたようで、おそらくローカルで実装した際のストレージアカウントは開発用扱いでデプロイ時に本番環境用のリソースをすべてそろえてくれる的な感じだと思います。テストで動かしていただけなので自分で作ったストレージアカウントは冗長性をLRSにしていたのですがデプロイ時に作成された方はGRSで作られていたりとその辺のカスタマイズ性についてさらに調べる必要がありそうですね。
使いこなせさえすれば、ContainerAppsなどのリソースを勝手に作ってくれるので大変便利だと思いました。使いこなせさえすれば、、、、、
最後に
OpenTelemetryに関するアップデートだったので今回.NET Aspireについて調べて動かしてみましたが、クラウドネイティブアプリケーションの開発ということで今後どう進化していくのかとても気になります。
個人的には少し前にAzureApplicationGatewayのトレースを取得しようとして断念したことがあったので、その辺ができるようになってくれるとうれしいなーと思います。2024年春頃リリース予定ということで目が離せません。
最後までお読みいただきありがとうございました。