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
AWS-DEV-DEV-tokyo-serverless-elixir-with-aws-la...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ohr486
October 04, 2019
Programming
300
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS-DEV-DEV-tokyo-serverless-elixir-with-aws-lambda
ohr486
October 04, 2019
More Decks by ohr486
See All by ohr486
負荷試験Night#1 負荷試験2023年トレンド
ohr486
17
4.9k
Elixir/PhoenixによるWeb開発の現場から
ohr486
1
660
Hacking Phoenix Performance
ohr486
1
410
Plug & WAF
ohr486
2
560
elixirをプロダクションに導入する
ohr486
1
740
IEx maniacs
ohr486
4
680
Hack and Read Elixir
ohr486
2
820
Running App on AppRunner
ohr486
0
870
sponsor-talk-drecom-heisei-ruby-kaigi
ohr486
0
910
Other Decks in Programming
See All in Programming
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
620
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
190
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
420
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
560
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
480
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
370
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.7k
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
270
メールのエイリアス機能を履き違えない
isshinfunada
0
150
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
0
120
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
120
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
230
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
510
The browser strikes back
jonoalderson
0
1.4k
Statistics for Hackers
jakevdp
799
230k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
Fireside Chat
paigeccino
42
4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
WENDY [Excerpt]
tessaabrams
11
39k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
It's Worth the Effort
3n
188
29k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
370
Transcript
Serverless Elixir with AWS lambda AWS DEV DAY Tokyo @ohrdev
agenda 1. About Me 2. Target 3. Goal 4. サーバーレスアーキテクチャの歴史と進化
5. サーバーレスアーキテクチャの短所と長所 6. AWS Lambda 7. Custom Runtime 8. Elixir 9. Elixir on Custom Runtime 10. Serverless Elixirアプリの運用 11. Serverless Elixirに足りないもの 12. まとめ 2
1. About Me × Tsunenori Ohara × Twitter: @ohrdev ×
Github: ohr486 × 株式会社ドリコム × 好きなAWSサービス × AWS Lambda × Community × tokyo.ex, Erlang&ElixirFest × Hobby × 仏像制作, 写経, 丸太収集, 寺社仏閣 3
4 2. Target × 本セッションは以下の方を対象にしています × Lambdaについて深く理解したい × Node.js/Python/Ruby/Java/Go/.Net以外の言語でLambda を動かしたい
× サーバーレスについて理解したい × 低コストでサービスを運用したい × Elixirに興味がある
5 3. Goal × サーバーレスアーキテクチャの概要を理解する × AWS Lambdaの概要を理解する × カスタムランタイムのアーキテクチャを理解する
× Elixirを例にサーバーレスアーキテクチャでアプリを動かす方法を 知る × Lambdaの便利さ・簡単さを知る
6 4. サーバーレスアーキテクチャの 進化と歴史
サーバーレスとは? × 簡単に言うと、以下の様なアーキテクチャ × サーバーを自前運用しない × マネージドサービスの組み合わせで構築 × リクエスト単位で必要なCPUリソースをリアルタイムで確保し て処理
7
よく利用されるマネージドサービス × AWS Lambda × API Gateway × DynamoDB ×
ALB × etc 8
何が嬉しいの? × スケールを意識しなくて済む × 勝手にスケールイン・スケールアウト × 低コスト × 使った分だけ費用を払えば良い 9
サーバー運用のトレンド 1. 物理サーバーによる運用: オンプレミス 2. 仮装VMによる運用: VMWare, etc 3. クラウドによる運用:
EC2 4. コンテナによる運用: Docker, Kubernetes いまは、ここから 5. マネージドなコンテナサービス: ECS, EKS このあたりまで 6. Funcion as a Service: AWS Lambda これからは サーバーレスはWebサービスのアーキテクチャの文脈で語られることが 多い 10
11 5. サーバーレスアーキテクチャの 長所と短所
12 長所 × サーバー運用費用が安い × リクエスト(リソース)単位で費用が発生 × 運用オペレーションが不要 × 自動でスケールするのでトラフィックスパイクに強い
13 短所 × デプロイメントが複雑 × ローカル開発どうする? × テストはどうする? × 対応したライブラリが少ない
× フレームワークは何つかう? × データベースによる制約がある × ハイトラフィック時のコネクション数上限 × 様々な制約 × 関数の同時実行数 × 関数の最大処理時間/タイムアウト時間
14 APIサーバーの月額費用 × 一般的なAPIサーバー/EC2 × 30 day x 24 hour
x 1 hourあたりの価格 × サーバーレス/Lambda × リクエスト数 x リクエストあたりの平均処理時間と必要メ モリの価格
15 EC2
16 AWS Lambda
17 compute以外の部分は共通 × データベース: DynamoDB, RDS, ElastiCache × ストレージ: S3
× 監視 × etc
18 DEMO APIサーバーのインフラ費用の 比較
19 DEMO EC2の費用 https://calculator.s3.amazonaws.com/index.ht ml?lng=ja_JP Lambdaの費用 https://aws.amazon.com/jp/lambda/pricing/
20 6. AWS Lambda × コンピューティングサービス × マネージド × サーバー管理不要
× プロビジョニング不要 × 従量課金 × 使用(CPU)時間に応じて支払い
21 AWS Lambdaのアーキテクチャ × re:Invent2018でアーキテクチャについての発表 × https://www.youtube.com/watch?v=QdzV04T_kec&feature=youtu.be × https://www.slideshare.net/AmazonWebServices/a-serverless-journey-aws-l ambda-under-the-hood-srv409r1-aws-reinvent-2018
× 内部的にはFirecrackerが基盤 × https://firecracker-microvm.github.io/ × 超軽量VM(microVM)をセキュア,高速,大量に起動できるコンテ ナマシン × KVM上で動作, Rust実装のOSS
22 https://www.youtube.com/watch?v=QdzV04T_kec&feature=youtu.be
23 webサービス inet cloud Reqイベント リソース確保 イベント毎の計算 Resp返却 リソース解放 Respデータ
request response ・マネージドサービスで構築 ・自動でスケールイン・アウト アーキテクチャ
24 webサービス inet cloud Reqイベント リソース確保 イベント毎の計算 Resp返却 リソース解放 Respデータ
request response ・マネージドサービスで構築 ・自動でスケールイン・アウト AWS Service API G/W ALB AWS Lambda
25 7. CustOM RUNTIME × AWS Lambdaで任意の言語ランタイムを実行させる機能 × 2019/10時点で標準で利用できる言語 ×
Node.js × Python × Ruby × Java × Go × .Net
26 環境 × 実行環境はAmazon Linux × 利用できる環境変数 × https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported- versions.html
× 実行に必要なもの × bootstrap : Lambda起動時に実行されるファイル × function handler : 関数呼び出し時に実行するハンドラ
27 インターフェース × 内部的にはAWS Lambdaランタイムインターフェースをcall × HTTP API × https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-api.html
× パッケージング × https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-walkthrough.h tml
28 RUntime Interface × 次の呼び出し × GET: /runtime/invocation/next × 呼び出しイベントを取得する
× 呼び出しレスポンス × POST: /runtime/invocation/{Request-ID}/response × 呼び出しレスポンスをLambdaに送信する、Lambdaはその レスポンスをクラアントに送信する
29 シーケンス Runtime API bootstrap λ start /invocation/next runtimeの初期化処理 request
handler {payload} /invocation/{req-id}/response /invocation/next response start
30 フェーズ Runtime API bootstrap λ start /invocation/next runtimeの初期化処理 request
handler {payload} /invocation/{req-id}/respons e /invocation/next response start init phase invoke cycle
31 実行 Runtime API bootstrap λ start /invocation/next runtimeの初期化処理 request
handler {payload} /invocation/{req-id}/respons e /invocation/next response start 呼び出しイベント取得 呼び出しレスポンスを Lambdaに送信
32 DEMO Custom Runtimeで hello, world api作成
33 DEMO Custom Runtime Demo (Bash ver) https://github.com/ohr486/custom-runtime-de om/tree/master/bash-demo
8. Elixir is a dynamic, functional language designed for building
scalable and maintainable applications. 34
35 8. Elixir × ErlangVM上で動作する × 関数型言語 × モダンな開発環境/ツール ×
並行プログラミングしやすい × Actor Model × 軽量なプロセス × OSのプロセスとは異なる × 超軽量 × OTP( Open Telecom Platform ) × 所謂、並行プログラミングのパターン集/FW
36 Erlang VM Architecture Linux Server Erlang VM CPU CPU
CPU CPU CPU CPU コア数と同数のスケジューラー erlang process != OS process VMがスケジューラー間のプロセスを分 散/マイグレーション スケジューラー プロセス
37 Erlang PROCESS Architecture Erlang VM application controller application master
application プロセス ・elixir, iex, mix, etc ・user apps ・lib apps
38 9. Elixir ON Custom runtime × Init phase ×
bootstrapでErlangVMを起動 × VM上で(Lambda実行の為の)プロセス群がspawn × 以後、プロセスはLambdaがshutdownされるまでalive × /invocation/nextをcall × Invoke cycle × Requestを受けてhandler関数をcall × /invocation/{Request-ID}/responseをcall × Lambdaがレスポンスを返す × /invocation/nextをcall
39 シーケンス Runtime API bootstrap /invocation/next runtimeの初期化処理 request handler process
{payload} /invocation/{req-id}/response /invocation/next response start λ start Erlang RTS start start Keep Alive
40 カバー領域 Runtime API elixir handler Erlang RTS bootstrap AWS
Lambdaのカスタムランタイム Elixir/ErlangのRTS AWS Lambdaを扱うコアライブラリ プロセス群 Elixir実装の ハンドラ
41 10. Serverless ELixirアプリの運用 × アーキテクチャ上の制約 × デプロイメント
42 アーキテクチャ上の制約 × データベース × リレーショナルDB, NoSQL × 同時接続数、コネクション数に上限がある ×
ハイトラフィック時に接続数が上限を超える危険性 × コネクションの接続数管理やプーリングの機構が必要 × HTTP通信でオペレーションできるDB(DynamoDB) × HTTP通信による操作API × コネクション数を気にしなくて良いので相性が良い × 一般的にクラウドベース/HTTP通信で操作できるDBを推奨 (DynamoDB)
43 DBコネクション 確保されたリソース (コンテナ) 確保されたリソース (コンテナ) request 確保されたリソース (コンテナ) DB
DB con scale スケールすればするほど、コネクショ ン数が増える 扱えるDBコネクションの上 限がある MySQL, Redis, etc リクエストが増えるとスケールする
44 DBコネクション 確保されたリソース (コンテナ) 確保されたリソース (コンテナ) request 確保されたリソース (コンテナ) DynamoDB
http scale スケールすればするほど、コネクショ ン数が増える リクエスト数が増えても問題 ない リクエストが増えるとスケールする 推奨
45 Deployment × 関数/API単位でデプロイ × 複数の関数でアプリが構成される為、関数単体ではなく関 数群単位でデプロイ × マネージドなデプロイサービスやツール ×
CloudFormation × serverlessframework × SAM
46 利用するツール × Docker × Lambdaの実行環境のAmazon Linuxのイメージを利用 × Amazon Linux上でビルドしたラインタイムはLambda上でも
動作する × mix(Elixir標準のTaskRunner) × Elixirのpackagingは、アプリのバイナリとランタイム、起動 scriptなどをまとめてアーカイブされる × Cloudformation × Lambdaの適用 × Deploymentの実体
47 AWS AWS Lambdaの実行環境 コンテナ Amazon Linux docker image ex)
https://hub.docker.com/r/lambci/la mbci local / build PC docker release package release build AWS Lambda Func Amazon Linux Image = Lambda実行時と同環境 同一 Lambdaの実行時の環境で動作 するバイナリ CloudFormation 起動 req res packaging pkg
48 AWS [init phase] step1. bootstrapを実行 step2. Erlang RTSが起動 step3.
リクエストを処理する handlerアプリが起 動 step4. /invocation/next をcallしてリクエストを 取得開始 release package AWS Lambda Func /bootstrap ... bin以下の起動scriptを叩いてアプリ起動 /bin/ ... 実行ファイル、起動scriptなど /lib/ ... 関連ライブラリ群 /releases/ … リリース関連
49 DEMO Custom RuntimeでElixirApp 作成 RESTでDynamoDBに対する CRUDを行う
50 DEMO erllambda https://github.com/alertlogic/erllambda
51 DEMO Custom Runtime Demo (elixir ver) https://github.com/ohr486/custom-runtime-de om/tree/master/elixir-demo
11. Serverless EliXIRに足りないもの × Web Application Framework for Serverless ×
Networkingライブラリ for Serverless × 複数ErlangVM間でのクラスタリングをLambdaでも行いたい × 起動中のコンテナ間の通信 52
11. Serverless EliXIRに足りないもの × 事例 53
12 まとめ 54
55 × サーバーレスアーキテクチャの概要を紹介しました × AWS Lambdaの概要を紹介しました × カスタムランタイムのアーキテクチャを紹介しました × Elixirを例にカスタムランタイムでアプリを動作させる方法を紹介
しました
56 AWS Lambdaはとても面白く、使い方によっては 色々な事ができるサービスだと思います ぜひ、皆さんも触ってみてください Let’s be serverless !
THANKS! Any questions? You can find me at @ohrdev &
[email protected]
57