Slide 1

Slide 1 text

クラウドインフラ構築における.NETとその他IaCの比較 1 .NETラボ勉強会 11月

Slide 2

Slide 2 text

山田顕人 == Kento.Yamada 自己紹介 2 ● 活動・仕事など ○ .NETラボ運営、Azure PoC部 ○ 次世代監視基盤の開発、新しいSaaSの検証 ● 受賞歴 ○ Microsoft MVP for Developer Technologies ○ LINE Expert ○ Google Cloud Partner Top Engineer 2025 DataAnalytics ○ Google Cloud Partner Tech Blog Challenge 2023 Cloud AI/ML部門 ○ LAPRAS OUTPUT AWARD 2024 01 ● 最近のトピック ○ Google Cloud Partner Top Engineer 2025を取得(去年のリベンジ) ○ サーバアーキテクチャをサーバレスにできてホッとしてる

Slide 3

Slide 3 text

今日お伝えする内容 3 導入 ● .NET Conf 2024が開催された。個人的には.NET Aspireに注目 ● .NET Aspireって.NET/C#によるオブザーバビリティのIaC(OaC)だよね ● IaCってなんだっけ?課題にはどんなものがある? 本編 ● 問題提起 ● 技術選定 ● .NET/C#でインフラを定義できないか検証した ● 他のクラウドにおけるIaCについて

Slide 4

Slide 4 text

.NET Conf 2024が開催されましたね 4

Slide 5

Slide 5 text

.NET Aspireのセッションに注目した 5

Slide 6

Slide 6 text

OTelに関するセッションがあったこと 6 ※Otel : Open Telemetryの略

Slide 7

Slide 7 text

7 セッション名:Getting Started with OpenTelemetry in .NET .NET Aspireの話だけでなく、オブザーバビリティの話もしている。 👉.NET/C#によるオブザーバビリティの強化、啓蒙が盛んであること

Slide 8

Slide 8 text

.NET Aspire = .NET/C#によるオブザーバビリティの実現 = .NET/C#を使ったOaCのアプローチ 8 ※OaC : Observability as Code

Slide 9

Slide 9 text

補足:OaC(Observability as Code)とは 9 “Observability as Code は、オブザーバビリティツールの設定をコーディングすること によって自動化するプロセスです” 引用:Observability as Codeによる設定の自動化 - NewRelic オブザーバビリティを自動化するための概念 (インフラのコード化にオブザーバビリティを足したもの)

Slide 10

Slide 10 text

.NET Aspire = .NET/C#によるオブザーバビリティの実現 = .NET/C#を使ったOaCのアプローチ = オブザーバビリティを.NET/C#でコーディングする 10 ※OaC : Observability as Code

Slide 11

Slide 11 text

ちなみにMicrosoftのサイトにも記載あり 11 “As much as possible, configuration and management of observability assets such as cloud resource provisioning, monitoring alerts and dashboards must be managed as code. Observability as Code is achieved using any one of Terraform / Ansible / ARM Templates” 引用:Observability as Code - Engineering Fundamentals Playbook

Slide 12

Slide 12 text

ちなみにMicrosoftのサイトにも記載あり 12 “クラウドリソースプロビジョニング、モニタリングアラート、ダッシュボードなどの Observabilityアセットの設定と管理は、可能な限りコードとして管理されなければなら ない。コードとしてのObservabilityは、Terraform / Ansible / ARM Templatesのいず れかを使って実現される。” 引用:Observability as Code - Engineering Fundamentals Playbook

Slide 13

Slide 13 text

.NET/C#がない! 13 コードとしてのObservabilityは Terraform / Ansible / ARM Templatesのいずれかを使って実現される。

Slide 14

Slide 14 text

今日話すこと 14 .NET Aspireが.NET/C#によるOaC(オブザーバビリティのIaC)を実現するなら .NET/C#をベースとしたインフラ構築、.NETによるIaCがあってもおかしくないのでは? 理想: .NET/C#で一気通貫の定義ができないのか。 👆調査と検証してみた!

Slide 15

Slide 15 text

そもそもIaCってどうして必要なの? 15 ● ポータル画面をスクショしたような廃れやすい手順書を作らなくても良い ○ 変更管理あるいは版数管理の煩雑さからの解放 ● 何回操作しても同じ結果が得られるべき等性

Slide 16

Slide 16 text

IaCにおける課題 16 インフラの状態を管理する リソース同士の依存関係を理解する どのIaCを使うかを検討する 学習コストを考慮する

Slide 17

Slide 17 text

インフラのコード化、IaCは難しい! 17

Slide 18

Slide 18 text

.NET/C#アプリケーションのエンジニアが .NET/C#以外の言語でIaCを実現するのか 👆これ大変じゃない? 18

Slide 19

Slide 19 text

