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
okinari
March 06, 2020
Technology
0
69
AWS Lambda(+API Gateway)でバイナリを扱う話
okinari
March 06, 2020
Tweet
Share
More Decks by okinari
See All by okinari
僕の家からリモコンが消えた話(NatureRemoについて)
okinari
0
48
コンストラクタ、知ってますよね?
okinari
1
96
スマートスピーカーのすゝめ
okinari
0
39
最近のNAS製品事情
okinari
0
31
Flutterで簡単なアプリを作ってみる
okinari
0
21
Webマーケティングとは?
okinari
0
32
エンジニアにも知ってほしいWebマーケティングの世界
okinari
2
370
データ収集のすゝめ
okinari
1
270
FlutterをWEBエンジニアが扱ってみたお話
okinari
0
440
Other Decks in Technology
See All in Technology
2/18/25: Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
0
130
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
990
組織貢献をするフリーランスエンジニアという生き方
n_takehata
2
1.3k
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
2
720
ハッキングの世界に迫る~攻撃者の思考で考えるセキュリティ~
nomizone
13
5.3k
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
760
OpenID Connect for Identity Assurance の概要と翻訳版のご紹介 / 20250219-BizDay17-OIDC4IDA-Intro
oidfj
0
280
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
0
810
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.2k
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
1
860
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
400
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
120
Featured
See All Featured
Visualization
eitanlees
146
15k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
Side Projects
sachag
452
42k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
630
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
We Have a Design System, Now What?
morganepeng
51
7.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
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)