Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ぼくの考えた最強のiaC

 ぼくの考えた最強のiaC

Avatar for うひーまん

うひーまん

March 20, 2026

Other Decks in Technology

Transcript

  1. 今までのやりかたまとめ Shell芸最強 GUI操作 CLI操作 Shell芸 メリット ・操作が簡単 ・習得が早い ・追加リソース不要 ・詳細設定が簡単

    ・再現性あり ・デバッグできる ・条件分岐できる ・複数リソース作成時に強み ・マルチクラウドも構築可能 デメリット ・詳細設定が煩雑 ・誤操作による設定ミス ・デバッグできない ・コマンド理解が必要 ・学習コストがかかる ・大規模環境には不向き ・属人性が強くなりがち ・追加環境とShellが必要 ・複雑性が増す 評価 素人みたいにみられる ややかっこよく見える 職人みたくみられる
  2. IaCの種類 宣言型 中間型 プログラミング型 YAMLとかJSONとかで設定内容を 記述してコマンドラインでテンプ レートファイルを読み込んでリ ソースを構築する. テンプレートファイルを修正して 流しなおせば構成の変更も可能

    専用ツールをインストールし、 DSL(ドメイン固有言語)でインフ ラのリソースを記述してDeployし てインフラを構築する。一応、繰 り返しや条件分岐できる。 プログラミング言語を使用して、 リソースをプログラムの様に記述 できる。内部で宣言型とか中間型 のスタックに置き換える形式のも のが多い。 対応言語は TypeScript/Python/C#/Javaの ケースが大半だが専用ツールの installがnpmってケースが多く、 TypeScriptが中心で他の言語使っ てる事例は少ない。 ・AWS Cloud Formation ・Azure ARM Template ・Google Deployment Manager ・ちょっと特殊 ・Crossplane ・Ansible ・Terraform ・Open Tofu ・Azure Bicep ・AWS CDK ・CDK for Terraform(CDKTF) ・Plumi
  3. AWS Cloud Formation ・スタック単位でリソースを管理して、よしなにしてくれる ・テンプレートはYAMLもしくはJSONで記述 ・AWS CloudFormation デザイナーでグラフィカルに管理できる ・SAMとかServerless Framework、AWS-CDKも行きつく先はコレ

    宣言型 Azure ARM Template ・リソースをグループ単位で管理して、よしなにしてくれる ・テンプレートはJSONで記述する ・手動作成したリソースからテンプレート出力できる Google Deployment manager ・リソース単位でテンプレートファイルを記述する ・JSON, YAML, Python, Jinja2というフォーマットで柔軟な管理ができる ・2026年3月末でサービス終了、もはや使う理由はない (ファイル分割とかきれいにできたので結構好きだったが残念)
  4. プログラミング型 AWS CDK ・AWS謹製なので当然、AWSのみでしか使用できない ・結構、頻繁に更新されている ・L3コンストラクタを使えば少ない記述量でリソースを表現できる CDK for Terraform (CDKTF)

    ・Hashi Corp製のCDKでいろんなサービスで使用できるようになってる ・Terraformからインポートエクスポートできたりする ・開発止まってるけど大丈夫か(大丈夫ではなかった) Plumi ・スタック作るタイプと違って純粋にプログラムでリソースを操作できる ・なんか巷では評価は高いみたいだが触っていないのでよくわからない ・採用が少なくマイナーすぎて知見が少ない
  5. IaCの3タイプ比較 宣言型 中間型 プログラミング型 使用言語 JSON/YAML等 DSL TypeScript,Python,Java,C# 学習コスト JSON/YAMLの構文のみ。

    直感的に理解しやすい。 HCL等の独自DSLの学習が必要 言語仕様 + 中間スタック仕様+ ク ラス設計の理解が必要。 抽象化 リソース定義が冗長にな りがち。 モジュールによる再利用が可能。ロ ジック記述するとトリッキーになっ て可読性が落ちる。 クラス継承、ループ、関数化によ り高度に抽象化可能。 マルチクラウド もともと想定されていな い 単一ツールで多数のプロバイダを統 合管理可能。BicepはAzure特化 Pulumi、CDKTFは対応。CDKは AWS特化 状態管理 ユーザ側で意識する必要 がない tfstateファイルの安全な管理 (S3+Lock等)が必須。 CDKはAWS依存、それ以外はス テートファイルの管理が必要 総評 クラウド単体なら一番簡 単に管理できる。小規模 であればこれがおススメ ちょっと込み入った構成やマルチク ラウド管理ならこちらがおススメ アプリケーションと同じような感 覚で管理できる。テストとかしっ かりやりたい場合はこちらがおス スメ
  6. 何がしたいのか コンテナ+RDBMS構成でVPN接続したマルチクラウドのAPIバックエンド構成作りたい。 (現在も継続中) Virtual private cloud (VPC) VNet Cloud Run

    Cloud SQL Cloud Load Balancing Applicationg ateway Container Apps Virtual NetworkGateway AWS Site-to-Site VPN Cloud VPN Flexible Database Amazon ECS Amazon RDS Elastic Load Balancing
  7. が、現実はそう甘くない Constructs記述 オーケストレータ記述 スナップショットテスト なぜか実際にリソース作成し てテスト ・リソースが正しくできるかはやはり手動テストしないと不明 ・コンパイル通ってもリソース作ると謎のエラー ・AzureのVPNリソースが作成完了までに1時間 ・Azureマジでデプロイ遅い、殺意が芽生えました

    ・GoogleもDestroy時に意味不明のエラー ・バグらしくIssueで上げられてるが修正見通しなし、手作業 ・プロパティ名がterraformと違って混乱・・・ ・おまけにGoogle・AzureはMySQL8.4、Postgre18まだ、未対応・・・ ・なんで・・・意味不明
  8. なんとコミュニティの方々が・・・ Xユーザーのk.gotoさん: 「CDKTF (CDK for Terraform) がコミュニティ駆動の継 続版として CDK Terrain

    (cdktn) という 名前に変わり、Open Construct Foundation (OCF) によって開発が引き継 がれるそうです。 https://t.co/tRheplfY8N」 / X
  9. GitHub覗きに行きました open-constructs/cdk-terrain: Define infrastructure resources using programming constructs and provision

    them using OpenTofu/Terraform リリースされてる じゃないですか!!! (2月4日のことでしたね・・・)
  10. そして移行(1時間ほどで終了) Migrating to CDKTN - CDK Terrain (CDKTN) ・作業用Dockerコンテナ修正 ・cdktnインストール

    ・tenvいれてterraformとOpen tofu入れる ・コマンドにシンボリックリンク張る ・新コンテナ立上 ・ソースコード修正 ・importしているライブラリの[cdktf]を[cdktn]に書替 ・package.json書替 ・npm installで依存パッケージインストールしなおし ・最後にスナップショットテスト(npm run test)走らせて ・テストはすべてGreen ・コマンドはcdktfと変わらない!!!!