📖

【Azure Mix Book】読書感想文

2023/07/05に公開

はじめに

技術書典14にて「Azure Mix Book」を購入し、読み終えたので読書感想文のような物を書くことにします。
かなりボリューミーだったので読み終えるのに時間がかかりました...。
全8章 読んだ感想を個別で述べていこうと思います。

[そのまえに]購入に至った経緯

私が入社した会社はAzureのサービスを利用しており、以前からなんとなく気になっていました。 Azureでハニーポットを構築して遊んでいましたが、Azure VMをポチポチしてた程度で、AKSやAzure Blobのようなサービスは何も知らない状態でした。

新卒とはいえこれはあまり良くないなと感じつつも、開発したい物が思いつかないため具体的にどのサービスを触れれば良いかわからないなぁと。(Microsoft Leanを触ってもあまりピンと来ず)

そんな中、技術書典でAzureを使った面白そうな本が売られてるじゃないですか。
元々セキュリティ関係の技術書目的で参加していましたが、気が付いたら買っていました。表紙もかわいいし

第1章 Azure OpenAIアプリケーションをAzure Developer CLIで簡単にデプロイ

著者:Tetsuya Isogai(@TetsuyaIsogai)

Azure OpenAi、Cognitive Search、App Serviceなどを使ったopenai-demo-templeteというテンプレートをデプロイするという内容です。

https://github.com/Azure-Samples/azure-search-openai-demo
AZD、各種ツールのインストールや、Azure Subscription内のAzure OpenAIに対するアクセス許可のような事前に必要な手順が詳しく解説されていたので、Azure初心者の私でも簡単にデプロイを行うことができました(スクリーンショットが豊富なのもとてもありがたいです)。

また、デプロイされたリソースの解説もあり、どのリソースがどのような働きをしてくれているのか知れたのもとても良かったです。Azure OpenAI関連のリソースを知りたい方にはうってつけの内容だと思います。PDFからテキストを抽出するリソースもあり、Azureなんでもあるな...と驚きました。

最後にはVNetを用いたアプリケーションの閉域化の方法と解説がありました。VNetの機能は知ってたけど、実際にはこうやって使うのか!と理解を深めることができた気がします。
Azure Developer CLIには他にも様々なサンプルがあるようなので、これから色々触れてみてAzureについて理解を深めていきたいです。

第2章 AKSでKEDAを使ってオートスケールを試してみる

著者:Miho Kurimoto(@Danny_miho)

タイトル通りの内容なのですが、最初私がこのタイトルを見た時Azure、k8sの知識不足も相まって一体何のことか分からず「パルスのファルシのルシがコクーンでパージ」状態でした(笑)

これはまずいということで、とりあえずk8sの基本知識を軽く調べた上で読み始めました。
Kubernetesは結構前から「やらないとな~」と"思うだけ"で腰を据えて勉強していませんでした...。(怠惰すぎてごめんなさい)入門書は持っているので、来月中には読了します。

本題から逸れてしまいました。この章はAzure Kubernetes Service(AKS)の便利な機能や、Kubernetes Event-Driven Autoscaling(KEDA)がKubernetesでどのような働きをしているか、KEDAをAKSに導入し、Azure Blob storageを使ってPodをオートスケールする方法、Azure Log AnalyticsをトリガーとしてPodのスケールを行う方法について解説されています。

オートスケーリングについて調べてた時「CPUの使用率をトリガーにPodを増減してくれるんだね~偉いな~」と思っていたのですが、KEDAでは様々なAzureのサービスをトリガーとしてオートスケーリングを行ってくれるようです。(KEDAすごい!)
CPUの使用率だけではなく、様々なサービスをトリガーとすることでより柔軟なPod管理が行えるというわけですね。

ハンズオンでは、拡張機能のインストール、AKS-KedaPreviewやリソースプロバイダの登録、サンプルの実行までが丁寧に解説されていたのでとてもありがたかったです。Demployment、ScaleObjectのyaml内容も解説されており勉強になります。

この章の読書対象者になるため急ピッチで知識をインプットしたので、まだまだKubernetesやKEDAの知識について整理できていない点があります。
しっかりKubernetes、Azureの理解を深めて改めて読みなおしたい章だと感じました。

大規模な開発になるほど、この辺りの技術が嬉しくなってくると思うので、業務でAzureのサービスを使う際はスケーリングを意識しながら取り組めるようになりたいです!

第3章 Azure上で動く.NETアプリケーションを作る際の注意点

著者:Kazuki Ota(@okazuki)

タイトルでは「Azure上で動く」とありますが、Azure上で動かさない.NETアプリケーション開発で役に立ちそうな知識だなぁと第一に感じました。

とはいうものの、私は.NETアプリケーションの開発はほとんどありません。
が、学生時代にゲーム会社でUnityを使いゲーム開発をしていたので、少しC#については経験があります。

ゲーム開発ではシナリオデータを読み込む時、ユーザーの入力待ちで非同期処理を使っていましたが、.NETアプリケーションでの非同期処理の使い所(?)のようなものを知らなかったのでその辺の知識を得ることができてとても良かったです!

