[レポート] サーバーレスアーキテクチャのデザインパターンとベストプラクティス! #reinvent #ARC305

2018.11.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

おつかれさまです。サーバーレス開発部の新井です。

re:invent初参加ということで若干浮き足立っていますが、Serverless Architectural Patterns and Best Practicesに参加してきたので、初セッションレポート投稿していこうと思います。

セッションの主な内容は、Serverless Architectureを実現する上で

  • AWSで利用可能なサービスの紹介
  • AWSサービス群を使ったデザインパターンの紹介

でした。

セッション概要

As serverless architectures become more popular, customers need a framework of patterns to help them identify how to leverage AWS to deploy their workloads without managing servers or operating systems. This session describes reusable serverless patterns while considering costs. For each pattern, we provide operational and security best practices and discuss potential pitfalls and nuances. We also discuss the considerations for moving an existing server-based workload to a serverless architecture. This session can help you recognize candidates for serverless architectures in your own organizations and understand areas of potential savings and increased agility.

大事な部分は

This session describes reusable serverless patterns while considering costs.

再利用可能なパターンであり、コスト面も考慮しているという点です。

登壇者

  • Maitreya Ranganath (Solutions Architect, Amazon Web Services)
  • Drew Dennis (Solutions Architect, Amazon Web Services)

アジェンダ

  • Serverless foundation
  • Web Application
  • Stream processing
  • Data Lake
  • Machine learning

セッションメモ

Serverless foundation

サーバーレスとは?

  • サーバーやコンテナの管理をしない
  • スケーラブル
  • 高可用性
  • アイドル時の課金がない (コスト最適化)

Lambda ベストプラクティス

  • パッケージサイズを最小化する
  • 全体の動作を制御する場合は、環境変数を利用する
  • SQSトリガーで起動するVisibility Timeoutを超過しないよう注意

Lambdaのフレームワーク (AWS SAM)

  • CloudFormation の拡張
  • SAM CLI によるローカルテストが可能
  • Canary Deploymentsの機能もある

Lambdaの開発におけるIDE (Cloud9)

Lambdaのデプロイ (code兄弟)

  • ソースコードは aws commitで管理し
  • ビルドは aws codebuild
  • テストは thirpaty製のツールなど
  • デプロイは aws codedeploy
  • これらを連結するのが、aws codepipeline

Web Application

ここからデザインパターンの話がメインです。

API Endpointの3つのパターン

  • Edge Optimezed (CloudFrontを前段において、低レイテンシーを実現)

  • Regional (Route53を前段に置いて、リージョンごとにルーティング可能。Dynamo Global TableやCloudFrontも利用)

  • Private(VPCエンドポイントからのアクセスとして利用。DirectConnectなど、境界内ネットワークからのアクセスが可能)

Cognitoを利用した、認証・認可のパターン

  • Cognito User Poolを利用して、ユーザプールから払い出されたTokenでAPI Gatewayにアクセスするパターン
  • Cognito Identity Poolを利用して、AWSの一時クレデンシャルを取得してAPI Gatewayにアクセスするパターン (facebook, google などをidpとして利用)

  • Lambda authorizersとして起動されたlambda内で独自ロジックの認可処理を実装するパターン

セキュリティ面での利用可能な機能

AppSyncでGraphQL使うパターン

  • 必要なデータのみ取得できる
  • HTTP, MQTT, WebSocketをサポート
  • オフラインでの動作

Stream processing

Kinesisを利用したストリーミングデータ処理の紹介

Lambdaを利用したFan-outパターン

Kinesis Data Analyticsをリアルタイム分析のパターン

関連サービスの比較

Data Lake

S3をデータレイクとした関連サービスの紹介

検索とデータのカタログ作成

データレイクへのインスタントなクエリ

Lambdaで実装するバッチプロセスのパターン

Machine learning

Amazon Rekognitionを利用したイメージファイルの分析パターン

Amazon Rekognitionを利用したメディアファイルの分析パターン

Amazon Connectを利用したコールセンターの分析パターン

まとめ

事前予約でも30分前には長蛇の列が出来るほど、人気のセッションでした。トピックに沿った形で、サーバーレスアーキテクチャのデザインパターンが豊富に盛り込まれていたため、とても勉強になりました。

データ分析やMachine learning系のサービスに関して詳しくないため、後半は内容が薄くなってしまい申し訳ないですが、今後はここらへんもカバーして良いレポート書けるようにしていきたいです。