AWS

【AWS】違いが良くわからないサービス(メッセージ・構成管理)

SAAの勉強をしていてテキストだけではよく違いがわからないサービスがあったのでメモしておきます。

SQS・SNS・SES

とりあえずSESについてはメール形式で同時に発信することができるサービスっぽい。メルマガなんかを送信するときに使う。

SNSはあくまでメッセージ通知サービス。SQSは非同期でメッセージをキューイングすることができるため、処理の重いものを複数のEC2インスタンスに分散させることができるようです。

そもそもキューイングって何って感じだったので調べてみると、

メッセージキューイングとは、異なるアプリケーションプログラム間で動作を連携させてデータを交換させる際の方式のひとつで、送るデータをキューと呼ばれるデータ領域に保持し、データを受ける側の処理が完了するのを待たずに次の処理へ移る方式のことである。

とのこと。要するに並列で処理できるようにデータをうまく送ってくれるっぽいです。

そのキューイングをAWSではSQSで実装してくれているということですね。この場合受け手(EC2など)はすべて別々のメッセージを受け取って処理を進めます。

SNSは様々なサービスにメッセージを配信してあげることで、LambdaやSQSに処理をするよう指示をすることができる。SQSはデータを別々の場所に送って並列処理をしてくれるってことですね。

ちゃんと一つ一つ調べれば全く違うサービスでした。

Cloud Formation・Elastic Beanstalk・OpsWorks

構成管理サービスではこの3つが主なサービスですが、私自身に開発経験がほぼないため違いが分かりづらい。

この3つはプロビジョニングとデプロイを理解すればある程度すんなり入ってきました。

プロビジョニングはすぐにサービスが利用できる環境を提供する。
デプロイはアプリケーションを実行するためのファイルを対象のサーバーに配布する。

プロビジョニングはインフラ側だけの話で、サーバーを立てたりデータベースを作ったりするような処理をすることで、デプロイはインフラは関係なくアプリに必要なJavaやPHPなんかのファイルを環境に配置してあげることです。

これを踏まえて各サービスをみてみるとこんな感じ。

  1. Cloud Formation
    AWS内のサービスをすべて自動でプロビジョニングできるサービス
  2. Elastic Beanstalk
    Webアプリケーションなどをサーバーにデプロイでき、かつ実行環境を自動でプロビジョニングしてくれるサービス
  3. OpsWorks
    Elastic Beanstalkと同様にデプロイ、プロビジョニングできるサービス。Chefを利用してサーバーの構成を自動化することができる。

Cloud Formationはわかりやすいですね。とにかく幅広くプロビジョニングできるけど、デプロイはできないので他2つのサービスとは違うことがすぐわかります。

悩んだのがElastic BeanstalkとOpsWorks。両方プロビジョニングとデプロイができます。では違いは何かというと、より詳細な設定ができるかどうかです。

Elastic Beanstalkはとにかくインフラは分からないからWebアプリの実行できる環境を作って欲しいってときに使えます。デプロイだけしたい場合はこちらですね。

それに比べてOpsWorksも同じような機能を提供しているんですが、より詳細に設定することができ、Chefレシピを実行してソフトウェアをサーバーにインストールしたあとにデプロイするなんてことができるみたいです。

実行環境を作るだけならElastic Beanstalk、より細かくソフトウェアをインストールするなどの手順が生じる場合はOpsWorksを利用するという使い分けになりそうです。

まとめ

ソリューションアーキテクトアソシエイト(SAA)の勉強していて悩んだことを整理してみました。

正直オンプレでもインフラの構築経験がある人は悩まないんだろうなーってところが多いのですが、地道に勉強するしかないですね。