AWS Summitに行ってきた!レポート※セッションメモ (2017/06/02) [ワイヤ・アンド・ワイヤレス]AWS Lambdaを使ったモバイルバックエンドのサーバーレス開発事例
AWS Summitに行ってきた!レポート※セッションメモ (2017/06/02) [ワイヤ・アンド・ワイヤレス]AWS Lambdaを使ったモバイルバックエンドのサーバーレス開発事例
AWS Summit 2017/06/02 [ワイヤ・アンド・ワイヤレス]AWS Lambdaを使ったモバイルバックエンドのサーバーレス開発事例
自己紹介
- 相馬 賢司
アジェンダ
- TRAVEL JAPAN WiFi
- サーバレス
- APIGateWay/Lambda
- テスト
- デプロイ
- ログ
- まとめ
■TRAVEL JAPAN WiFi
- 無料で訪日外国人向けにWiFiを提供できるサービス
- 法人向けに胴体分野分析レポート、コンテンツ配信
- MAU:約100,000
クラウドの恩恵を活かすためにAWSのサービスを多く利用することでスケーラビリティなどにも優れる作りに変更
※個人的な所感:一つの大きなサービス→マイクロサービス化なのかな?
■サーバレス
スケーリング、ロギングはクラウド側で管理
課金単位は実行時間
2層モデル
■APIGateWay/Lambda
Restで呼び出した処理を後ろに渡すために利用
シーケンス制御、DynamoDB・S3などへの書き込みイベントを景気にほかへのデータ転送にも利用
設計・実装方針
Lambdaの苦労した点
- ライブラリクラスが増えると起動に時間がかかる
- VPCの場合、+ENIのアタッチ(10sec〜30sec) → CloudWatch Eventで定期的に起動、メモリを増やすことで対応している
APIGatewayからLambdaの呼び出し(レイテンシ):
- 常に同期呼び出しとなる
- 並列処理はI/O処理に効果がある
- 非同期で処理したい場合は五段にLambdaを用意し、InvocatuionType=‘Event'でInvoke()
残課題 * エンドツーエンド試験環境、ログ・エラー箇所の特定
■APIリソースとLambda関数の実装・デプロイ
- APIGateway:Lambda=1:1で運用
- SAMによる管理
- 依存や結合をなくしデプロイをしやすくする
- モバイルアプリ側とのインターフェース
【参考】Lambdaの言語別検証結果
前提:
- クライアントに含まれるキーをもとにDynamoDBからGEtItem
- 取得した値の一部をAESで暗号化
※あとでスライド確認
結果
- JAVA/C#は起動に時間が掛かるが、継続して動作すると早くなる
- メモリに関してはライブラリに依存するがメモリ使用量が多め
- ※CPUを使うような処理であればJAVA/C#のほうが早めだが転送処理程度であれば言語差異は少ない
■テスト
ユニットテスト・デバッグ
※後続のAWSサービスをどうするか
- モック作成/Proxyを使う
- AWS上に環境を準備
クラウドを使ってるんだから
- モックを使わずに
- SAMで必要なサービスをデプロイ
- テストが終わったらdelete stack
参考情報として
SAM(Serverless Application Model)
■パッケージング/デプロイ
パッケージング
- Python/Node.jsはCloudFormation packageコマンドを使うとテンプレートしていしたディレクトリ配下をパッケージしてS3にアップロード
- C#/JAVAはビルド時にS3へアップロードしたパスをテンプレートのパラメータへ指定
※メモ漏れあとでスライドで復習
■ログ
ログは標準出力へ
トレースできるようにするコツ
- context.requestIDを出力
- ピタゴラスイッチをリンクできるようにキーを付与
- デプロイした関数のバージョン
ログの調査方法例
■まとめ
- 学習コストはそれなりに掛かる
- サーバレスでの実装は制約が多い
- 制約はマイクロサービスやリアクティブなシステムへの移行に有効
- アプリケーションの特性に応じたメトリクス監視
- 管理はSAMなどのフレームワークを使って自動化
- アプリケーションやサービスに応じてmBaasと比較選択
- Lambdaを使わなくて住む実装パターンもある
- 楽しむ(新しいことを楽しむ!)