背景
広い意味でのIaC(Infrastructure as Code)って本当に色々ある。
Ansible/Terraform/Cloudformation/Helm/Kubernetesなど、
横並びにするにはレベル感もごちゃごちゃだし、どういう使い分けするの?
というふとした疑問からIaC関連ツールの全体像と関係性まとめてみた。
3つのレイヤに分けてみる
コンテナの隆盛がIaCの定義を広げたのと、CI/CDも、Jenkins2.0からJenkinsfileが出来てIaCの仲間入りした感がある。
- IaaSレイヤ(狭義のIaC)
- コンテナレイヤ
- 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フレームワーク
代表例1:Tekton
「Tekton」は、KubernetesネイティブなCI/CDツールです。KubernetesのCRD(Custom Resource Definitions)やControllerとして動作し、Kuberentes環境にデプロイするアプリケーションとの相性が良いのが特徴です。元々サーバレスツールである「Knative」のbuild-pipelineとして開発されていましたが、その後Cloud Delivery Foundation(CDF)のツールの一つとなっています。
代表例2:ArgoCD
「Kubernetes Native」なGitOpsベースのCDツール
- Kubernetesに気軽にインストールして使える
- Gitリポジトリをサポート
- WebのUIとコマンドライン(CLI)を提供
- YAMLでデプロイを記述でき、Gitリポジトリで管理できる
- KustomizeやHelmと連携可能
- 変更検出によるデプロイではなく差分検出によるデプロイ
代表例3:JenkinsX
Not Kubernetes?系
Spinnaker
マルチクラウドCDツール
ビルドパイプライン
StepFunctions
その他
- SCCM
- クライアント系ツールの配布
まとめ(ここまで書いておきながら逆のことを言う、、、)
というか、所感だけど、この手のツールってレイヤ分けしたとしても、相互のレイヤに機能追加で染み出してきている。
レイヤ分けはあくまで源流や得意レイヤがどこかという程度にすぎない。
なので、どれ使えばいいの?っていうのは個別具体の事例を参考に、自分に合っていると思うものを選ぶべきかなと。
あとは、自分が使ってみたい!って思えるツールと心中するのがいいかな。
ツールがいけてなくても、ツールへの愛情があれば努力と根性で何とかなる(はず)。