Serverless Anti-Patterns | PDFMore Related Content
PDF
AWS Black Belt Online Seminar 2017 Amazon ElastiCache PDF
PDF
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES) PDF
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am... PDF
20210119 AWS Black Belt Online Seminar AWS CloudTrail PDF
20190730 AWS Black Belt Online Seminar Amazon CloudFrontの概要 PDF
20210526 AWS Expert Online マルチアカウント管理の基本 PDF
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW... What's hot
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib... PDF
20180322 AWS Black Belt Online Seminar AWS Snowball Edge PDF
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW... PDF
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報 PDF
20191023 AWS Black Belt Online Seminar Amazon EMR PDF
AWS Black Belt - AWS Glue PDF
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ... PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!) PDF
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive PDF
20190320 AWS Black Belt Online Seminar Amazon EBS PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB PDF
[AWS初心者向けWebinar] 利用者が実施するAWS上でのセキュリティ対策 PDF
20200526 AWS Black Belt Online Seminar AWS X-Ray PDF
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S... PDF
AWS Black Belt Online Seminar 2018 AWS Certificate Manager PDF
20180509 AWS Black Belt Online Seminar Amazon GuardDuty PDF
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM) PDF
20210126 AWS Black Belt Online Seminar AWS CodeDeploy PDF
The Twelve-Factor Appで考えるAWSのサービス開発 PDF
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介 Similar to Serverless Anti-Patterns
PDF
20170418 aws black-belt-architecture_pattern_of_serverless PDF
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所 PDF
[20171116 三木会] AWSを利用したサーバーレス開発の実践 by アイレット株式会社 cloudpack事業部 高橋 直樹 氏 PDF
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説 PDF
Going Serverless, Building Applications with No Servers PDF
PDF
PDF
Serverless Meetup Japan Virtual #6 PDF
PDF
PDF
PDF
PDF
Azureをフル活用したサーバーレスの潮流について PDF
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート PDF
Application Lifecycle Management in a Serverless World PDF
サーバーレスにおける開発プロセス戦略(パネルディスカッション用スライド) PDF
Serverless Architecture Overview #cdevc PDF
Serverless Meetup Tokyo #1 オープニング PDF
Serverless Application Security on AWS PDF
May the FaaS be with us!! More from Keisuke Nishitani
PDF
PDF
PDF
What's new with Serverless PDF
Introduction to AWS X-Ray PDF
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex PDF
What's new with Serverless PDF
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless PDF
PDF
AWSのサーバレス関連アップデートを10分で紹介します PDF
Introducing Serverless Computing (20160802) PDF
PDF
PDF
Building Scalable Application on the Cloud PDF
AWS Lambda / Amazon API Gateway Deep Dive PDF
PDF
AWSで実現するクラウドネイティブなアプリ開発のポイント PDF
Scale Your Business without Servers PDF
PDF
AWSにおける モバイル向けサービス及び事例紹介(20151211) PDF
Serverless Architecture on AWS (20151201版) Serverless Anti-Patterns
- 1.
- 2.
Profile
Keisuke Nishitani
Specialist SolutionsArchitect, Serverless
Amazon Web Service Japan K.K
@Keisuke69 Keisuke69
✤ RESTおじさん
✤ 餃⼦の王将エヴァンジェリスト(⾃称)
✤ ⾳楽が好きです、フジロッカーです、今年も⾏きます
✤ ブログ: http://keisuke69.hatenablog.jp/
Keisuke69 Keisuke69Keisuke69x
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
Real-time File Processing
✤イメージのサムネイル⽣成やビデオの変換
✤ ドキュメントのメタデータをインデックス化
✤ ログの処理
✤ メディアコンテンツのバリデーション
元画像 サムネイル画
像
1 3
1.ファイルストレージを
提供するAmazon S3
2.処理ロジックを提供す
るAWS Lambda
- 19.
Real-time Stream Processing
✤クライアントのアクティビティトラッキング
✤ クリックストリーム分析
✤ データクレンジング
✤ ログフィルタリング
✤ インデクシング
✤ デバイスデータのテレメトリと測定
AWS LambdaAmazon Kinesis
集計処理
リアルタイム
Cloudwatch logsやSNSなど
との連携も可能
- 20.
- 21.
- 22.
Traditional Web Backend
✤メリット
⎻ 実績が多く枯れた構成
⎻ カスタマイズ性が⾼い
⎻ 知⾒を持っている⼈が多い
✤ デメリット
⎻ サーバのスペック、台数などスケールを意識して設計する必要がある
⎻ サーバの運⽤は利⽤者が負う必要がある
⎻ アイドル時にもコストが発⽣する
- 23.
- 24.
Serverless Web Backend
✤メリット
⎻ クライアント側の実装は従来とあまり変わらずノウハウを活かせる
⎻ サーバの運⽤、スケールはAWSに⼀任できる
⎻ サービスの組み合わせだけで、セキュアなAPIアクセス制御などが実装できる
⎻ コスト効率が⾼い
✤ デメリット
⎻ カスタマイズ性が低い
⎻ 設計および運⽤ノウハウが枯れていない
- 25.
- 26.
AWSのサーバレスオファリング
AWS LambdaAmazon APIGateway
Amazon DynamoDB
Amazon Kinesis Amazon Mobile Analytics
Amazon SNS
Amazon Cognito
AWS IoT
Amazon S3 Amazon Elastic Transcoder
AWS CloudWatch
AWS CloudTrail
Amazon SESAmazon Machine Learning
Amazon Route53Amazon SQS
- 27.
- 28.
- 29.
LambdaでRDBMS使いがち問題
✤ Lambda +RDBMSがアンチパターンな理由
⎻ コネクション数の問題
⎻ Lambdaはステートレスなプラットフォームであるため、コネクションプールの実装は難しい
⎻ Lambdaがスケールする、つまりファンクションのコンテナが⼤量に⽣成された場合に、各コン
テナからDBへコネクションが張られることになり、耐えられないケースがある
⎻ VPCコールドスタートの問題
⎻ VPCのコールドスタートが発⽣する場合、通常のコールドスタートに⽐べて10秒程度の時間を
必要とする
✤ ベストプラクティス
⎻ DynamoDBを使う
⎻ 何らかの理由でRDBMSとの連携が必要な場合はDynamoDB StreamsとLambdaを利⽤
して⾮同期にする
- 30.
- 31.
- 32.
- 33.
同期実⾏にこだわりすぎ問題
✤ 同期でInvokeすると同時実⾏数の制限に引っかかってつまりがち
⎻ 同時実⾏数の計算は「1秒あたりのイベント数 * 関数の実⾏時間」
⎻ ⾮同期呼び出しの場合、許可された同時実⾏数内で順次処理をし、バーストも許容さ
れている
⎻ 同期呼び出しの場合、許可された同時実⾏数を超えた時点でエラーが返されてしまう
⎻ 同時実⾏数は制限緩和可能だが、実際にスロットルされていない状態でいきなり申請
しても基本的に通らない
✤ ベストプラクティス
⎻ できるだけ⾮同期でInvokeするのがオススメ
⎻ その処理、本当にレスポンス必要ですか?
⎻ 特にAPI Gatewayとの組み合わせの場合、PUT系の処理をGatewayのバックエンドと
してLambdaで直接処理するのではなく、サービスプロキシとして構成してSQS、
Kinesisに流すなどする
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
サーバレスで難しいことしがち問題
✤ サーバレスはシンプルに使ったほうが効果は⾼い
⎻ 基本は「Aが発⽣したら処理をしてBにアウトプット」
⎻シンプルに使うべきものを複雑な箇所に適⽤しようとすると難易度は上がる
⎻ 分散環境の考慮、失敗時のリトライなど
✤ サーバレス以外と同じこと
⎻ 標準的なプログラミング⾔語とプロトコル
⎻ 標準的なデプロイとテストのプラクティス
✤ サーバレス特有のこと
⎻ イベント/リクエストドリブン
⎻ モジュラー
⎻ ステートレス
⎻ 12 factor/Microservices/Reactive..
✤ つまり
⎻ モノリスは分解する必要がある
⎻ ファンクションのコミュニケーションをどうするか考え、サービス境界をクリアにする必要がある
⎻ 障害発⽣を前提とした設計の必要性、結果整合性の理解が必要
- 41.
サーバレスで難しいことしがち問題
✤ サーバレスはシンプルに使ったほうが効果は⾼い
⎻ 基本は「Aが発⽣したら処理をしてBにアウトプット」
⎻シンプルに使うべきものを複雑な箇所に適⽤しようとすると難易度は上がる
⎻ 分散環境の考慮、失敗時のリトライなど
✤ サーバレス以外と同じこと
⎻ 標準的なプログラミング⾔語とプロトコル
⎻ 標準的なデプロイとテストのプラクティス
✤ サーバレス特有のこと
⎻ イベント/リクエストドリブン
⎻ モジュラー
⎻ ステートレス
⎻ 12 factor/Microservices/Reactive..
✤ つまり
⎻ モノリスは分解する必要がある
⎻ ファンクションのコミュニケーションをどうするか考え、サービス境界をクリアにする必要がある
⎻ 障害発⽣を前提とした設計の必要性、結果整合性の理解が必要
✤ したがって
⎻ シンプルに使うべきものはシンプルに使いましょう
⎻ フルサーバレスにこだわらず、コンテナなども使って適材適所で
- 42.
- 43.
- 44.
- 45.
Limit Increase通らない問題
✤ イベントソースがAmazonKinesis / DynamoDBの場合、シャード数と等しくなる
⎻ ストリームのシャードごとに同時に実⾏されるため
⎻ 例:100シャードのAmazon Kinesis ストリームの場合、同時実⾏数はどの時点でも最⼤ 100 件。
そのうちアクティブなシャードが10個だった場合、実際の同時実⾏数は10となる。
✤ それ以外は、(1 秒あたりのイベント数 * 関数の実⾏時間)となる。たとえば、
関数が 1 秒あたりのイベント数が10 件で平均実⾏数が3秒の場合、同時実⾏数は
30となる
1s 2s 3s 4s 5s
10 req/sec
Avg 3s / exec
“同時”に実⾏されているタイミング
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
コールドスタートを速くする
✤ VPCを使わない
⎻ そもそもLambdaと関係なくENIの⽣成とアタッチ処理は遅い
⎻コールドスタートを速くしたいならデータストアはDynamoDBが鉄則
⎻ DBの問題でどうしてもVPCを利⽤したい場合はDynamoDB Streamsを利⽤した⾮同期反映を
検討する
✤ パッケージサイズを⼩さくする
⎻ サイズが⼤きくなるとコールドスタート時のコードのロードおよびZipの展開に時間がかかる
⎻ 不要なコードは減らす
⎻ 依存関係を減らす
⎻ 不要なモジュールは含めない
⎻ 特にJavaは肥⼤しがち
⎻ JavaだとProGuardなどのコード最適化ツールを使って減らすという⼿もある
⎻ 他の⾔語でも同様のものはある
- 52.
コールドスタートを速くする
✤ Javaの場合だけ
⎻ POJOではなくバイトストリームを使う
⎻内部で利⽤するJSONシリアライゼーションライブラリは多少時間がかかるので、バイトス
トリームにしてより軽量なJSONライブラリを使ったり最適化することも可能
⎻ https://github.com/FasterXML/jackson-jr
⎻ http://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-stream.html
⎻ 匿名クラスをリプレースするようなJava8の機能を利⽤しない(lambda、メソ
ッド参照、コンストラクタ参照など)
- 53.
- 54.
- 55.
- 56.
- 57.
監視しなくていいと思ってる問題
✤ Serverless !=Monitorless
✤ 処理の異常を検知して対応するのはユーザの仕事
⎻ 適切にログ出⼒を⾏い、適切にモニタする
✤ ベストプラクティス
⎻ CloudWatchのメトリクスを利⽤(Errors, Throttles)
⎻ CloudWatch Logsへのログ出⼒とアラーム設定
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
テストドライバ例
def lambda_handler(event, context):
#Dosomething
if __name__ == "__main__":
f = open("event.json")
event = json.load(f)
f.close()
context = ""
lambda_handler(event,context)
• Pythonの場合以下のようにすることでも可能。Javaも同様にPublicなmainメ
ソッドを定義して内部で呼び出すことも可能
- 68.
- 69.
- 70.