(レポート) AWSモバイル/IoTサービス徹底攻略!! 「Serverless Architecture on AWS」 #cmdevio
森永です。
11/21(土)に目黒のAWSJにて開催された「AWSモバイル/IoTサービス徹底攻略!!〜Developers.IO Meetup番外編〜」のレポートです!
イベント概要
本勉強会は、基本的な内容のBasic Track、応用的な内容のAdvanced Track、実際に試すことの出来るHands Onの3トラックに分けてAWSのモバイルサービスや、サーバーレスアーキテクチャ、IoTのお話をするというものです。
セッション内容
アマゾン ウェブ サービス ジャパン(株) 西谷 圭介さん
[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の方がいいかも
- そこは適材適所
- ただし、ずっと建てとくサービスなどは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を使わないといけないところは使いましょう
適材適所です
うまくクラウドを使って楽をしましょう!
さいごに
サーバレスアーキテクチャ夢が広がりますね。
日本ではあまり使われていないですが、米国では既に基幹のシステムとして使用されている例もあるようです。
今後システムを構築する上で選択肢の一つとするのも良いかと思います。