re:Invent 直前/開催中のServerless関係のアップデートをまとめてキャッチアップ!Serverless Night Osakaレポート #reinvent
こんにちは、大阪オフィスかずえです。昨日開催されたServerless Night Osakaに参加してきましたのでレポートします。
セッション1: Serverless周辺のアップデートまとめ by AWSJ下川さん
Lambda Update
SQL使用に立ちはだかるブロッカー(と、その改善アップデート)
- DB Conncetionの問題
- Lambdaスケール→DBコネクションが枯渇
- これまでの方法
- 同時リクエスト数を制御 or 入り口でスロットリングする
- DB接続数を制限
- 分散型DBを使う(DynamoDBなど)
- [NEW] RDS Proxy (Preview)
- コネクションプールの管理を行い、DBコネクション要求が過剰に発生した場合にも、クライアントの接続を待機させたり、既存のコネクションを効率的に再利用させることができる
- Developers.IO 関連エントリ
- LambdaとRDS Proxyの統合
- コネクションの過剰使用を抑止することができる
- LambdaコンソールからRDSプロキシを作成でき、シームレスな統合を実現
- Proxy配置するVPCとLambdaを接続する必要があり
- これまでの方法
- Lambdaスケール→DBコネクションが枯渇
- VPC接続時のColdStart
- これまで: 関数実行時、必要に応じて動的にENIが作成→10秒から30秒ほどかかっていた
- [NEW] 事前作成済みENIを利用
- Developers.IO 関連エントリ
- ※ VPC Lambdaはインターネットアクセスできないのでセキュア
- 金融業界などにも使える
- スパイクするワークロード
- これまで: 1分毎に500ずつしか同時実行可能数を増やせなかった
- [NEW] Provisioned Concurrency
- あらかじめ同時実行数をプロビジョニング可能に
- Developers.IO 関連エントリ
言語Update
- Node.js 12、Java 11、Python3.8をサポート
- Developers.IO 関連エントリ
- ランタイムサポートポリシーをちゃんと理解しておきましょう
非同期呼び出し時に最大イベント時間と最大リトライ回数設定可能に
- Maximum Event Age
- エラー時、再実行イベントキューの生存期間を指定可能に
- Maximum Retry Attempts
- エラー時のリトライ上限回数を指定可能に
- 上限に到達した場合の挙動も選択可能に(破棄/デッドレターキュー/Destinations)
- AWS Lambda が非同期呼び出しの最大イベント経過時間と最大再試行回数をサポートするようになりました
SQS FIFOキューからLambda関数が起動できるようになりました
- これまではスタンダードキューのみだった
- Developers.IO 関連エントリ
非同期実行の実行結果をAWSサービスに配信可能に
- 成功・失敗時それぞれ設定可能
- AWS Lambda が非同期呼び出しの宛先指定をサポート
Kinesis / DynamoDBトリガーに実行失敗時のハンドリング機能を追加
- Bisect on Function Error
- 実行失敗時にバッチを分離し再実行。元バッチは次のレコードを処理可能
- Maximum Record Age
- 処理する最大経過時間(60秒〜7日)
- Maximum Retry Attempts
- 実行失敗時のリトライ回数(0〜10000)
- Destination on Failure
- 実行失敗時に結果をSNS、SQSに配信
- Developers.IO 関連エントリ
Kinesis および DynamoDB イベントソースの並列化係数をサポート
- 1シャードを複数のLambda呼び出しで同時に処理可能に
- シャード数✖︎並列化係数の数だけLambda関数同時実行を可能
- AWS Lambda は Kinesis および DynamoDB イベントソースの並列化係数をサポートします
API Gateway Update
HTTP APIs for Amazon API Gateway
- ※HTTP APIという名前だが扱うプロトコルはHTTPS
- 低コスト
- 平均70%のコスト削減
- 定レイテンシ
- 統合
- LambdaとHTTPのみ
- 認証
- JWTオーソライザ
- Developers.IO 関連エントリ
EventBridge
AWS SAM Update
SAM CLIを利用したDeployにガイド付きインタラクティブモードが追加
- CI/CDパイプラインでより使いやすくなった
- Developers.IO 関連エントリ
Serverless CICD Update
LambdaコンソールからCICDパイプラインがシームレスに作成できるように
- 5ユースケースある
- Node.js 10.xのみ対応
- AWS Lambda コンソールから自動デプロイパイプラインを使用してサーバーレスアプリケーションを作成する
Step Functions Update
Express Workflows
- これまでのStandard Workflowsに加え、実行時間が短く大量に実行されるステートマシンに適したExpress Workflowsが提供開始
- 比較
- Developers.IO 関連エントリ
まとめ
- Lambda でRDSに対する接続性が向上
- API Gatewayで簡易にHTTPSエンドポイントが作成可能に
- Step FunctionsのExpressが登場、より高スループットに
- Lambdaを非同期に使うワークロードに対するエラーハンドリングがより簡単に
- ServerlessのCICDパイプライン構築が簡単に
- EventBridgeを利用してEventDrivenなSaaS連携
セッション2: RDS Proxy ある時/ない時 デモ by AWSJ清水さん
この場合と、
この場合
つまりLambdaとRDSの間にRDS Proxyを挟まない/挟むで、RDSの同時接続数がどのくらい変わるのか試してみるデモを実演されました。
RDS Proxyには「接続プールの最大接続数」という設定項目があります。DBの持つ最大接続数に対してRDS Proxyで最大どの程度の割合までその接続数を使うか、という設定です。
RDS Proxyを挟む/挟まないのコードレベルの変更は、エンドポイントをRDSのもの⇄RDS Proxyのもので切り替えるだけです。(下のコードの 二つある rds_host
変数宣言行を片方コメントアウトして実行)
簡単!
かなりの改善が見られました!
感想
re:Invent前/期間中、かなりたくさんのアップデートがあったので、キャッチアップするのにとても良いイベントでした。今後もこういったイベントを引き続き大阪でも開催していただきたいです。
また、RDS Proxyの効果を実際にデモで確認できたのも良かったです。早くGAになってほしいですね!