2/21 に第35回ZEALOT勉強会を実施しました。
テーマは、「CDKで新しい IaC を体験しよう」ということで、IaC の歴史と、AWS がオフィシャルに提供している CDK (Cloud Development Kit) についてお話ししていただきました。
CDK は CloudFormation より後発のツールであり、記述方式は DSL を超えて高度なプログラミングになってきています。
CloudFormation との比較や、便利なところなど、エントリー向けに解説いただきました。 開発業務の中で何かしら IaC に関連することに触れたことがあったり、手動でインフラを構築することに違和感を覚え始めた、という人向けのお話でした。
IaC とは
IaC とは、Infrastructure as Code を省略したもので、「コードで表現されたインフラ」です。
利用目的にあったサーバをすべてコードで書き起こし、いつ誰が実行しても同じ状態に構築可能にするためのものです。
IaC のざっくり歴史
- 手動管理時代(〜2005)
- 手順書を利用
- 自前シェルでサーバ構築を自動化
- Puppet(2005年〜)シェルでやっていたことをグローバルに標準化するためステップをモジュール化した。
- Chef(2009年〜)構成管理対象デバイスに別途ソフトウェアのインストールが必要となるエージェントモデル
- Ansible(2012年〜)エージェントレスモデル。リモートシェルで実行可能。
- Terraform(2014年〜)「サーバを構築する」から、「インフラ全体を構築する」へ目的がシフト。
AWS における IaC
CloudFormation (2010~)
- 問題点
- コメントが書けない
- JSON形式のファイルではコメントを書くことができない。
{}
,[]
が多用され読みにくい。
- コメントが書けない
- 1年後
- YAML形式がサポートされた。
IaC の範囲を比較してみる
レガシーなインフラストラクチャの場合 |
クラウドサービスでのインフラストラクチャの場合 |
CDK とは?
CDK (AWS Cloud Development Kit)
使い慣れたプログラミング言語を使用してクラウドアプリケーションリソースを定義するためのオープンソースのソフトウェア開発フレームワーク。
- メリット
- 学習コストが低い
- 様々なプログラミング言語でCDKを利用できるため、CDK を開始・利用しやすい。
- テストしやすい
- プログラミング言語でインフラを構築することになるので、そのプログラミング実装はテスト可能です。
- コンテキストスイッチが不要
- 学習コストが低い
- サポートしている言語
- JavaScript
- TypeScript
- Python
- Java
- C#
- Go(開発者プレビュー)
- Low-Level Component と High-Level Component
- High-Level Component を使うとCDK の恩恵を受けやすい(記述量が少なく、簡単に構築できる)
- Low-Level Component で細かい制御が必要。
CloudFormation と CDK の比較
CloudFormation は Low-Level な IaC ツールであるため、すべての設定を詳細まで記述する必要があります。 実際にCloudFormation と CDK で同じAWSの構成を作るコードにより比較してもらいました。
よくある構成 VPC と 2-tier な Multi-AZ Subnet を作る時の記述量が以下の画像のようになります。 一目瞭然ですね!
CloudFormation で記述する量 |
CDK で記述する量 |
CDK ここがいい(個人的意見)
- CDK は後発ツールだけあって、非常に便利に作られている。
- CDK は他のツールを駆逐するようなものではなく、共存できる
- CloudFormation Template を扱える。
- Terraform とインテグレーションする仕組みがある。
- VS Code を使えばコードサジェストがバンバン出てくるのでコーディングスピードが爆上がりで、記述ミスもほぼなくなる(CloudFormation だと実行するまで気づかない)
- アプリ実装の言語と統一することができるかもしれない。
- 実際、書いていて楽しい←これ重要
まとめ
これまでの歴史であらゆるツール・思想のものが出てきましたが、クラウド時代は「リソースをオブジェクトとしてとらえて、コードで構成を表現する」という考え方が必要になってきたように思います。