.NET/C#じゃなくてもIaCが実現できているのはなぜか 19 ● Terraform / ARM Templates / Bicepがあるだろ ● azd(Azure Developer CLI)があるだろ ● CDK for Terraformがあるだろ ○ これが一番理想に近い。(なお、Terraformが必要) ※ちなみに.NET AspireのAspire Dashboardはdotnet newしてazd upしたら完成 参考:Azure Container Apps の .NET Aspire ダッシュボードを使用してリアルタイム のアプリ データを読み取る | Microsoft Learn

Slide 20

Slide 20 text

でも、.NET/C#で インフラを構築できたらよくないですか? 20

Slide 21

Slide 21 text

.NET/C#でIaCに対応するにはどうしたらいいか 21 point ● .NET/C#で何かを作る/書く = 基本的にはアプリケーション用途 ○ デプロイツールとして使ってもインフラはコードとして残らない 上記を前提にいくつかのアプローチを試していく

Slide 22

Slide 22 text

どのようなアプローチがあるか 22 ● .NET/C# でCDK TF(よく選ばれる選択肢) ● Azure SDK でリソースを作ったあとにaztfexport(今回はコレを試した) ● テンプレートをC# で生成して適用する(だいぶ無理筋)

Slide 23

Slide 23 text

C# でCDK TF 23 簡単に言うと プログラミング言語でTerraformを実行しようぜ っていうやり方 引用:https://developer.hashicorp.com/terraform/cdktf

Slide 24

Slide 24 text

C# でCDK TFの課題 24 ● HashiCorp.Cdktf.Providersの文法に沿ってコードを定義しないといけない ● コンストラクト/スタックを理解しながら実装する必要がある でも、覚えれば便利ではある。

Slide 25

Slide 25 text

Azure SDK でリソースを作ったあとにaztfexport 25 引用:https://learn.microsoft.com/ja-jp/dotnet/azure/sdk/azure-sdk-for-dotnet

Slide 26

Slide 26 text

補足:aztfexportとは 26 AzureリソースをTerraformとしてエクスポートできる 引用:Azure Export for Terraform の概要 | Microsoft Learn どのような方法で作ったとしてもエクスポートできる。 今回はSDKで構築したリソースをエクスポート

Slide 27

Slide 27 text

Azure SDKとaztfexportでIaC、結果どうなったか 27 引用:https://zenn.dev/ymd65536/articles/azurerm_tf_export

Slide 28

Slide 28 text

28 C# Terraform

Slide 29

Slide 29 text

Azure SDKとaztfexportの課題 29 ● Azure SDKによる実装方法を理解しないといけない ○ なお、サンプルはたくさんある。C#は古い文法 ● コンストラクト/スタックという概念がない ○ SDKを使ったソフトウェアの設計が重要 ● aztfexportのインストールが必要 でも、C#でインフラを展開できるようになるのでGood(Terraformレス) ※C#による行数 > Terraformの行数

Slide 30

Slide 30 text

その他IaCの比較 30

Slide 31

Slide 31 text

IaCはさまざまなクラウドで使われている 31 全クラウド共通:Terraform AWS: Cloud Formation / AWS CDK Google Cloud: Jinja2 Oracle Cloud Infrastructure: Terraform Azure: ARM Templates / Bicep

Slide 32

Slide 32 text

AWS: Cloud Formation / AWS CDK 32 ● Cloud Formation ○ AzureでいうARMテンプレートのポジション ○ とりあえずたくさん書いてインフラを定義するパワースタイル ○ YAML or JSON ● AWS CDK ○ プログラミング言語でインフラを定義する(サンプルはTypeScriptが多い) ○ でも、実際はCloud FormationのAPIを実行しているだけ

Slide 33

Slide 33 text

Google Cloud: Jinja2 33 ● Jinja2 ○ Pythonで使えるテンプレートエンジンを使ってインフラを定義する ○ 実態はPythonによるGoogle Cloud APIの実行 実際のところ、Jinja2を使うよりCloud SDKやgcloudコマンドで構築することが多い。 ※本番だとTerraformによるデプロイが多めには見える。

Slide 34

Slide 34 text

Oracle Cloud Infrastructure: Terraform 34 引用:Resource Manager | オラクル | Oracle 日本 https://www.oracle.com/jp/devops/resource-manager/

Slide 35

Slide 35 text

Azure: ARM Templates / Bicep 35 ● ARM Templates ○ 記述量は多め、Azureポータル上で確認できる ● Bicep ○ よく使われる方法 いろいろ書いてはいるけどもAzureにおいてはデプロイツールがたくさんあるので デプロイツールとうまいことコラボしましょう。

Slide 36

Slide 36 text

次回予告 36

Slide 37

Slide 37 text

予定 37 ● .NETラボ勉強会 12月 ○ https://dotnetlab.connpass.com/event/333400/

Slide 38

Slide 38 text

おわり 38