[レポート] サーバーレスで構築する、マイクロサービスの未来形 #AWSSummit

2016.06.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

サーバーレスで構築する、マイクロサービスの未来形

6/1 (水) ~ 6/3 (金) に開催された AWS Summit Tokyo 2016Develoepr Confrence のセッション「サーバーレスで構築する、マイクロサービスの未来形」を聴講しました。本記事はそのレポートです。

AWS Lambda はサーバーレスで、マイクロサービスを構築するための主要コンポーネントであり、AWS Lambda を使用することで、モバイルやウェブ、IoT アプリケーション用のスケーラブルなマイクロサービスをより簡単に構築することができます。また、他の AWS サービスとのイベント駆動による連携も、インフラ部分の管理をすることなく実現できます。本セッションでは、デモンストレーションや新機能のご紹介を通じて、AWS Lambda を使ってどのようにモバイルやウェブ、IoT のバックエンドや音声対応アプリケーションを構築できるかを理解いただけるとともに、Lambda 関数をトリガーにした AWS とサードパーティの連携方法についてもご覧いただけます。また、Lambda 関数を最大限活用するための生産性とパフォーマンスに関する TIPS を提供し、拡張性や応答性を犠牲にすることなく、クラウドネイティブなアーキテクチャーにより「コールドサーバー」や余剰キャパシティを排除するために AWS Lambda を活用する方法についてもご紹介します。

スピーカーは Tim Wagner 氏 (General Manager of AWS Lambda and Amazon API Gateway, Amazon Web Services, Inc.) です。同時通訳セッションになります。

アジェンダ

Hello, Tokyo!このセッションでは下記についてお話しします。

  • サーバーレスコンピューティングとは何か?
  • AWS のポートフォルオにどのようにマッチしているか?
  • アーキテクチャパターン
  • ベストプラクティス (新機能を最大限に活用出来る方法)
  • デモ

AWS Lamdba とは

様々な抽象化

  • VM はハードウェアを抽象化。(EC2)
  • コンテナは OS を抽象化。 (ECS)
  • そしてサーバーレスは、コードを抽象化します。 (Lambda)

最も新しい Lambda というサービス

  • インフラは気にしない。
  • 単に、コードを与えるだけ。
  • 何をしたいかによって、何を使うかが決まる。
  • EC2 はマシン、ストレージを提供。
  • ECS は完璧。ローカルの内容をクラウドで同じように実行できる。
  • Lambda は単にコードをもらえればいいだけ。AWS が必要な時にコードを実行する。

どのように使うか

  • Lambda、API Gateway、そして他のサービスを組み合わせて使う
  • アーキテクチャパターンを見てみる
  • クラウドのコンピュートを少なく使う

なぜLambdaを使うか?

  • サーバー管理不要
  • 継続的なスケーリング
  • アイドル時間は無課金、コールドサーバーはなし

Democratized Scale

  • クラウドはスーパーコンピュータ
  • サーバーレスはプログラムできる

Lambda を使うとビジネスロジックを複雑さを考えずにデプロイできます。AWS が自分のチームの Ops として動きます。

リクエストごとに課金

Tim Wagner 氏が Lamdba について最も誇りに思っているのは価格体系だそうです。電気のように使いたいだけ使えます。

最も少ないコンピュートだけ使って無駄がありません。40万GB/s/月が無料です!

使用方法

  • BYOC。AWS にコードを下さい。
  • Node.js, Java, Python で記述できる
  • カスタムライブラリも利用可能

柔軟性

他の AWS サービスのつなぎは AWS が行ってくれます。

リソースモデル

メモリや実行時間など、ダイヤル制御でコントロール可能です。

認可

誰が何を実行できるかコントロールできます。

プログラミングモデル

  • ステートレス
  • すなわち、扱うデータはコードの中ではない (S3 や DynamoDB など)
  • AWS SDK を使う

ユースケース

  • 素早く届ける
  • 即時処理
  • バックエンド構築
  • エコシステム

いくつかのユースケースが紹介されました。

ユースケース1 : データ処理

  • S3 のバケットトリガーとか DynamoDB のストリームをイベントトリガにする
  • 膨大なスケールで実行されるが、Lambda 使うと気にしなくて良い
  • S3 のドキュメントのインデックスを作ったりするようなことはすぐできる

