AWS Serverless Architecture

エンジニアの山田です。 弊社に入社するまでインフラは全くの守備範囲外だったのですが、ここしばらくはAWSを扱わ…

エンジニアの山田です。

弊社に入社するまでインフラは全くの守備範囲外だったのですが、ここしばらくはAWSを扱わせてもらう機会が多く、日々勉強中です。
最初こそサービスの多様さに圧倒されましたが、色々なパターンのアーキテクチャを見ていると、こんな使い方もできるのか、という発見ばかりでとても楽しいです!

そういった中で最近知った「Serverlessアーキテクチャ」というものが興味深かったので、今回紹介したいと思います。

 

Serverlessアーキテクチャとは?

AWS上にサーバを構築する場合、オーソドックスな構成だと以下のような形になるかと思います。
スクリーンショット 2016-11-09 1.12.52
このような構成も手軽に構築できてしまうのがAWSの便利なところです。

しかし、EC2はなかなか手のかかる子で、可用性を考慮してサーバを冗長化させたり、OSやミドルウェアの日々のメンテナンスなどはユーザ側で面倒を見る必要があります。
贅沢を言うようですが、これがなかなか面倒なんですよね・・・。

 
そんなときに便利なのが、S3やDynamoDB、Lambdaをはじめとしたフルマネージドサービスと呼ばれるサービスたちです。
これらのサービスは、冗長化やOS・ミドルウェアのメンテナンスといった部分までまるっとAWS側で担保されており、インフラ的な部分をほとんど意識せずに利用することができます。

それじゃあフルマネージドサービスだけで構成したら運用保守の手間がかからないんじゃない?
というのが「Serverlessアーキテクチャ」の発想です。
ここでいうサーバレスというのはサーバがないという意味ではなく、サーバのメンテナンスを意識しなくて済むという意味なんですね。

具体的な構成例として「2-Tier」と「3-Tier」が挙げられます。
それぞれどのような構成になるのか見てみましょう。

 

2-Tier

クライアントから直接AWSサービスを使うというのが「2-Tier」の構成です。
以下のような形になります。

スクリーンショット 2016-11-09 1.19.33

クライアント → 各種AWSサービス
という2層構造になっているのがわかるかと思います。

このような構成にすることでシンプルで低コストな構成を実現することができます。
ただ、クライアント側にAWSを使う処理をがっつり実装ことになるので、複数プラットフォームの場合などには向かないかなという印象です。

 

3-Tier

API Gateway と Lambda を活用することで、
従来のアーキテクチャに近い形にしているのが「3-Tier」の構成です。

スクリーンショット 2016-11-09 1.27.58

クライアント → API Gateway → Lambda → 各種AWSサービス
と、どう見ても4層構造ですが、2-Tierと対比するために、3層以上のものは「3-Tier」とくくられているようなので、気にしないようにしましょう。

2-Tierに比べて階層が多くなるので、サーバからのレスポンスタイムは若干増しますが、
クライアント側の実装は、各種AWSサービスを意識せずにREST APIを叩くという従来と同じ構成になるため、抵抗が少ないかと思います。

 

まとめ

結局この構成にした場合のメリット・デメリットって何だろう?
ということでパッと思いつく範囲でまとめてみます。

 
メリット

・サーバの保守運用をほとんど意識する必要がなくなる
すでに説明した通り、フルマネージドサービスを活用することでAWS側に保守運用のほとんどの部分をまかせることができます。

・リソースを効率的に使用することができる
EC2は1時間単位ですが、Lambdaはミリ秒単位で課金されるため、使用率によっては大幅なコスト削減に繋がる可能性があります。

 
デメリット

・従来の構成とは大きく異なるため、既存の資産が活用できない可能性が高い
従来の構成とは大きく異なるため、フレームワークの使用や、過去の資産を流用するということが難しくなります。
Lambda は現在使用できる言語も3つほどに限られるため、その点も大きな障壁となる場合があります。

・AWSに依存した構成になってしまう
何かあったときに別の環境にそのまま移行できないというのは大きなリスクです。
ただし、AWSを有効活用しようとすれば、多かれ少なかれそういった部分は出てくるので、
必ずしもデメリットとは言えず、どこまで許容できるかの問題かと思います。

 
デメリットも挙げましたが、運用保守の手間とランニングコストの削減は非常に魅力的です。
実際使ってみると上記の他にも問題は出てくるのかもしれませんが、
小規模なサービスを低コストで実現したいのであれば、現時点でも十分挑戦してみる価値はあるのではないでしょうか。

 
従来の構成をクラウド上で実現するだけでなく、このようなクラウドならではの構成というのはとても面白いですし、今後どんどん増えてくるのでしょう。
今回紹介したもの以外にも面白い構成は既にたくさんあるので、しっかり学んでどんどん取り入れていきたいですね!