AWS3者比較!CloudFormation Elastic Beanstalk OpsWorks
時々どれがどれか混乱してしまう、サービスのプロビジョニングサービスについて、今後混乱せぬよう概要や特徴をまとめて比較していきたいと思います。
先にポイントをお話すると、3つのサービスがそれぞれ違う役割を担うとは限らず、重複して実施可能なことが存在するということです。きれいな役割分担ではなく、一部の操作は2つのサービスで実施可能だったりします。
CloudFormation
- 予め定義したコードに従って自動的にリソースをプロビジョニングする。
- 自動化するため、構築や管理の効率化ができ、さらにインフラストラクチャをコード化することによるバージョン管理ができるようになる。
- CloudFormation自体は無料である。
- CloudFormationの利用にあたって、2つ覚えるべき用語がある。テンプレートとスタックである。
- テンプレートは、プロビジョニングするためのリソースをJSON形式にしたものである。
- スタックは、プロビジョニングされるリソースの集まり、管理単位である。
- テンプレートはAWSのサンプルを参考に作成することもできるし、CloudFormerという、現在作成されているAWSリソースを元にテンプレートを作成してくれるサービスがある。
Elastic Beanstalk & OpsWorks
- アプリケーションのデプロイツールである。
- 構築できるのは、ELB、EC2インスタンス(Auto Scaling Group)、S3バケット、RDS等。
CloudFormation vs. Elastic Beanstalk vs. OpsWorks
- CloudFormationはインフラ部分のプロビジョニングサービス。
- Elastic Beanstalkはアプリの自動配置。
- OpsWorksはChefやAnsibleのような構成管理。
3者使い分けの具体例
私の中でも理解をまとめながらなので、良い例か分かりませんが、3つのサービスを利用した具体例を考えてみました。
ケース:Webサーバの構築
想定するシチュエーションを設けて具体例を考えていこうと思います。今回はAWS上でLinuxベースのWebサーバを構築し、必要なPythonベースのアプリを搭載します。
CloudFormationの役割
CloudFormationの役割はインフラのデプロイなので、予め定義した内容に従って、LinuxOSのEC2をデプロイし、東京リージョン内のAZに配置し、Webサーバ用VPCに所属させます。
OpsWorksの役割
OpsWorksはサーバの構成管理が役割なので、会社のルールで決まっているセキュリティソフトをインストールし、セキュリティパッチの適用をします。また、万が一の障害に備えバックアップの設定をします。
Elastic Beanstalkの役割
Elastic Beanstalkはアプリの展開が役割なので、予め開発してあるPythonベースのアプリをサーバにインストールするだけで、自動でPythonの実行環境が整えられ、ログやアラート等の設定が行われます。
※CloudFormationなしでもEC2やS3の作成もできる模様。ここでの例は「あくまで3者を使った場合の使い分け」としたい。
具体例作成の所感
おそらく大きくは間違っていないと思いますが、いまいち具体的な例が思いつかず、少し不明確な記載が散見される状態となってしまいました。複数のサイトを調べましたが、上記のような粒度で明確な具体例はみつけることができませんでした。
疑問点等
- Elastic BeanstalkとOpsWorksの使い分けについて。Elastic BeanstalkとOpsWorksの具体的な使用方法が知りたい。例えばWebサーバを構築すると想定した場合に、どの部分をElastic Beanstalkで実施して、どの部分をOpsWorksで実施するのが良いのか。もしくは、両方一緒に使うことはあるのか、ないのか。→答えは当記事に記載。
参考
◆Elastic Beanstalkの具体例をイメージする際に参考になったWebサイトです。