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
serverless-elixir-intro
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ohr486
April 17, 2019
Programming
650
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
serverless-elixir-intro
ohr486
April 17, 2019
More Decks by ohr486
See All by ohr486
負荷試験Night#1 負荷試験2023年トレンド
ohr486
17
4.9k
Elixir/PhoenixによるWeb開発の現場から
ohr486
1
650
Hacking Phoenix Performance
ohr486
1
410
Plug & WAF
ohr486
2
550
elixirをプロダクションに導入する
ohr486
1
730
IEx maniacs
ohr486
4
660
Hack and Read Elixir
ohr486
2
810
Running App on AppRunner
ohr486
0
860
sponsor-talk-drecom-heisei-ruby-kaigi
ohr486
0
910
Other Decks in Programming
See All in Programming
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
330
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.2k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.3k
OSもどきOS
arkw
0
480
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
320
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
Claspは野良GASの夢をみるか
takter00
0
180
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
540
Inside Stream API
skrb
1
680
dRuby over BLE
makicamel
2
330
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
It's Worth the Effort
3n
188
29k
Unsuck your backbone
ammeep
672
58k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
The Cost Of JavaScript in 2023
addyosmani
55
10k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
470
Transcript
Serverless Elixirを 動かすまで 2019/04/17 fukuoka.ex#21 おーはら@tokyo.ex
agenda • about me • (ちょっとだけお礼と宣伝) • goal • サーバーレスアーキテクチャとは
• AWS Lambdaのアーキテクチャ • カスタムランタイムのシーケンス • ElixirをAWS Lambdaで実行するには • まとめ
about me • Tsunenori Ohara/おーはら ◦ Twitter: @ohrdev ◦ Github:
ohr486 • Work ◦ (株)目黒のIT企業 プラットフォーム開発 1部 部長(※エンジニアリングもやってます ) ◦ CTO室(仮) NEW! ◦ インフラ/基盤/アーキテクチャ設計 ,Elixir/Erlang/HCL/SL/Ruby/Golang • Community ◦ tokyo.ex, ElixirConfJapan, Erlang&ElixirFest オーガナイザー ◦ Japan Elixir Association ◦ meguro.rb, meguro.es • Hobby ◦ 仏像制作, 丸太収集, 写経, 寺社仏閣 ◦ 人工衛星/アマチュア無線
(ちょっとだけお礼と宣伝) fukuoka.exコミュニティの皆さまへ いつも日本のElixirの活動を盛り上げていただいて ありがとうございます。 JEA, tokyo.ex, ElixirFestのオーガナイザーとし て、また、Elixirを使う1エンジニアとしてお礼申し上 げます。
https://elixir-fest.jp
goal • サーバーレスアーキテクチャの概要を理解する • AWS Lambdaのアーキテクチャを理解する • ElixirをAWS Lambdaで動かす方法を知る
サーバーレスアーキテクチャとは • 簡単に言うと、以下のようなアーキテクチャ ◦ 「サーバーを自前運用せずに、マネージドサービスの組み合わせで構築する」 ◦ 「リクエスト単位で必要な CPUリソースをリアルタイムで確保し処理できる」 • よく利用されるマネージドサービスは以下
◦ AWS Lambda, API Gateway (AWS) ※今日の発表はこのあたりを話します ◦ Cloud Function (GCP) ◦ Azure Function (Aure) • 何が嬉しいのか? ◦ スケールを意識しなくてよい(勝手にスケールイン・アウトしてくれる) ◦ 費用が安い(使ったぶんだけ費用を払えば良い)
サーバーレスアーキテクチャとは • サーバー運用のトレンド ◦ 物理サーバーによる運用 : オンプレ ◦ 仮想VMによる運用 :
ex) VMware, etc ◦ クラウドによる運用 : ex) AWS EC2, etc ◦ コンテナによる運用 : ex) Docker, Kubernetes いまは、ここから ◦ マネージドなコンテナサービス : ex) AWS ECS, GKE, EKS このあたりまで ◦ Function as a Service : ex) AWS Lambda, Cloud Function, Azure Function これからは • Webサービスのアーキテクチャの文脈で語られる事が多い(気がする)
webサービス サーバーレスアーキテクチャとは • Elixirとサーバーレスアーキテクチャの関係性 inet cloud Reqイベント リソース確保 イベント毎の計算 Resp返却
リソース解放 Respデータ request response ・マネージドサービスで構築 ・自動でスケールイン・アウト
webサービス サーバーレスアーキテクチャとは • Elixirとサーバーレスアーキテクチャの関係性 inet cloud Reqイベント リソース確保 イベント毎の計算 Resp返却
リソース解放 Respデータ request response API G/W ALB AWS Lambda Custom Runtime
AWS Lambdaのアーキテクチャ • 今まででAWS Lambdaのアーキテクチャの情報はあまりなかったが、 re:Invent2018でアーキテクチャ詳細の発表があった。詳しくは以下を参照 ◦ https://www.youtube.com/watch?v=QdzV04T_kec&feature=youtu.be ◦ https://www.slideshare.net/AmazonWebServices/a-serverless-journey-aws-lambda-under-the-
hood-srv409r1-aws-reinvent-2018 • 内部的にはFirecrackerが基盤となっている ◦ https://firecracker-microvm.github.io/ ▪ 超軽量VM(microVM)をセキュア・高速・大量に起動できるコンテナマシン ▪ KVM上で動作、Rust実装、OSS
AWS Lambdaのアーキテクチャ
ElixirをAWS Lambda上で実行するには • カスタムランタイムを利用 ◦ AWS Lambdaで任意の言語ランタイムを実行させる機能 ◦ 実行環境はAmazon Linux、利用できる環境変数は以下
▪ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported-versions.html ◦ 必要なもの ▪ bootstrap : Lambda起動時に実行されるファイル ▪ function handler : 関数呼び出し時に実行するハンドラ ◦ 内部的にはAWS Lambdaランタイムインターフェース (HTTP API)をcall ▪ 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.html
カスタムランタイムのシーケンス Runtime API bootstrap λ start /invocation/next runtimeの初期化処理 request handler
{payload} /invocation/{req-id}/response /invocation/next response start
Runtime API bootstrap /invocation/next runtimeの初期化処理 request handler {payload} /invocation/{req-id}/response /invocation/next
response init phase invoke cycle start λ start カスタムランタイムのシーケンス
Runtime API bootstrap /invocation/next runtimeの初期化処理 request handler {payload} /invocation/{req-id}/response /invocation/next
response init phase invoke cycle 呼び出しイベント取得 呼び出しレスポンスを Lambdaに送信 start λ start カスタムランタイムのシーケンス
ElixirをAWS Lambda上で実行するには Runtime API λ start /invocation/next elixir handler Erlang
RTS start OTP App start elixir lambda core start bootstrap start OTP App
ElixirをAWS Lambda上で実行するには Runtime API request /invocation/next elixir handler Erlang RTS
{payload} elixir lambda core bootstrap :ok | {:ok, result} handle(Event, Context) /invocation/{req-id}/response response
ElixirをAWS Lambda上で実行するには Runtime API request /invocation/next elixir handler Erlang RTS
{payload} elixir lambda core bootstrap :ok | {:ok, result} handle(Event, Context) /invocation/{req-id}/response response
ElixirをAWS Lambda上で実行するには Runtime API elixir handler Erlang RTS elixir lambda
core bootstrap AWS Lambdaのカスタムランタイム Elixir/ErlangのRTS AWS Lambdaを扱うコアライブラリ Elixir実装の ハンドラ
まとめ • サーバーレスアーキテクチャの概要を紹介しました • AWS Lambdaのアーキテクチャを紹介しました • カスタムランタイムのアーキテクチャを紹介しました • Elixirをカスタムランタイムを使って動作させた場合の概要を紹介しました
◦ 既存実装として、erllambdaがあります、詳しくはこちらを参考にすると理解しやすいです ▪ https://github.com/alertlogic/erllambda • Lambdaのコアライブラリ(開発中)や、内部実装についてはElixirFestで紹介する予 定です • ServerlessベースのWAFについてはElixirFestで紹介する予定です
最後に fukuoka.ex様、発表の機会を頂きありがとうございました 引き続きよろしくお願いいたします。