また、文字連結のお話もとても興味深い内容でした。
補完文字列とstring.Formatを使い分ける判断基準(そもそも明確な違いがあることを私は知りませんでした)、連結処理のベンチマーク結果にはとても驚きです。C#って深いんだなぁと思いながら読んでいました(浅すぎる感想)。

HttpClientについては全く無知だったのですが、HttpClientを使うクラスをSingletonのクラスで使用するとDNSの更新に対応できないという点はそりゃそうなってしまうな!と理解できました。

.NETアプリケーションがどのようなタイミングで非同期処理を行うのか、また、HttpClientで誤ったSingletonの使用によって起こる不具合例を知ることができ、とても楽しみながら読ませて頂きました。これらを念頭に置きながらよりよいアプリケーションを作れるようになりたいですね!

第4章 Microsoft Formsを利用して最小権限でAzureリソースをデプロイする

著者:Kazuki Kusaya(@Kusayan_k)

Azure Logics AppsのマネージドIDにデプロイ権限を持たせ、Azureリソースのデプロイ権限がないユーザーの代わりにTemplete Specをデプロイするという内容です。

第1章でVNetを利用し閉域化を行ったことで、なんとなくVNetの有用さを感じていましたが、利用者がプライベートエンドポイントをデプロイする際に必要な権限周りについて考えるまでには至っていませんでした。各章で行っていることの毛色は全く違いますが、こういうところで知識が繋がってくるのがとても面白いなぁと感じました。

個人的にこの章では、権限の制限はもちろん、Azureサービスの連携方法について知見を深めることができたと感じました。特にAzure Logic Appsは、ノーコードで処理を自動化、FormsやTeamsとの連携を行うことが可能であり、とても汎用性の高いサービスだと思いました。

ハンズオンの部分では、デプロイが失敗した時の通知例をたくさん挙げてくれていたので理解が捗りました。

今回はAzure Logic Appsで構成されていますが、著者のKazuki Kusaya(@Kusayan_k)さんが個人の技術記事にて、Automationを用いたパターンの記事を投稿されていますので、そちらの記事を読むことでさらに権限周りの知見を深めることができそうです。
https://www.michikusayan.com/entry/20220904/1662267662
また、Azure Bicepについてもきちんと理解していく必要がありそうです。
今後の課題が多いですね。精進します!

第5章 実践!Azureで作る「おうちデジタルツイン」ハンズオンガイド

著者:Junpei Tsuchida(@07JP27)

著者のJunpei Tsuchida(@07JP27)さんがMicrosoft Azure Tech Advent Calender 2022に投稿した記事のハンズオンガイドという内容です。
https://zenn.dev/microsoft/articles/home-digitaltwin-on-azure
そもそも「デジタルツイン」とはなんぞやとなりますが

デジタルツイン(DigitalTwin)とは、現実の世界から収集した、さまざまなデータを、まるで双子であるかのように、コンピュータ上で再現する技術のことです。
https://www.ntt.com/bizon/glossary/j-t/digital-twin.html

このように定義されています。
ぱっと見これはメタバースと何が違うんだと思い調べたのですが、

  • メタバース・・・必ずしも現実世界と連動しているわけではないデジタル空間
  • デジタルツイン・・・現実空間との連動が前提となっているデジタル空間

このように明確な区別があるようです。
とりあえずこの程度の知識で読み始めました。

最初は単なるシミュレーションに過ぎないのかなと思っていましたが、現実空間と連動しているためリアルタイム性が高いというメリットがあり、都市レベルの仮想空間を構築してシミュレーションを行うというかなり大規模なものに使われているそうです。
もう既にデジタルツインを活用している企業もあることに驚きです。

ここからはAzureでデジタルツインを実現するハンズオンについての感想を書きます。
まず、Azureでデジタルツインを実現する方法として、Azure Digital Twins(以後ADTと略します)を使用しました。ADTはデジタルツイン用に作られたPaaSです。Azureなんでもあるなぁとつくづく思います。

ADTは、現実世界からデータを取得したり、グラフィカルにデータを表示する機能はないそうです。なので今回のハンズオンでは著者のJunpei Tsuchidaさんが用意してくれたサンプルリポジトリを利用します。
ただ、デジタルツインのプラットフォームがあるのにIoTの情報を取得するサービスが無いわけないと思い調べると、どうやらAzure IoT Hubというサービスでraspberry Piを連携させることができるそうです。Azure IoT HubとADTを組み合わせればデジタルツインを実現できちゃうんじゃないか?と妄想してました。(間違ってたらごめんなさい)
IoTをADTと連携して自宅のデジタルツインを構築するってなんかカッコいいですよね。

後半では実デバイスの連携方法について解説されています。しかもSwitchBotを利用してADTにデータを送信した実装も公開されています。IoT、スマート家電には一切知見が無かったのでSwitchBotがスマート家電で幅を利かせているということも初めて知りました。

