IaC関連ツールまとめ


背景

広い意味でのIaC(Infrastructure as Code)って本当に色々ある。

Ansible/Terraform/Cloudformation/Helm/Kubernetesなど、
横並びにするにはレベル感もごちゃごちゃだし、どういう使い分けするの?

というふとした疑問からIaC関連ツールの全体像と関係性まとめてみた。

3つのレイヤに分けてみる

コンテナの隆盛がIaCの定義を広げたのと、CI/CDも、Jenkins2.0からJenkinsfileが出来てIaCの仲間入りした感がある。

  1. IaaSレイヤ(狭義のIaC)
  2. コンテナレイヤ
  3. CI/CDレイヤ

1つ目のレイヤ: IaaSレイヤ(狭義のIaC)

歴史と概要

ChefとPuppetの2つを覚えておけばOK。と思っていたら、時代が随分と進んできて、Ansibleではエージェントレスになったり、随分と便利になったなと。

Puppet(2005) -> Chef(2009) -> Ansible(2012) -> Terraform(2014)
https://employment.en-japan.com/engineerhub/entry/2019/04/12/103000

代表例1:Ansible

エージェントレスのIaCツール

漫画でわかるRed Hat Ansible Automation

代表例2:Terraform

10分で理解するTerraform

インフラストラクチャ定義ツール に分類されるツールで、クラウド上のリソースを定義ファイルの状態になるように生成・操作してくれます

Infrastructure as Codeに疲れたので、僕たちが本来やりたかったことを整理する

Terraform Registry

誰かが作ったmoduleを再利用できる

代表例3:AWSやOpenStack用のツール

個別ツール専用のIaCもかなり流行ってきている。
* CloudFormation:AWSの構築自動化
* OpensStack Heat: OpenStackの構築自動化

2つ目のレイヤ: コンテナレイヤ

このレイヤは更に3層に分けます。やっぱりオーケストレーションのオーケストレーションが出て来たのがポイントかなと。

2-1 コンテナ/仮想

  • Docker
  • VMWare

2-2 コンテナオーケストレーション(仮想含む)

  • Docker Compose
  • Kubernetes(EKS/IKS/GKE)
  • ECS
  • Vagrant

2-3 コンテナオーケストレーションのオーケストレーション

  • Helm

Helm

Kubernetes上のアプリケーションを一括管理する仕組み。yumやaptなどのパッケージ管理ツールのようなもの

helmを使ってKubernetesを楽にする

KubernetesでつらいYAML地獄を脱却するYAML生成ツール

3つ目のレイヤ: CI/CDレイヤ

Jenkinsを覚えておけばOKという時代は終わったなと。まずはビルドフローをYAMLで書くっていうイメージを持っておく感じ。

Kubernetes系

Kubernetes前提のCI/CDフレームワーク

Tekton

JenkinsX

ArgoCD

Not Kubernetes?系

Spinnaker

マルチクラウドCDツール
* 「継続的デリバリ」(CD)を実現できるコンテナクラスタ管理ツール「Spinnaker」
* Immutable Infrastructureを強制する

ビルドパイプライン

StepFunctions

その他

  • SCCM
    • クライアント系ツールの配布

まとめ(ここまで書いておきながら逆のことを言う、、、)

というか、所感だけど、この手のツールってレイヤ分けしたとしても、相互のレイヤに機能追加で染み出してきている。
レイヤ分けはあくまで源流や得意レイヤがどこかという程度にすぎない。

なので、どれ使えばいいの?っていうのは個別具体の事例を参考に、自分に合っていると思うものを選ぶべきかなと。
あとは、自分が使ってみたい!って思えるツールと心中するのがいいかな。
ツールがいけてなくても、ツールへの愛情があれば努力と根性で何とかなる(はず)。