SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2016】セッションレポート

【デブサミ2016】19-A-3レポート
AWSで実現するクラウドネイティブなアプリ開発のポイント

  • X ポスト
  • このエントリーをはてなブックマークに追加

クラウドネイティブに適した4つのアーキテクチャパターン

 まず1つ目のテーマ、「クラウドネイティブなアーキテクチャ」について。西谷氏は「クラウドネイティブなアプリを考える上での大きな“流れ”があります」と切り出し、「マイクロサービス(Microservices)はクラウドネイティブと関係が深い考え方で、マーティン・ファウラー氏の提唱する“Microservices Architecture”では、そのポイントを大きく9つにまとめることができる」としました。

 マイクロサービスとは、単一のアプリケーションではなく小さなサービスの組み合わせで構築するものであり、各サービスは独立し、単一でデプロイと実行が可能なものになっています。分割の単位は技術的な境界ではなく、ビジネスの遂行能力で行う(“フロント・サーバサイド・DB”ではなく、“リコメンデーション機能”という形で区切るような)ことが必要になってきます。またサービスで分割することで単一アプリにおけるインメモリのメソッド呼び出しで処理が行われなくなるため、HTTPのような軽量な手段を用いることも求められてきます。

 マイクロサービスなアーキテクチャを採用することで得られる利点・考慮すべき点は双方存在します。西谷氏は「最初からマイクロサービスを踏まえた構成で作っていくと大変な部分が多い。プロジェクトの初期の段階ではモノリシック(一枚岩: ここでは“1つのアプリケーション”という意味)に作っていき、後から分割していくのが良いのではないかと思います」と個人的なこれまでの経験から得られた“向き合い方”についてアドバイスしました。

 AWS上でマイクロサービスを構築する場合、主なアーキテクチャパターンは以下の4種類になります。

  • (1)API Gateway + Lambda
  • (2)EC2 + ECS
  • (3)EC2 + Elastic Beanstalk
  • (4)EC2 + ELB + Auto Scaling Group + Runtime

 一般的なWebアーキテクチャ(4)を例に挙げてみます。ポイントは、アクセスがない場合でも必ずサーバを1台稼働させ続ける必要があるということ。インフラ構築後の運用面に関する課題も存在します。

 これに対して“これは最もクラウドネイティブなアーキテクチャと”なる(1)のアーキテクチャ、こちらの構成では“サーバレスアーキテクチャ”という名前のとおり、ユーザーが管理すべきサーバが存在していません。ここでのポイントは構成図下部のLambdaの部分。従来はEC2上にWebサーバを導入し、サービスを処理していたものが、このアーキテクチャパターンではAPI GatewayとLambdaに置き換わります。Webサーバが必要なくなるというのが1つ大きなポイントと言えるでしょう。Lambdaファンクションから各AWSサービスを呼ぶことができるのも特徴です。

 サーバレスアーキテクチャを採用することで、懸念となっていたインフラ面におけるもろもろの課題は基本的には解決する形です。インフラの構築は各サービスが適切にハンドリングしてくれるようになるため、不要となるのです。また、サーバレスアーキテクチャを採用することによるメリットも数多くあります。バックエンド側のコードやサーバが減るために開発や運用のコストが最小化されますし、AWSマネージドサービスに置き換えることで、もろもろの懸念点について心配をする必要がなくなり、多くのケースでコスト減を見込むことができます。“サーバレス”な環境になりましたが、必要に応じてEC2を導入できるという安心感もポイントです。サーバレスアーキテクチャによって、「付加価値を生まない重労働からの解放」が期待できるのです。

 サーバレスな環境で利用する各種サービスは汎用的なサービスのため、サーバレスアーキテクチャが要件をすべて満たせないといったケースもありえます。そういった場合、Dockerに代表されるコンテナサービスの採用を検討するのも良いでしょう。Lambdaをバッチ処理の基盤として使いたいという要件もありますが、Lambdaはタイムアウト判定が短く設定されているため、長時間のバッチ処理には適さない場合があります。こういったケースではコンテナを有効活用できるでしょう。AWSでは複数コンテナをEC2クラスタ上で一元管理できるサービスとしてECS(Amazon EC2 Container Service)を利用可能です。

次のページ
クラウドネイティブなアプリケーションの実装パターン

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2016】セッションレポート連載記事一覧

もっと読む

この記事の著者

しんや(シンヤ)

2010年末~2013年前半位までの期間で興味のある勉強会に頻繁に参加。参加してきた勉強会のレポートブログとTogetterをひたすらまとめ続け、まとめ職人(自称/他称含む)として暫く過ごしておりました。色々な縁あってDevelopers Summit 2013では『公募レポーター』も務めました。2013年05月『出張ブロガー』を経て2013年08月にクラスメソッド株式会社へ転職。現在は業務(AWS及びその周辺技術を扱う)の...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9303 2016/03/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング