Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Best of The Best Practices for Serverless
Search
n2xnot
December 06, 2018
Technology
0
1.3k
The Best of The Best Practices for Serverless
About optimizing AWS lambda.
n2xnot
December 06, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
140
AIエージェント×GitHubで実現するQAナレッジの資産化と業務活用 / QA Knowledge as Assets with AI Agents & GitHub
tknw_hitsuji
0
250
BFCacheを活用して無限スクロールのUX を改善した話
apple_yagi
0
130
Zephyr(RTOS)でOpenPLCを実装してみた
iotengineer22
0
110
AI時代のシステム開発者の仕事_20260328
sengtor
0
280
CloudFrontのHost Header転送設定でパケットの中身はどう変わるのか?
nagisa53
1
200
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
120
GitHub Actions侵害 — 相次ぐ事例を振り返り、次なる脅威に備える
flatt_security
2
1.6k
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
260
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
150
FlutterでPiP再生を実装した話
s9a17
0
200
Phase07_実務適用
overflowinc
0
2k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.6k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
200
Test your architecture with Archunit
thirion
1
2.2k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
490
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
240
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
690
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Chasing Engaging Ingredients in Design
codingconduct
0
150
Site-Speed That Sticks
csswizardry
13
1.1k
Transcript
The Best of The Best Practices for Serverless 西村直人 オートモーティブ事業部
株式会社ディー・エヌ・エー
自己紹介 • 名前: 西村直人 • 所属: サーバーサイドエンジニア • 最近はGolangとVue.jsを書いている •
AWS re:Inventへの参加は初 • ウキウキでUber Eatsを使うも部屋から閉め出さ れ海外の洗礼を受ける 2
エンジニアなら誰もが魅力的に見えるワード 3
4 それは・・・
ベストプラクティス 5
AWS re:Inventではベストプラクティスがいっぱい 約1600(session, workshop, chalktalk)あるセッション数のうちタイトル or 説 明文にベストプラクティスというワードが使われたセッション数はどれだけあるで しょう? ①
76 ② 129 ③ 278 ④ 372 6
AWS re:Inventではベストプラクティスがいっぱい 約1600あるセッション数のうちタイトル or 説明文にベストプラクティスというワー ドが使われたセッション数はどれだけあるでしょう? ① 76 ② 129
③ 278 ④ 372 7
関心のあるMyトピック Serverless IoT Architecture 8
関心のあるMyトピック Serverless IoT Architecture 9
Optimizing Your Serverless Applications 10
概要 • Lambdaにフォーカスを当てたセッション • セキュアかつ高性能なサーバーレスアプリケーションを構築するための最適化方法 を紹介している • Lambda関数と実行環境の最適化ベストプラクティス 11 関数
言語ランタイム 実行環境 コンピュータ基盤
AWS Lambdaとは AWS Lambda はサーバーをプロビジョニングしたり管理する必要なくコードを実行でき るコンピューティングサービス 12 イベントソース Lambda関数 サービス
データの 状態変更 API リクエスト
Lambda関連の振り返り • Ruby + カスタムランタイムであらゆる言語をサポート • C++, Rust, PHPなどが既に利用可能 •
AWS Toolkits for popular IDEs • IntelliJやVisual Studio Codeでステップ実行やデバッグが可能 • ALB(Application Load Balancer)のターゲットでLambdaを選択可能 • ルーティングごとにルールを追加、ALBから直接HTTPリダイレクトなど • Lambda Layers • Lambda関数をまたいで共通ロジックをまとめることができる 13
Lambda関数の最適化 14
Lambda関数の最適化まとめ 15 1. 依存関係を最小限にする 2. ハンドラとコアロジックを分離する 3. アプリケーションのスコープに基づいて機密情報を共有する • functionが1つ:
環境変数 • functionをまたぐケース:AWS System Manager - Parameter Store 4. インスタンスが再利用されることで変数、コネクション、依存関係にどのように影響を 与えるかを考える 5. ロジックはシンプルにする 6. エラーハンドリングではStep Functionsやメッセージングサービスを使う 7. MonorepoはFaaSではアンチパターン • Monorepoとはnpmで管理するパッケージを一つのgitリポジトリでまとめて管理 すること
Lambda関数の最適化まとめ 16 1. 依存関係を最小限にする 2. ハンドラとコアロジックを分離する 3. アプリケーションのスコープに基づいて機密情報を共有する • functionが1つ:
環境変数 • functionをまたぐケース:AWS System Manager - Parameter Store 4. インスタンスが再利用されることで変数、コネクション、依存関係にどのように影響を 与えるかを考える 5. ロジックはシンプルにする 6. エラーハンドリングではStep Functionsやメッセージングサービスを使う 7. MonorepoはFaaSではアンチパターン • Monorepoとはnpmで管理するパッケージを一つのgitリポジトリでまとめて管理 すること。
Lambda Environment variables • 関数に動的に渡すことができるキーと値のペア • Node.jsの場合はprocess.env、Pythonの場合はos.environに記述可能 • AWS Key
Management Service(KMS)を使用すれば暗号化も可能 17
AWS Systems Manager - Parameter Store • 秘匿データや設定データなどを一元的に管理できるストア • パラメータにタグをつけることができ、階層別で管理することができる
• KMSでの暗号化も可能 18
Lambda関数の最適化まとめ 19 1. 依存関係を最小限にする 2. ハンドラとコアロジックを分離する 3. アプリケーションのスコープに基づいて機密情報を共有する • functionが1つ:
環境変数 • functionが複数:AWS System Manager - Parameter Store 4. インスタンスが再利用されることで変数、コネクション、依存関係にどのように影響を 与えるかを考える 5. ロジックはシンプルにする 6. エラーハンドリングではStep Functionsやメッセージングサービスを使う 7. MonorepoはFaaSではアンチパターン • Monorepoとはnpmで管理するパッケージを一つのgitリポジトリでまとめて管理 すること
AWS Step Functions • 視覚的なワークフローを使用して、分散アプリケーションとマイクロサービスのコン ポーネントを調整できるサービス。 • 各ステップが自動的にトリガーおよび追跡され、エラーが発生した場合は再試行され る。 •
各ステップの状態を記録するため、問題が発生した場合は、問題を簡単に診断およ びデバッグ可能。 20
実行環境の最適化 21
実行環境の最適化まとめ 1. メモリを増やすことでCPUとI / Oを増やすことができる 2. AWS X-Rayを使用してワークロードのプロファイリングが可能 3. 実行モデルと呼び出し元のニーズについて深く考える
• すべてがAPI経由で呼ぶ必要はない 4. キュー、トピック、ストリームを使用する際にさまざまな側面を理解する 5. VPCには一定のメリットがあるが、セキュリティには必要ありません 6. IAM許可範囲を最小限に抑える • SAMのようなツールを活用する 22
実行環境の最適化まとめ 1. メモリを増やすことでCPUとI / Oを増やすことができる 2. AWS X-Rayを使用してワークロードのプロファイリングが可能 3. 実行モデルと呼び出し元のニーズについて深く考える
• すべてがAPI経由で呼ぶ必要はない 4. キュー、トピック、ストリームを使用する際にさまざまな側面を理解する 5. VPCには一定のメリットがあるが、セキュリティには必要ありません 6. IAM許可範囲を最小限に抑える • SAMのようなツールを活用する 23
Lambda functionライフサイクル 24 Download your code Start new Execution Environment
Bootstrap the runtime Start your code Full Cold Start Partial Cold Start Warm Start AWS Optimization Your Optimization
AWS X-Ray • アプリケーションが処理するリクエストに関するデータを収集するサービス • アプリケーションやその基盤となるサービスの実行状況を把握し、パフォーマンスの 問題やエラーの根本原因を特定して、トラブルシューティングを行うことができる 25 Cold Start
Initialization
Lambda最適化のまとめ 26 Lambda関数の最適化 1. 依存関係を最小限にする 2. ハンドラとコアロジックを分離する 3. アプリケーションのスコープに基づいて秘密ファイルを共有する 4.
インスタンスが再利用されることで変数や依存関係にどのように影響を与えるかを考える 5. ロジックはシンプルにする 6. Step FunctionsまたはMessaging Serviceまでオーケストレーション実行プッシュする 7. Monorepoはアンチパターン 実行環境の最適化 1. AWS X-Rayを使用してワークロードのプロファイリングが可能 2. 実行モデルと呼び出し元のニーズについて深く考える 3. キュー、トピック、ストリームを使用する際にさまざまな側面を理解する 4. VPCには一定のメリットがあるが、セキュリティには必要ない 5. IAMの許可範囲を最小限に抑える
セッションのスライドはこちら https://www.slideshare.net/AmazonWebServices/optimizing-your-serverless-applications-srv401r2- aws-reinvent-2018 Lambdaベストプラクティスはこちら https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html 27