はじめに
皆さんインフラ、コードで書いていますか?私は全く書いたことありません!!
『コードで書いてみな、飛ぶぞ』が口癖のIaC推進派インフラエンジニアの方に師事しております。
IaC???聞いたことあるケド…ってくらいの読者を想定しております。なんせ私も最近までワードしか知らなかったもので。
ただの勉強したことのアウトプットですが、興味ある方に少しでも参考になればと思います。
目次
Pt.1では
- IaCのメリットデメリット
- Terraform or CloudFormation ?
の2項を扱っていきます!
IaCのメリットデメリット
メリット
-
インフラ構築の設定ミス、漏れが減る
コンソールでポチポチする場合、設定をすっ飛ばしてしまったり、誤設定をしてしまう可能性がある。コード化するとミスが減りますね。 -
Gitで管理することができる
Gitで管理できる、つまり構築や変更の差分をバージョン管理が可能になる。また、複数人でレビューができるようになるので、知見が共有できるようになります。 -
テンプレを用意しておけば似た構成ならコピペですぐ作れる
コンソールだといちいち最初からポチポチしなければならないが、コードならコピペと多少の改変ですぐ同じインフラが構築できます。
新規サービスを立ち上げる時も、個人で色々設定していじくりまわして遊ぶ時も非常に便利ですね。
デメリット
-
変更もコードでしなければならない
コードで構築した後にコンソールで変更するとコードと整合性がとれなくなってしまう。 -
学習コストがかかる
そらそうよ
(他にもメリットデメリットはあるのですが、本稿は初心者to初心者なので割愛しております。)
Terraform or CloudFormation ?
IaCといえばTerraformというイメージがあると思いますが、AWS公式のサービスでCloudFormation(CFn)というのもあります。
私としてはGCPはしばらく触らなそうなので、AWS公式サービスのCFnでもいいのでは?と思ったり。というわけで両者の特徴を見ていきましょう。
Terraform
-
記述方式はHCL(HashiCorp Configuration Language)
JSON互換ですが、バージョンによって書き方が変わってしまうのでちょっとハードル高いです。 -
AWSもGCPも対応している
(初心者的には)これが一番メリットなのではないでしょうか? -
CFnよりもネットの情報が多い
QiitaではTerraformタグの記事は1840、CloudFormation記事は1150ヒットする。
あれ、思ったより差があるな…?
CloudFormation
-
記述方式はJSON或いはYAML
はい、めっちゃ楽ですね。AWS内ではJSONで書かれていることが多いです。適当にポチポチしている私でも見かけるレベル。
YAMLの方が読み書きしやすいので、今後例文はYAMLにて書いていきます。 -
AWSでしか使えない
Terraformと違いAWSのみでしか利用できません。GCPを使っている方はこの時点でアウトですね。ですが差し当たりAWSしか使わない人も多いのではないのでしょうか? -
最新のフォーマットバージョンが”
2010-09-09
”
つまり…12年弱書き方が変わってない…ってコト!?
ワ…!!ってどこからか聞こえてきそうですね、今も昔も変わらないフォーマットがここにあります。(もちろん設定値等は続々増えています。)
先のことはわかりませんが、一度習得すればずっと同じ書き方が通用しそうですね。
GCP+TFに浮気していたとしてもCFnは貴方を待ち続けている。かもしれない。
締め
どうでしょうか、IaCは知ってるけど、どういうメリットデメリットがあるのか、Terraformの他にどんな選択肢があるのか少しは知れましたでしょうか。
目下私はAWSを触っていく所存なのでCFnを選択致しました。(だってYAMLで書けるし…)
次回は CFnの記述方法を投稿したいと思います。