MS_IaC - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

IaC (Infrastructure as Code)

概要

Infrastructure as Code(IaC)
(IaC であって、IaaC じゃないよ。)

  • コンピューティング・インフラ(プロセス、ベアメタルサーバ、仮想サーバなど)の
    構成管理・機械処理可能な定義ファイルの設定・プロビジョニングを自動化するプロセス。

  • 従来、手動のプロセスではなくスクリプトや宣言的な定義によって行われていたが、
    IaC の開発は今では、宣言的なアプローチに焦点が当てられている(CodeDSL)。

  • テスト自動化と同様に、

    • 適切なターゲットに有効
    • スケール・メリットが必要。

補足(「IaC であって IaaC じゃない」): 冒頭の注意書きは実務でも有用である。
IaaS(Infrastructure as a Service)に引きずられて
「IaaC」と書かれることが多いが、
Infrastructure as Code なので a は入らない

補足(命令的と宣言的): 原文が言う「Code → DSL」の流れは、
命令的(imperative)から宣言的(declarative)へという変化である。

【命令的】「VM を作れ」「NIC を作れ」「繋げ」…という手順を書く
   → 2 回実行すると 2 つできる(冪等でない)
   → 途中で失敗すると中途半端な状態が残る

【宣言的】「VM が 1 台、この構成で存在すること」という状態を書く
   → 何回実行しても同じ結果(冪等)
   → 実際との差分だけが適用される

冪等性が宣言的アプローチの本質的な利点で、
「今の状態が分からなくても、あるべき状態を書けば収束する」
という安心感が運用を大きく変える。

補足(「適切なターゲットに有効」「スケール・メリットが必要」): この留保は重要である。
IaC は書く手間が先に来るため、

  • 1 回しか作らない環境(PoC で捨てる)、
  • 手順が頻繁に変わる(仕様が固まっていない)、

場面では割に合わないことがある。逆に効くのは、

  • 同じ構成を何面も作る(開発 / 検証 / 本番、顧客ごと)、
  • 作り直しが頻繁(検証環境を毎晩捨てる)、
  • 構成の証跡が要るAzure Virtual Data Center の言う
    「不正作業の防止・牽制」)、

という場面。テスト自動化と同じ判断基準になる、
という原文の対比は的確である。

Code 系

コチラに書いてある様なモノ
(≒ クラウド向けのシェル)。

補足: Azure CLI / Azure PowerShell
スクリプトを書く方式。手順がそのまま書けるので着手しやすいが、
前述のとおり冪等性は自分で担保する必要がある
(「既にあるか確認してから作る」を自分で書く)。

DSL 系

最近の主流となっている、クラウド・インフラ自動化を行うツールの定義。

補足(Azure での選択肢): DSL 系は次のように整理できる。

ツール 特徴
ARM テンプレート Azure ネイティブ。JSON。冗長で読みにくい
Bicep ARM の後継 DSL。ARM に変換される。現在の Azure での第一選択
Terraform HashiCorp 製。マルチクラウド。状態ファイル(tfstate)を持つ
Pulumi 汎用言語(C#、TypeScript)で書く
Ansible / Chef / Puppet OS 内の構成管理が主。プロビジョニングとは層が違う
// Bicep の例:ARM テンプレートの JSON より大幅に短い
resource sa 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageName
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
}

Azure だけなら Bicep、マルチクラウドなら Terraform
というのが現在の一般的な判断。
Bicep は Azure のリソース定義に追随が速く、
状態ファイルを持たない(Azure 自体が状態を持つ)点が扱いやすい。

なお、作った一式をまとめて管理・削除するには
Azure Deployment Stacks を併用する
Azure Blueprints の後継にあたる)。

参考

SlideShare

Qiita

その他サイト

  • SI の労働生産性を高める IaC とは?
    IT エンジニアのためのコミュニティ
    「IaC 活用研究会」キックオフイベントレポート | Think IT(シンクイット)
    https://thinkit.co.jp/article/13749

  • IaC 活用で SI エンジニアの長時間労働をなくせ――TIS とリアルグローブ、
    IaC(Infrastructure as Code)活用研究会を設立
    :IaC の活用でエンジニアの生産性向上目指す - @IT
    https://www.atmarkit.co.jp/ait/articles/1801/23/news029.html

Microsoft Learn


Tags: 移行, クラウド, ツール類, CI, IaC

⚠️ **GitHub.com Fallback** ⚠️