4/18(火)、AWS Black Belt Online Seminar サーバレスによるアーキテクチャパターンのご紹介 受講レポート
はじめに
Amazonが配信している「AWS Black Belt Online Seminar サーバレスによるアーキテクチャパターンのご紹介」を受講しました。以下受講メモ。
メモ
サーバレスによるアーキテクチャパターン
- AWS Lambdaを中心に
- ベストプラクティス的なもの
What is Serverless?
- おさらい程度
- ユーザーが管理しなければいけないサーバがなくなる
- AWSのサーバレスの場合
- シンプルで使いやすい
- プロビジョニングをしない(できない)
- 処理実行分に対して課金が発生、アイドルタイムに支払いが発生しない
- スケーリングは使用率に合わせて自動で行われる
- 高可用性・組込済み(既にプラットフォーム側で行われている)
- You don't do that, we do that.
サーバレスなアプリケーションモデル
- -
イベントソース
- いっぱい
- S3
- DynnamoDB
- Kiness
- どんどん増え続けている
AWSのサーバレスファリング
- Lambda≠サーバレス
- Lambdaが中心になるのはたしか
アーキテクチャパターン
- ユースケース
- Webアプリ
- バックエンド
- データ処理
- ファイル処理
- ストリーム処理
- IoTバックエンドと似ている
- https://github.com/awslabs/lambda-refarch-streamprocessing
- ETL処理
- 画像認識
- チャットボット
- AI
- 自動化
ベストプラクティス
- The Twelve-Factor App
- モダンなWebアプリ開発のための方法論
- 元はHerokuエンジニアが公開
- コードベース
- バージョン管理された1つのコードベースと複数のデプロイ
- 依存関係
- 明示的に宣言して分離する
- 暗黙的に依存しない
- 設定
- バックエンドサービス
- アプリケーションがネットワーク越しで利用するようなサービスは全て外部サービスとして扱う
- ビルド・リリース・ラン
- 3つのステージを厳密に分離する
- プロセス
- ステートレスなプロセスとして実行
- ポートバインディング
- アプリ自体がリクエストを待ち受けた方がよい
- 並行性
- プロセスモデルによってスケールアウトする
- 廃棄容易性
- 高速な起動と簡単な廃棄
- 開発/本番一致
- 各環境をできるだけ一致させた状態を保つ
- ログ
- ログ管理をアプリ自身で行わない
- 管理プロセス
- 管理タスクを1回限りの実行プロセスとする
その他の(Lambda特有の)ベストプラクティス
- メモリ設定
- メモリを増やすとCPUも倍になる
- Lambdaはメモリ使用量と処理時間で課金、メモリを増やすとパフォーマンスも向上する
- 段階的に試して最適化を目指すのが吉
- VPCは必須ではない
- Design for failure
- リトライ
- Dead Letter Queueの活用(非同期の場合)
- 冪等性はコードで確保する必要あり
- Lambdaで保証しているのは最低1回実行すること
- 場合によっては2回以上実行していることも
- コールドスタート
- 安定的なトラフィックが発生している場合、コールドスタートの発生頻度は低い
- コールドスタートは発生するものと思った方がよい
- 遅延が一切許容できないのであれば使用しない方がよい
- ローカル実行について
- Lambdaで使われているAMIは公開されている
- ファンクションんと言ってもただのプログラム
- Contextとイベントを再現する必要がある
- 単なるJSONオブジェクト
コールドスタートを速くする
ローカル実行
- テストドライバ
Q&A
- 後日ブログで
告知