(レポート) AWSモバイル/IoTサービス徹底攻略!! 「Serverless Architecture on AWS」 #cmdevio

2015.11.21

森永です。
11/21(土)に目黒のAWSJにて開催された「AWSモバイル/IoTサービス徹底攻略!!〜Developers.IO Meetup番外編〜」のレポートです!

イベント概要

本勉強会は、基本的な内容のBasic Track、応用的な内容のAdvanced Track、実際に試すことの出来るHands Onの3トラックに分けてAWSのモバイルサービスや、サーバーレスアーキテクチャ、IoTのお話をするというものです。

IMGP2018 copy

セッション内容

IMGP2027 copy

アマゾン ウェブ サービス ジャパン(株) 西谷 圭介さん

[slideshare id=54300729&doc=20151023serverlessarchitectureonaws-151023114436-lva1-app6892]

どんな方が来てるんですかね?

  • モバイルのエンジニア ぼちぼち
  • サーバサイドのエンジニア 多め
  • インフラのエンジニア ぼちぼち
  • 組み込み系のエンジニア 1名

西谷さんの自己紹介

API GatewayとかLambdaを担当している

クラウドファーストからクラウドネイティブへ

クラウドネイティブとは

クラウドで提供されるサービス利用を前提に構築
ビジネスで差別化出来る部分に注力しましょう

サーバレスアーキテクチャとは

従来のアーキテクチャ

WEB/APサーバはEC2
ELBでオートスケーリング出来る
冗長化しよう DBはRDSでマルチAZ

課題

インフラの運用管理が面倒
認証基盤、スロットリング、スケーラビリティの確保などはビジネス的に差別化出来ないが実装が大変

サーバレスアーキテクチャ

EC2を使わないアーキテクチャ
  • アプリ側はJavaScriptかネイティブアプリ
    • JavaScriptや静的コンテンツはS3から配信する
    • CloudFrontのようなCDNから配信可能
  • ロジック部分はAPIにしちゃう
    • API Gatewayが便利です
    • バックエンドはLambda
  • JavaScript/ネイティブアプリはAPIを叩くだけ
  • Lambdaファンクションから各AWSサービスを使う
    • 認証にはCognitoを使えます
  • EC2を使わないと行けない場合もLambdaで連携可能
    • EC2使う場合はEBやOpsWorksなんかを使うといいよ
2Tierアーキテクチャ

モバイルから直接AWSサービスを利用する!

  • 各クライアント向けSDKを使用する
  • ロジックをクライアント側に持つ必要がある
    • 各プラットフォーム向けに個別に構築が必要

従来のアーキテクチャでの課題が解決できる
集中したいところに集中できる!

メリット

  • バックエンドのコードが少ない
    • 開発コスト減
    • 運用コスト減
  • コスト効率が高いので、コスト減が見込める
    • ただし、ずっと建てとくサービスなどはEC2の方がいいかも
      • そこは適材適所

「何をするか」を書くだけでいい
今までは「何かが起きた」ことを検知する部分を書かないといけなかった
Lambdaはそこをよしなにやってくれて「何をするか」に集中できる

事例

VidRoll

ターゲット広告

API GatewayやLambdaを使っている
出来るだけマネージドサービスを使う

生産性が向上した

https://aws.amazon.com/solutions/case-studies/vidroll/

playOn Sports

高校生のスポーツ動画を配信

以前は全てEC2で動画変換などをしていた Lambdaを使用するようになった

http://www.slideshare.net/AmazonWebServices/arc308-the-serverless-company-using-aws-lambda

easy ten

いろいろな言語の単語を学べる

モノリシックなアプリケーションを複数のEC2上で稼働していた
デプロイが複雑になっていた
頻繁なリリースをしたくても1行でもコードを変えるとデプロイが大変

Lambdaに変えたところデプロイを開発者が個別に出来るようになった
運用のコストが大幅に下がった

NodeStrong?

CapitalOne

米国ではがっつり基幹で使っている企業が増えてきた

その他にも、、、
DynamoDBへのリアルタイム同期
SNSの通知
CloudTrailで怪しい動き検知
CloudWatchをトリガーに動かす
GitHubにコミットするとLambdaファンクションつくる

サーバレスアーキテクチャで使えるサービス

AWS Lambda

インフラ管理の不要なコンピュートサービス
イベントドリブンなアプリケーションを作成できる
コード自体は自分で作成できるので自由度は高い

現在はNode.js、Java、Pythonで記述可能
各言語のライブラリも使用可能

Lambdaの利用例

S3に画像がアップロードされたらサムネイル作る
→従来はアップロードされているかをポーリングしてあったら生成するようなコードを組む必要があった

現状でLambdaが数多くのAWSサービスに対応
Alexa Appkit(クラウド・バーチャル・アシスタントのSDK)やAmazon Connected Home(Alexaで家電操作)なども対応

API Gateway

APIの重要性

提供するサービスのエコシステムを作ることが出来る
マルチプラットフォームにするのも簡単

API Gatewayの機能
  • 複数バージョンとステージ機能
  • リクエストのスロットリングも容易にできる
  • バックエンドはLambdaに流せる
  • iOS、AndroidとJavaScript向けのSDKを自動生成できる
  • Swaggerを使ってAPI定義

実装例

使うのは - API Gateway - Lambda - Cognito - DynamoDB

APIはSwaggerで定義する
Swaggerの詳細は後のセッションで!

流れは、
ユーザが認証すると一時的なクレデンシャルをCognitoが発行
→それを用いてAPI Gatewayに呼びかける
→API GatewayはLambdaに投げて処理をする →API Gatewayから結果が戻る

作ったAPIはワンクリックでSDKにすることが出来る
AWSに即した実装が可能なので、SDKを作成してアプリを作成することをオススメ

実装をハンズオンでやれますよ!

JAWSフレームワークという今まで言ってた内容を簡単に構築できるフレームワークがあります
AWSの公式ではないですが、結構優秀ぽい
JAWSのセッション(未リンク)もあります

Mobile Hubというサービスもあります。
こちらはAWS公式。
詳しくは後のセッションで!

まとめ

サーバレスのセッションですが、絶対サーバレスにする必要はないです
EC2を使わないといけないところは使いましょう
適材適所です

うまくクラウドを使って楽をしましょう!

さいごに

サーバレスアーキテクチャ夢が広がりますね。
日本ではあまり使われていないですが、米国では既に基幹のシステムとして使用されている例もあるようです。
今後システムを構築する上で選択肢の一つとするのも良いかと思います。