AWSのIaCはどれがいい?

AWS

インフラストラクチャー・アズ・コード(IaC)もはや、一般化してます。コンパネで作っていてもIaC化を考えてない企業はないでしょう。

AWSの構築を外注するときに、コードで要求する企業も多いです。自社のアカウント内に一気にインフラを作るためですね。他社にアカウント渡して変なもの作られるリスクを避けたいと考えたり、障害でリージョン全滅したときに他のリージョンで再作成して復旧させるといったやり方が考えられます。

で、AWSのIaC化の方法としてはCloudFormation、terraform、CDKの3つが考えられます。その利点と欠点を挙げておきます。

○CloudFormation

jsonかyamlでプロパティを書いていってインフラを記述するというものです。

利点

 パラメーターシートの代わりになる。
 マネコンから構築するのでわかりやすい
 サポートに相談することができる

欠点

 細かすぎるのでマニュアル(それもAWS直訳の)と首っ引きになる
 json選ぶとコメントが書けず、なのでyamlでコメント書くと日本語が使えなかった様な気が(うろ覚え)

○terraform

HashiCorpが作成したオープンソースのインフラ作成ツール。AWSだけでなくGCPやAzureなどにも対応。IaCシェアは一番多いと思われる。

 独自のHCLという言語使うがそんなに難しい言語じゃない。一応分岐やループ文はあるが使わなくても書ける。

利点

 上記のように他のクラウドに対応していて、使う企業も多いので覚えておいて損はない。
 本が出ていて、しかも、Kindle Unlimitedという定額読み放題に登録されているので電子本読みにはラッキー。
 HashiCorpのマニュアルとサンプルコードが懇切丁寧で迷うことはほとんどない。
 サポートはあるのか? 一応、slackのユーザー会のチャンネルがあるのでそこで相談できる(詳しい方がいつもいるので。……本職はなんだろう?)

欠点

 まあ、CloudFormationと同じくプロパティ一々書かないといけないよね(省略できるのはできるが)

○CDK

 プログラム言語(TypeScriptかPython)で書く。コードをCloudFormationのコードにコンパイルして実行する。

利点

 CloudFormationで数百行のコードを数行で書くことができる。
 プログラマにはわかりやすい。
 AWSサポートに相談できる(但し、コードの作成は別料金らしい……)

欠点

 インフラエンジニアがシェルを作れてもTypeScriptやPythonに精通してるわけないだろ!
 少なくとも社員に1人はCDKに詳しい人が必要。業務委託の人は居なくなったらロストテクノロジーとなってしまうので避けた方が無難。
 そんなに普及してない。
 バージョンアップの頻度が高め(2023/03/28現在)
 マニュアルページの記述がバージョンアップに追いついてないので戸惑うし、サンプルもクラス使ってないのにthisを使用していてコピペして動かないという事態があって敷居が高すぎる。

結論

 CDK良いように見えるけど、おっちゃん悪いこと言わないからterraform使いなさい。なお、マネコンで作成したリソースをコードに落とすアプリはCloudFormationもterraformもあります。terraformはterraformerってアプリです。CDKは無理(Former2対応しました)私は思い余って出始めのChatGPTに訊いて作りました。AIバンザイ!!! 2023/12/11の時点でAmazon QとかCode WhispererというCopilotが対応しているのでCDKも選択肢に入ってます。技術は進歩するのだ。

さて、AWSとそのサードパーティーが色々出してきました。
CDKが活発となってきてます。

まず、CDK for Terraform https://sreake.com/blog/cdk-for-terraform/ CDKをTerraformに変換するものです。そしてFormer2でお茶を濁してきたAWSが公式のIaCジェネレーターを出してきました。
https://dev.classmethod.jp/articles/cdk-migrate-iac-generator/

もちろん、CDKだけでなく、Cloudformationにも変換します。https://dev.classmethod.jp/articles/cloudformation-iac-generator-console/

これが何が良いって、[Cloudformation、CDK]で構築した物を[Cloudformation、CDK]で出力できると言うことです。あ、わかりにくいですか? つまり、Cloudformation←→CDKの相互変換をマネージメントコンソール上でできるということです。素晴らしいですね。

今後はインフラエンジニアもTypescriptやPython使うようになるのでしょうか……
私は元プログラマなので平気ですが……

と、なると、パラメータシートが重要になってきます。その辺の話題はこちらで→https://mike2mike.xyz/2021/12/26/aws%e3%81%ae%e3%83%91%e3%83%a9%e3%83%a1%e3%83%bc%e3%82%bf%e3%82%b7%e3%83%bc%e3%83%88%e3%80%81%e7%9a%86%e3%81%95%e3%82%93%e3%81%a9%e3%81%86%e3%81%97%e3%81%a6%e3%81%be%e3%81%99%ef%bc%9f/

2024/02/06気づいて付け加えてますが、CloudformationとCDKの相互変換ができるということは、CDKで作ってパラメータシートをCloudformationで表現できます。

解決じゃ無いですか……

コメント

タイトルとURLをコピーしました