ユースケース2 : スケーラブルなバックエンド

  1. AWS Mobile SDK を使ったモバイルアプリ、または IoT デバイス
  2. Lambda のブループリントから作り始める (バックエンド用のブループリントがある)
  3. データストレージは DynamoDB (RDS とかでもOK)

ユースケース3 : サーバーレスウェブアプリ

  1. 静的コンテンツは S3
  2. 動的コンテンツは Lambda
  3. HTTP アクセスは APIGatway
  4. データストレージは DynamoDB
  5. CloudFront をオプションで使うと CDN もできる

ユースケース4 : 新しいアプリケーションエコシステム

  • Alexa Skill + Slack = サーバーレスボット!
  • 音声を聞き、Slack のチャンネルにメッセージを送ることが可能

Lambda や API Gateway のカスタマー

国内企業にカスタマーがいます。

Canon

Canon は最新のプリンティングソリューションで活用されています。

岡三オンライン証券

岡三オンライン証券 はバーチャルトレーディングサービスで活用、受注管理システムなどに活用しています。迅速にデリバリーできるところがメリットです。

リクルートジョブス

リクルートジョブスタウンワーク でサーバーレスアーキテクチャを活用されており、モバイルデバイスで仕事を検索するというアクションに対して機械学習でレコメンドしています。モバイルデータからの大量のデータを受け付けるバックエンドとして活用しています。

新機能、ベストプラクティス

re:Invent 2015 以降、開発チームは非常に忙しくなったようです。その結果、多くの新機能のアップデートがありました。例えば次のようなものです。

  • Lambda はNode 4.2 にアップデート。Node.js に対する継続的なコミットメントを示している。
  • API Gateway では Swaggar の Import / Export をサポートしました。さらに簡単に使えるようになりました。

入門ガイド

新機能についての様々な Tips が紹介されました。

スケジュール機能入門

  • ウォーム状態にするにはスケジュール化する
  • キューのポーリングもできる
  • タイマーを増やす
  • 1分よりも細かい単位でもできる

関数バージョニング

  • イミュータブルな構成情報になる。変更を気にしなくなる。
  • エイリアスはシンボリックリンク。ロールバックできる。
  • Blue/Green Deploy するには、交通整理関数を手前に置く。その中で分岐させる。
  • 古いバージョンに固定したい場合は、ARN を直接指定する。

VPC基礎

  • デフォルトでは AWS が管理する VPC 内で実行される。常にセキュア。
  • 自分たちの VPC の中にすることもできる。
  • VPC にした場合はインターネットアクセスできない。NAT インスタンスを置く必要がある。
  • VPC はオプション。
  • ENI は各自のクオータの計上 ENI に対して十分な IP をサブネットで確保します。

デプロイ、構成管理

Lambda や API Gateway を構成するためには、いくつかの方法があります。

  • CloudFormation
  • Serverless
  • Flourish (Comming Soon!)
  • サーバーレスアプリケーションモデル
  • アプリケーション全体でバージョン管理できる
  • AWSが支援するGitHubのオープンソースプロジェクト

Flourish はまだ公開されていません(2016/06/02 現在)。楽しみですね!

デモ

Lambda Function、DynamoDB Table、API Gateway を Cloudformation を使ってデプロイする Stack を作成するデモが行われました。コードを CloudFormation Template にそのまま記述することもできるので、小さな Lambda Function であれば採用する価値もあるかも知れません。

サーバレスだからこそ簡単に、高速に使うことができます。

まとめ

サーバーレスアーキテクチャは素早くクラウドに実装できます。AWS が提供するサーバーレスアーキテクチャを構成するサービスは以下のような特徴があります、抑えておきましょう。

  • アプリケーション単位ではなく、関数が対象であること。
  • コードだけを考える。どこで実行されるかは考えない。
  • 過剰なプロビジョニングをしなくて済む。
  • 必要なものに応じて自動でスケールする。
  • 自動的に耐障害性が担保される。AZとかも気にしない。
  • BYOC。
  • メトリックとかも取れる。

Join the server revolution!

  1. プロダクトマネージャ、ビジネスアナリティストは導入事例をチェックしましょう。
  2. 開発者はまずは作って実行しよう。
  3. これでエキスパート!イベントソース、HTTP エンドポイントを追加しよう。
  4. モバイル、音声、IoT バックエンドを数行のコードで構築しよう。

サーバーレスアーキテクチャは発展途上です。Tim Wagner 氏は Twitter アカウント @timallenwagner で情報発信しているのでフォローしましょう!公式ブログなどの情報も参考にしましょう。