×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
AWS Lambda (+API Gateway) で、バイナリを扱う話
Slide 2
Slide 2 text
Self-introduction Name: okinari (おきなり) Job: Freelance Engineer (Marketing Engineer) Like: Flutter(Dart) / Golang / React(TypeScript) Code Geass / Tonkotsu Ramen / Karaage / Karaoke / Bouldering Twitter:@okinari
Slide 3
Slide 3 text
AWS Lambda ・AWSのFaaS(Function as a Service) ・サーバ管理が不要(サーバレス) ・コストも実行時間分だけお支払い(100ms単位) ・関数だけ書けばよいので、お手軽 参考: https://aws.amazon.com/jp/lambda/
Slide 4
Slide 4 text
API Gateway ・APIの入り口 ・APIの実際の処理はAWSの別サービスと連携 ・機能次第では、コードを書かずに作成可能 ・トラフィック管理、セキュリティ、 モニタリング、APIバージョン管理などが役割 参考: https://aws.amazon.com/jp/api-gateway/
Slide 5
Slide 5 text
そもそもの要件(私が参加時に決まっていた) ・バイナリの送受信などの処理したい ・特定の時間に大量アクセスされる予定 ・スケーラビリティを考慮する →上記の理由より、Lambdaを使いたい
Slide 6
Slide 6 text
Lambdaからバイナリを送るには ・API Gatewayの設定をいくつか変更する ・Lambda側でbase64エンコードして返却
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
Lambdaにバイナリを送るには ・「Lambda プロキシ統合」は使用できない (統合レスポンスの設定ができない) ※Lambda設定画面からトリガー追加すると デフォルトで使用する状態になっているので チェックを外してやる必要がある
Slide 11
Slide 11 text
Lambdaからバイナリを送るには ・Lambda側でbase64エンコードして返却 ・base64エンコードしたもの単体をreturnする ・デフォルトの状態では、json形式で statusCode、bodyなどを返却するが、 バイナリの場合は、単体じゃないとダメ(?)
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
一件落着…? これでOK! …とは行かず。 ここで思い出してほしい…
Slide 15
Slide 15 text
そもそもの要件(私が参加時に決まっていた) ・バイナリの送受信などの処理したい ・特定の時間に大量アクセスされる予定 ・スケーラビリティを考慮する →上記の理由より、Lambdaを使いたい
Slide 16
Slide 16 text
そもそもの要件(私が参加時に決まっていた) ・バイナリの送受信などの処理したい ・特定の時間に大量アクセスされる予定 ・スケーラビリティを考慮する →上記の理由より、Lambdaを使いたい
Slide 17
Slide 17 text
ファイル変換処理 ・音声ファイルのエンコード&デコード (既に使用が非推奨でちょい特殊なコーデック) ・シェルでコマンド叩けば変換できるらしい ・Node.jsの変換ライブラリとか、なさそう… →Lambdaってbashの実行ってできるの…?
Slide 18
Slide 18 text
果たして… ・説明資料の作成が面倒なのd、 10分では時間不足なので、結論だけ言うと… できます
Slide 19
Slide 19 text
Lambdaでbash実行 ・Lambdaにファイルをアップロードしたとき、 設置されるディレクトリは /var/task/ ・共有ライブラリは /var/task/lib を読み込む ・実行ファイルはフルパス指定でいいよね?
Slide 20
Slide 20 text
Lambdaでbash実行 ・/tmp 配下は書き込みOK (それ以外は書き込みできない) ・ソースファイルはzipで固めて、アップロード ・Node.jsのchild_processでコマンド実行
Slide 21
Slide 21 text
Lambda Layerを利用する ・Lambda Layerにアップロードすると、 /opt に設置される ・パスが通っているところを確認する ・共有ライブラリは /opt/lib から読み込む ・実行ファイルは /opt/bin から読み込む (実行ファイルはフルパス指定がいいと思うけど)
Slide 22
Slide 22 text
ちょっとだけソース見せます そっちのほうが、イメージが湧く…でしょう?
Slide 23
Slide 23 text
参考ページ AWS公式: https://aws.amazon.com/jp/lambda/ API Gatewayがバイナリデータをサポートしたので試してみまし た: https://dev.classmethod.jp/cloud/aws/binary-data-supp orted-by-api-gateway/ Stackoverflowのページいくつか見たけど、履歴から探せなかっ た…
Slide 24
Slide 24 text
Thanks! 質問は下記までお願いします。 ◂ @okinari (Twitter)