はじめに
昨今、AWSを使ってクラウド上にアプリ開発をしたり、オンプレミスの既存のアプリをAWS等のクラウドサービスに移行しよう、といった動きがますます大きくなっています。オンプレミスとは、自社内のデータセンターやサーバーを使ってシステムを構築・運用することを言います。
わかりやすい構成としては、EC2インスタンスを作成してそこにアプリを乗せて動かす、ということになりますが、今ではAWSが次々と新しいサービスを提供しており、それを使えば実装しなくてよいものだったり、今まで苦労してやっていたことを簡単にAWSのマネジメントコンソール上から実現できたりします。
今回はAWSをどのように活用していけばよいかということについて、取っ掛かりになる部分を書いていきます。
EC2インスタンスにただ乗せるのはオンプレミスの考え方
EC2インスタンス(一般的に言う仮想サーバ)を1台立てて、そこに必要なミドルウェアやアプリケーション、データベースをすべて乗せて動かす、というのが最も簡単でイメージしやすいAWSの使い方です。
単にEC2インスタンスに乗せるだけでも下記のメリットがあります
- バックアップが容易に取得できる
- サーバスペックを簡単に変更できる
- 使用しない時間帯にサーバを停止させておくことで費用を削減できる
- etc…
しかし、今まで物理サーバに乗せていたものを単にEC2インスタンス上に載せ替えただけで、クラウドにアプリを乗せているメリットをまだ十分に享受できているとは言えません。
マネージドサービスを活用する
AWSには多数のサービスがあり、日々アップデートが繰り返されています。
新サービスがいきなり追加されることもあります。
代表的なサービスとしては
- RDS(リレーショナルデータベース)
- S3(ファイルストレージ)
- Route53(DNS)
- ELB(ロードバランサー)
- Lambda(サーバレスコンピューティング)
- CloudWatch(監視、定期実行など)
などがありますが、これもほんの一部でしかなく、他にも多数のサービスがあります。
これらを活用することのメリットの例として下記が挙げられます。
- これらの機能を実装したり、ミドルウェアを自分でインストールしなくてよい
- これらの機能をもったサーバを自分で管理しなくてよい
- サービスの可用性はAWSが担保してくれる
- 1サーバに多くの機能を持たせすぎずに、機能を分散させられる
すべてをサーバに実装すると、そのサーバやOS、ミドルウェアなどを自分たちで管理しなければなりません。
小規模なシステムならよいのですが、長く運用するシステムや巨大なシステムなどになると、それらの運用コストが積み重なっていきます。
使える部分に適切にマネージドサービスを使用することにより、開発・運用を少しでも楽にできるよう検討していくべきでしょう。
また、AWSには責任共有モデルという考え方があります。
AWSがサービスとして提供してくれる部分と、ユーザ側が管理しなくては行けない部分はこの考え方に基づいて切り分けられます。
※参考
責任共有モデル
https://aws.amazon.com/jp/compliance/shared-responsibility-model/
EC2インスタンスをできるだけステートレスにする
また、EC2インスタンスにあまり多くの情報をもたせすぎないことも重要です。
クラウド上に構成するサーバは簡単に停止、開始、あるいは破棄して作り直したり、コピーしたりすることができます。
サーバを複数台使って冗長化する構成にするには、サーバを立てたらすぐにサービスに使えるようにする必要があります。
そのためにはアプリケーションやミドルウェアの設定などはなるべくサーバ内ではなく他のところに置いて、サーバを立てる際にそれらを取得するようにし、ログファイルもサーバの外(AWSにおいてはS3に保存するか、CloudWatch Logsに送るのが一般的です)に保存するようにするなどの工夫が必要です。
そうすることによって、サーバリソースが足りなくなってもサーバを追加するだけで可用性を上げたり、サーバが不調になってもサーバを入れ替えるだけで復活させる、ということが実現できるようになります。
Photo by Jefferson Santos on Unsplash
必要に応じてサーバレスの構成を検討する
たとえば、静的サイトであればサーバは不要でS3に配置するだけで表示させることも可能です。
処理の内容によってはLambdaを中心にして、EC2インスタンスを使用しないで処理をさせることもできます。
サーバを立てれば、言ってしまえばなんでもできてしまうのですが、機能を組み合わせることで一切サーバを立てず、それどころかものによってはコードも一行も書かずに実現できるようになるものもあります。
EC2インスタンスを立てるとインスタンスの費用が発生しますし、当然インスタンスの管理コストも発生します。
サーバレスと聞くと難しく考えてしまうかもしれませんが、大きなシステムだけではなくて小さな処理をさせるなど、簡単に行えることもあります。
どのサービスで何ができるのかを把握しておくことがより重要になります。
まとめ
いかがだったでしょうか。
AWSには本当に役に立つ様々なサービスがあります。
EC2インスタンスにアプリを乗せるのは最初の段階で、クラウドサービスに乗せている以上は提供されているサービスを有効に活用して開発・運用を楽にしましょう。
多数のサービスがありますが、まずは主要なサービスの概要を把握してどのように取り入れられるかを検討するところから始めるとよいでしょう。
No Comments