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
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
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
750
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.3k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
2
540
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.2k
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
110
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
190
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
net-httpのHTTP/2対応について
naruse
0
470
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
So, you think you're a good person
axbom
PRO
2
2.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Bash Introduction
62gerente
615
220k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Building AI with AI
inesmontani
PRO
1
1.1k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
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様、発表の機会を頂きありがとうございました 引き続きよろしくお願いいたします。