質問: `CloudFormation`と`Elastic Beanstalk`の違いはなんですか? 【CloudFormation入門】5分と6行で始めるAWS CloudFormationテンプレートによるインフラ構築 | Developers.IO に AWS Black Belt Online Seminar 2016 AWS CloudFormation の 11ページへのリンクがあります。 この図によると `Elastic Beanstalk`は`Deploy`, `Provision`, `Monitor`の3つをカバーしており、`CloudFormation`は`Provision`のみをカバーしているようです。 そもそも`Provision`というのはAWSでいうと、どこからどのあたりまでを指すのでしょうか? How to install Oracle Java 7 in an Amazon Elastic Beanstalk instance - Stack Overflow を見ると yum について記述があるので、EC2の立ち上げからyumの実行までもろもろやってくれるのが、`Elastic Beanstalk`と考えていいんでしょうか? `Elastic Beanstalk`にも設定ファイルがあるようなので、`CloudFormation`の利点であるInfrastructure as Code (IaC)は`Elastic Beanstalk`にもあると考えていいんでしょうか?あるとしてもIaC具合が`CloudFormation`の方がもっと凄いのでしょうか(`CloudFormation`よりも`AWS CDK`の方が記述力が優れたように)? --- 今だともう `CloudFormation` じゃなくて`AWS CDK`の時代ですかね。参考: AWSによるクラウド入門 `CloudFormation`の次世代版と思われる`AWS CDK`にそもそも deployコマンド がありますし、カバー範囲がやはりよくわからない。おそらくこのdeployコマンドは文字通り配置くらいの意味合いしかないのかもしれないですが。
回答: CloudFormation は、あらゆる aws リソースを as code するものです。 terraform と同じレイヤーのものです。 Beanstalk は、heroku のような形でapplication だけ書けばそれ以外をなるべく自動化するように設計された(主に)ウェブサーバーのための機構です。 ここで、Provion とは何を指すか、という問題が発生しますが、何となくですが、個人的にはサーバーへのミドルウェアのインストールなどのことを指していたと思っています。(毎回のデプロイフローを回せるようになる前に行うこと諸々)そして実際、Beanstalk は Provisioning について任意にカスタマイズできる形でそれを行う機構を提供しています。(Ansible の設定を書いてるような感覚です) CloudFormation について話ししている時、元々 Provisioning とはそういうことを指すため、あまり Provisioning を話題にすることはないと思います。 ここまで書いて、Provisioning の具体例として CloudFormation が amazon のスライドに書いてあることに気づきました。であるならば、「毎回のデプロイフローを回せるようになるためのセットアップ全て」を指しているのではないか、と思っています。 最後にまとめとして、 heroku と terraform が比較不可能なのと同じように、 Elastic Beanstalk と CloudFormation は比較不可能だと個人的には思ってます。