話が前後して申し訳ないですが、メインのハンズオン部分もとても分かりやすかったです。
写経用モデルファイルやデバイスモデルが記載されており初心者に優しい...。
部屋の3Dモデルも用意されていて至れり尽くせりです。
そういえば、iPhoneに搭載されているLiDARスキャナを使用して部屋の3Dモデルが簡単に作れるという情報を少し前に聞いたことを思い出しました。これを使えばもっと簡単に自室のモデルを簡単に用意できるのかなぁ。(私は泥民なので厳しいです...。)

感想というより私の妄想ばかりをつらつらと書いてしまいましたが、とても想像力が掻き立てられる内容でした。都市から自室まで様々なスケールで利用されているデジタルツインという技術はとても興味深いです!

第6章 コスト最適化な話

著者:Kazuyuki Sakemi(@_skmkzyk)

コスト"最適化"のお話です。コストを削減しすぎて可用性が下がることを懸念してあえて"最適化"というタイトルにされたそうです。なるほど!

そもそもAzureに予約(Reservation)というシステムがあることを知らなかった私にとってはとてもありがたいお話でした。あらかじめ使用する期間が決まっている場合は予約購入しておいた方が間違いなく良いですね。  
為替変動の影響を受けない点も一種の強みだと分かりました。
それと、Reservationの利用率から払い損になっていないか確認することもセットで行うべき超重要事項。覚えておきます。

あと、無駄なリソースをきちんと削除すべきというお話もとても重要だと感じました。
1~5章のハンズオンで様々なAzureサービスを使用したのですが、意外と一部のリソースの削除を忘れていてコストが膨れるというミスをしてしまいました。
「使い終わったら削除する」当たり前ですけど失念しがちです。気をつけます。

他にも、特定のケースでコスト削減の威力を発揮するAzureのサービス紹介があったりと、とてもありがたいお話が詰まっていました。
正直、まず最初に6章を読んでからハンズオンを進めればよかった!と思いました。
が、一度痛い目を見たほうが身に染みてコスト削減の重要性を実感できるとも感じますね...。
可用性との両立を意識しながらコストを削減(最適化)していくことは常に意識しながら設計しないといけません(自戒)。

著者はMicrosoftの方なのですが、Azureを継続的に使ってほしいとのことでコスト最適化の記事を書かれたそうです。お優しい。ありがとうございます。
今後Azureを使う際に6章をチェックリストとして活用しようと思います。

著者の個人記事で2vCPUのコスト比較がまとめられていますので紹介して締めとします。
https://zenn.dev/microsoft/articles/2-vcpu-azure-vms

第7章 Azureで作るエンタープライズな共通基盤環境

著者:Tsubasa Nomura(@tsubasaxzzz)

私事ではありますが、ちょうど基盤構築に関わるお仕事をすることになったので、この内容はとても興味がそそられるものでした。(基盤構築の経験は0のずぶの素人です)

大まかな内容としては、Cloud Adoption Framework(以下CAF)の解説から、具体的なサービスを例にして設計のポイントを解説されています。

まず、CAFについて滅茶苦茶詳細に解説されています。
本章だけでもかなり丁寧に解説されているのですが、加えて参考となるドキュメントも多数提示してくれています。共通基盤の設計に必要な基礎知識が学べるMicrosoft Learnコレクションも作成してくれる徹底ぶりです。本章で設計するうえで気をつけるべきポイントのインプットして、これからMicrosoft Learnを使って実際に手を動かしながら落とし込んでいきたいと思います。

本章を読み進めていく中で、ランディングゾーンを理解するための基礎知識が全く足りていないことを自覚しました...。
ID管理、アクセス管理、ネットワークトポロジ、ガバナンス..etc
Azureサービスそのものの体系的な理解も必須ですが、ネットワークの理解も重要です。
基盤構築むずい!

Log Analyticsの適切な運用を意識して設計を行うべきという点は、もろコスト最適化の話ですので、6章に繋がってくるなぁと思いました。本書は章ごとに独立した内容となっていはいますが、こういうところで知識が結びついてくるのいいですよね。

この章もMicrofot Learn等で修行してもう一度読み返すべきです。(私にとって!)
共通基盤構築の難しさや、Azure、ネットワーク知識の足りなさを実感できましたし、手元に置いておきたいものです。感謝...。

第8章 Azure OpenAIとLangChainでトモダチを作る(第一夜)

著者:Shohei Nagata(@shohei_aio)

トモダチ作りました。

前半にはAzure OpenAI ServiceとOpenAI APIの違いや、LangChainの主な機能の解説がありました。
今までAzure OpenAI Serviceは独立したサービスだと思っていたのですが、Azure Cognitive Serviceというサービスの一部なんですね。(知らなかった)
Azure OpenAIとOpenAI APIの比較表もとても参考になりました。

LangChainの説明もありがたかったです。
OpenAI、GPTが第2のgoogle先生になりつつあるのもこれが核として動いているからなんだなぁと思いました。

後半ではトモダチを作ります。
難しい話は抜きにして、トモダチのプロンプトの作り方の解説です。
サンプルコードにコメントが付いてて分かりやすい!
これを参考にしてコードを弄れば好みのトモダチを作れます。

補足としてプロンプトエンジニアリングのテクニックも紹介されていて、とても面白かったです!第二夜楽しみに待ってます。

Discussion