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 Lambda(+API Gateway)でバイナリを扱う話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
okinari
March 06, 2020
Technology
110
0
Share
AWS Lambda(+API Gateway)でバイナリを扱う話
okinari
March 06, 2020
More Decks by okinari
See All by okinari
僕の家からリモコンが消えた話(NatureRemoについて)
okinari
0
77
コンストラクタ、知ってますよね?
okinari
1
110
スマートスピーカーのすゝめ
okinari
0
64
最近のNAS製品事情
okinari
0
85
Flutterで簡単なアプリを作ってみる
okinari
0
31
Webマーケティングとは?
okinari
0
46
エンジニアにも知ってほしいWebマーケティングの世界
okinari
2
390
データ収集のすゝめ
okinari
1
300
FlutterをWEBエンジニアが扱ってみたお話
okinari
0
470
Other Decks in Technology
See All in Technology
Network Firewall Proxyで 自前プロキシを消し去ることができるのか
gusandayo
0
160
ブラックボックス化したMLシステムのVertex AI移行 / mlops_community_62
visional_engineering_and_design
1
260
OpenClawでPM業務を自動化
knishioka
2
370
Babylon.js を使って試した色々な内容 / Various things I tried using Babylon.js / Babylon.js 勉強会 vol.5
you
PRO
0
190
AIにより大幅に強化された AWS Transform Customを触ってみる
0air
0
270
互換性のある(らしい)DBへの移行など考えるにあたってたいへんざっくり
sejima
PRO
0
520
AIエージェント時代に必要な オペレーションマネージャーのロールとは
kentarofujii
0
280
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
3
2.1k
AI時代のIssue駆動開発のススメ
moongift
PRO
0
340
マルチモーダル非構造データとの闘い
shibuiwilliam
1
140
Podcast配信で広がったアウトプットの輪~70人と音声発信してきた7年間~/outputconf_01
fortegp05
0
190
契約書からの情報抽出を行うLLMのスループットを、バッチ処理を用いて最大40%改善した話
sansantech
PRO
3
340
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Between Models and Reality
mayunak
2
250
Designing for Timeless Needs
cassininazir
0
180
Game over? The fight for quality and originality in the time of robots
wayneb77
1
150
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Become a Pro
speakerdeck
PRO
31
5.9k
A Tale of Four Properties
chriscoyier
163
24k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
880
Transcript
AWS Lambda (+API Gateway) で、バイナリを扱う話
Self-introduction Name: okinari (おきなり) Job: Freelance Engineer (Marketing Engineer) Like:
Flutter(Dart) / Golang / React(TypeScript) Code Geass / Tonkotsu Ramen / Karaage / Karaoke / Bouldering Twitter:@okinari
AWS Lambda ・AWSのFaaS(Function as a Service) ・サーバ管理が不要(サーバレス) ・コストも実行時間分だけお支払い(100ms単位) ・関数だけ書けばよいので、お手軽 参考:
https://aws.amazon.com/jp/lambda/
API Gateway ・APIの入り口 ・APIの実際の処理はAWSの別サービスと連携 ・機能次第では、コードを書かずに作成可能 ・トラフィック管理、セキュリティ、 モニタリング、APIバージョン管理などが役割 参考: https://aws.amazon.com/jp/api-gateway/
そもそもの要件(私が参加時に決まっていた) ・バイナリの送受信などの処理したい ・特定の時間に大量アクセスされる予定 ・スケーラビリティを考慮する →上記の理由より、Lambdaを使いたい
Lambdaからバイナリを送るには ・API Gatewayの設定をいくつか変更する ・Lambda側でbase64エンコードして返却
None
None
None
Lambdaにバイナリを送るには ・「Lambda プロキシ統合」は使用できない (統合レスポンスの設定ができない) ※Lambda設定画面からトリガー追加すると デフォルトで使用する状態になっているので チェックを外してやる必要がある
Lambdaからバイナリを送るには ・Lambda側でbase64エンコードして返却 ・base64エンコードしたもの単体をreturnする ・デフォルトの状態では、json形式で statusCode、bodyなどを返却するが、 バイナリの場合は、単体じゃないとダメ(?)
None
None
一件落着…? これでOK! …とは行かず。 ここで思い出してほしい…
そもそもの要件(私が参加時に決まっていた) ・バイナリの送受信などの処理したい ・特定の時間に大量アクセスされる予定 ・スケーラビリティを考慮する →上記の理由より、Lambdaを使いたい
そもそもの要件(私が参加時に決まっていた) ・バイナリの送受信などの処理したい ・特定の時間に大量アクセスされる予定 ・スケーラビリティを考慮する →上記の理由より、Lambdaを使いたい
ファイル変換処理 ・音声ファイルのエンコード&デコード (既に使用が非推奨でちょい特殊なコーデック) ・シェルでコマンド叩けば変換できるらしい ・Node.jsの変換ライブラリとか、なさそう… →Lambdaってbashの実行ってできるの…?
果たして… ・説明資料の作成が面倒なのd、 10分では時間不足なので、結論だけ言うと… できます
Lambdaでbash実行 ・Lambdaにファイルをアップロードしたとき、 設置されるディレクトリは /var/task/ ・共有ライブラリは /var/task/lib を読み込む ・実行ファイルはフルパス指定でいいよね?
Lambdaでbash実行 ・/tmp 配下は書き込みOK (それ以外は書き込みできない) ・ソースファイルはzipで固めて、アップロード ・Node.jsのchild_processでコマンド実行
Lambda Layerを利用する ・Lambda Layerにアップロードすると、 /opt に設置される ・パスが通っているところを確認する ・共有ライブラリは /opt/lib から読み込む
・実行ファイルは /opt/bin から読み込む (実行ファイルはフルパス指定がいいと思うけど)
ちょっとだけソース見せます そっちのほうが、イメージが湧く…でしょう?
参考ページ AWS公式: https://aws.amazon.com/jp/lambda/ API Gatewayがバイナリデータをサポートしたので試してみまし た: https://dev.classmethod.jp/cloud/aws/binary-data-supp orted-by-api-gateway/ Stackoverflowのページいくつか見たけど、履歴から探せなかっ た…
Thanks! 質問は下記までお願いします。 ◂ @okinari (Twitter)