Submit Search
Upload
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
•
13 likes
•
15,996 views
Takehiro Suemitsu
Follow
AWS Lambdaで色々とハマった話です。
Read less
Read more
Engineering
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 45
Download now
Download to read offline
Recommended
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
Masaki Misawa
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
Black Belt Online Seminar AWS Amazon S3
Black Belt Online Seminar AWS Amazon S3
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 Amazon Kinesis
AWS Black Belt Online Seminar 2017 Amazon Kinesis
Amazon Web Services Japan
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
Amazon Web Services Japan
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
Amazon Kinesis Analytics によるストリーミングデータのリアルタイム分析
Amazon Kinesis Analytics によるストリーミングデータのリアルタイム分析
Amazon Web Services Japan
Recommended
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
Masaki Misawa
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
Black Belt Online Seminar AWS Amazon S3
Black Belt Online Seminar AWS Amazon S3
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 Amazon Kinesis
AWS Black Belt Online Seminar 2017 Amazon Kinesis
Amazon Web Services Japan
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
Amazon Web Services Japan
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
Amazon Kinesis Analytics によるストリーミングデータのリアルタイム分析
Amazon Kinesis Analytics によるストリーミングデータのリアルタイム分析
Amazon Web Services Japan
AWS Black Belt Techシリーズ Amazon Kinesis
AWS Black Belt Techシリーズ Amazon Kinesis
Amazon Web Services Japan
20190911 AWS Black Belt Online Seminar AWS Batch
20190911 AWS Black Belt Online Seminar AWS Batch
Amazon Web Services Japan
ログ管理のベストプラクティス
ログ管理のベストプラクティス
Akihiro Kuwano
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
20200218 AWS Black Belt Online Seminar Next Generation Redshift
20200218 AWS Black Belt Online Seminar Next Generation Redshift
Amazon Web Services Japan
AWSからのメール送信
AWSからのメール送信
Amazon Web Services Japan
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
20191001 AWS Black Belt Online Seminar AWS Lake Formation
20191001 AWS Black Belt Online Seminar AWS Lake Formation
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
Amazon Web Services Japan
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
dcubeio
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎
Masayuki Ozawa
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本
Amazon Web Services Japan
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
Amazon Web Services Japan
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
はじめてのAws lambda
はじめてのAws lambda
dcubeio
はじめてのAWS Lambda
はじめてのAWS Lambda
Masaki Misawa
More Related Content
What's hot
AWS Black Belt Techシリーズ Amazon Kinesis
AWS Black Belt Techシリーズ Amazon Kinesis
Amazon Web Services Japan
20190911 AWS Black Belt Online Seminar AWS Batch
20190911 AWS Black Belt Online Seminar AWS Batch
Amazon Web Services Japan
ログ管理のベストプラクティス
ログ管理のベストプラクティス
Akihiro Kuwano
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
20200218 AWS Black Belt Online Seminar Next Generation Redshift
20200218 AWS Black Belt Online Seminar Next Generation Redshift
Amazon Web Services Japan
AWSからのメール送信
AWSからのメール送信
Amazon Web Services Japan
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
20191001 AWS Black Belt Online Seminar AWS Lake Formation
20191001 AWS Black Belt Online Seminar AWS Lake Formation
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
Amazon Web Services Japan
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
dcubeio
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎
Masayuki Ozawa
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本
Amazon Web Services Japan
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
Amazon Web Services Japan
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
What's hot
(20)
AWS Black Belt Techシリーズ Amazon Kinesis
AWS Black Belt Techシリーズ Amazon Kinesis
20190911 AWS Black Belt Online Seminar AWS Batch
20190911 AWS Black Belt Online Seminar AWS Batch
ログ管理のベストプラクティス
ログ管理のベストプラクティス
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
20200218 AWS Black Belt Online Seminar Next Generation Redshift
20200218 AWS Black Belt Online Seminar Next Generation Redshift
AWSからのメール送信
AWSからのメール送信
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
20191001 AWS Black Belt Online Seminar AWS Lake Formation
20191001 AWS Black Belt Online Seminar AWS Lake Formation
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Similar to AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
はじめてのAws lambda
はじめてのAws lambda
dcubeio
はじめてのAWS Lambda
はじめてのAWS Lambda
Masaki Misawa
失敗から学ぶAWSの監視
失敗から学ぶAWSの監視
株式会社オプト 仙台ラボラトリ
Lambda in java_20160121
Lambda in java_20160121
Teruo Kawasaki
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
俺のLambda
俺のLambda
Motokatsu Matsui
aws lambdaでpythonを実行するときのチューニング案を試してみた!
aws lambdaでpythonを実行するときのチューニング案を試してみた!
Shun Fukazawa
Aws lambda & amazon api gateway入門
Aws lambda & amazon api gateway入門
Yutaka Kajiwara
re:invent2018 総ざらえ
re:invent2018 総ざらえ
真乙 九龍
20160404 jaws ugアーキテクチャ専門支部ハイブリッドクラウド分科会#4
20160404 jaws ugアーキテクチャ専門支部ハイブリッドクラウド分科会#4
Naomi Yamasaki
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
Amazon Web Services Japan
JAWS FESTA Tohoku 2014 WordPressとAWSの素敵な関係
JAWS FESTA Tohoku 2014 WordPressとAWSの素敵な関係
Kazue Igarashi
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Shiraishi Masayuki
Serverless frameworkでお手軽lambda運用 at #nseg #93
Serverless frameworkでお手軽lambda運用 at #nseg #93
ko ty
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
真吾 吉田
初めての AWS
初めての AWS
itatyo
Lambda Layerの権限制御を試してみた
Lambda Layerの権限制御を試してみた
KazukiNabasama
20140628 AWSの2014前半のアップデートまとめ
20140628 AWSの2014前半のアップデートまとめ
Yasuhiro Araki, Ph.D
20121221 AWS re:Invent 凱旋報告
20121221 AWS re:Invent 凱旋報告
真吾 吉田
AWSアップデート2012.12.01(個人開発者向け)+Glacier
AWSアップデート2012.12.01(個人開発者向け)+Glacier
Yasuhiro Araki, Ph.D
Similar to AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
(20)
はじめてのAws lambda
はじめてのAws lambda
はじめてのAWS Lambda
はじめてのAWS Lambda
失敗から学ぶAWSの監視
失敗から学ぶAWSの監視
Lambda in java_20160121
Lambda in java_20160121
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
俺のLambda
俺のLambda
aws lambdaでpythonを実行するときのチューニング案を試してみた!
aws lambdaでpythonを実行するときのチューニング案を試してみた!
Aws lambda & amazon api gateway入門
Aws lambda & amazon api gateway入門
re:invent2018 総ざらえ
re:invent2018 総ざらえ
20160404 jaws ugアーキテクチャ専門支部ハイブリッドクラウド分科会#4
20160404 jaws ugアーキテクチャ専門支部ハイブリッドクラウド分科会#4
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
JAWS FESTA Tohoku 2014 WordPressとAWSの素敵な関係
JAWS FESTA Tohoku 2014 WordPressとAWSの素敵な関係
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Serverless frameworkでお手軽lambda運用 at #nseg #93
Serverless frameworkでお手軽lambda運用 at #nseg #93
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
初めての AWS
初めての AWS
Lambda Layerの権限制御を試してみた
Lambda Layerの権限制御を試してみた
20140628 AWSの2014前半のアップデートまとめ
20140628 AWSの2014前半のアップデートまとめ
20121221 AWS re:Invent 凱旋報告
20121221 AWS re:Invent 凱旋報告
AWSアップデート2012.12.01(個人開発者向け)+Glacier
AWSアップデート2012.12.01(個人開発者向け)+Glacier
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
1.
AWS Lambdaで ハマった話。
2.
最近 • AWSをちょいちょいいじる • AWS
Lambdaとやらに⼿を出す • 盛⼤にハマる • ある程度知⾒がたまった • いいタイミングでLTの機会が
3.
Lambda? • ランバダ? • ラムダと読みます •
以下Lambda
4.
Lambdaとは • コードをAWSクラウド上で実⾏してくれる • 対応⾔語はNodeJS,Java,Phython •
AWSクラウド上の⾊々な所で実⾏トリガーを設定できる • 例えばS3へのファイルアップロード • DynamoDBのテーブル更新時(insert, update, …)
5.
例えば • S3に画像がアップロードされた瞬間、サムネイル 画像を⽣成する • S3にログファイルがアップされたら、即座にファ イルの解析を⾏う •
DynamoDBにレコードがインサートされたら、何 かをする(利⽤シーン思いつかず)
6.
デメリット • 300秒以上かかる処理はできない • メモリ1.5G以上使う処理はつらい •
Javaが遅い(らしい)
7.
メリット • EC2いらない • 安い •
スケーラブル • 関数に対して割り当てるメモリを調節できる (128M ~1536M) • CPUはメモリ⽐例して勝⼿に強くなる
8.
そして • 最近オンデマンド(https経由)からもLambdaを 起動できるようになった! • これは便利!
9.
何ができるのか • クライアント(ブラウザ)が直接Lambdaを起動で きる • Lambdaに対してGET,
POST等でデータを送信でき る • そしてそのデータに応じて/対して⾊々とごにょご にょできる
10.
ただし • HTTPS経由でのLambda関数の起動はAWS Lambda単体では実現できない • ので…
11.
AWS API Gateway と、連携します
12.
API Gatewayとは • LambdaをHTTPSで呼び出せるようにするやつ •
これに関して詳細解説はしません • 詳細は公式へどうぞ • これとLambdaをうまく組み合わせて準備完了
13.
で、何をしたいのか • ブラウザからポストしたデータをS3に書き出した い • けど書き出してる時間は待ちたくない •
要はポストするだけして即座に”200 OK”が欲しい • 厳密に⾔うと202
14.
理想のイメージ クライアント API Gateway
Lambda とりあえず202 ⾮同期POST S3
15.
まずは普通に やってみる。
16.
• Node.jsのコードを記述 します • exports.handler
= function() {}に渡され いるeventにPOSTされ たpayloadが⼊ってます • 普通にaws-sdkを使って S3にアップロードして るだけです
17.
これを押すと関数のテストが出来ます
18.
エンドポイントから叩いてみる ここから⾮同期化を⽬指す。 成功
19.
⾮同期化への道。
20.
⾮同期化へのアプローチ 1. 無思考的にsetTimeoutを試す 2. Node.jsのchild_processを使う 3.
API Gatewayの統合リクエストヘッダーに X-Amz-Invocation-Typeを追加する 4. LambdaからLambdaを呼び出す
21.
setTimeout(); • S3へのアップロード部分の 実⾏を遅延させてみる • setTimeout()は実⾏キュー への登録が遅延されるだけで 結局同⼀スレッドで実⾏され るので意味なし •
(おさらい)Javascriptはシ ングルスレッド
22.
ちなみに • setTimeout()後にプロセ スを強制終了してみる • プロセスが⼀瞬で終わり ます •
当然setTimeout内の処理 も実⾏されず。。
23.
child_process • Node.jsはchild_processモジュールを通じて親プ ロセス(メインストリーム)から⼦プロセスを⽣成 することができます • ⼦プロセスは親プロセスから切り離す事ができる!
24.
何が嬉しいのか • ⼦プロセスを親から切り離すことによって、親プロ セスが死んでも⼦プロセスは動き続ける事ができる ようになる • 更にこの状態で⼦が親に対して、⾃分の処理終了を 待たないように宣⾔する事ができる •
通常は切り離したとしても親は⼦の終了を待つ
25.
実際のコード • spawnでOSコマンドを実 ⾏できる • detache:
trueが切り離し 命令 • unref()することで⼦の終 了を待機しなくなる • これで勝ったと思いきや…
26.
それ、Lambdaで 出来ないよ
27.
なぜなのか • Lambdaではメインストリームの処理が終了した瞬 間、派⽣する処理は全て殺されます • なので前述の例で⾔うとunref()が実⾏された瞬 間、親プロセスは以降の⾏に処理が無いのでそこで 終了します •
= ⼦も終了します
28.
なので • こうしても同じです • Node.js的には正しいですが、 Lambda的には意図した動作になっ てくれません •
detachしてるので⼦プロセスは⽣ き残れるはずですが、Lambdaでは process.exit()によって⼦も殺され ます • 無念。。。
29.
X-Amz-Invocation-Type • Amazon API
Gatewayの公式ドキュメントに下記 のような記述があります 要するに…
30.
API Gatewayの ここの
31.
これに これを 追加して下さい、ということです。
32.
しかし • やってはみるものの、⼀向に⾮同期にならない • 10秒スリープするようなスクリプトを呼ぶと、ご丁 寧に10秒待たされる •
API GatewayのLambdaに関連しそうなドキュメン トは⼀通り⽬を通したが⼀向に謎は解けない • ここでかなりハマる
33.
いろいろ試す • メソッドリクエストから統合リクエストに対して ヘッダーをマッピングしなきゃいけない? • X-Amz-Invocation-Type? XAmzInvocationType? x-amz-invocation-type? •
InvocationTypeはEvent?DryRun? • POST/GET?
34.
時は流れ • ふと初⼼に戻りLambdaの仕組みに⽴ち返る • Lambdaの公式ドキュメントに衝撃の事実を⾒つ ける
35.
36.
• LambdaはAPI Gatewayを⽤いたHTTPSを経由し て実⾏される場合、 常にRequestResponse(同期)の呼び出しタイプ を使⽤します。
37.
ん? • API Gateway側のドキュメントとLambda側のド キュメントで⽭盾が⽣じてる気がしなくもない •
とはいえ出来ないものは出来ないので仕⽅ない • ということで最終⼿段
38.
Lambda => Lambda •
はい、LambdaからLambdaを呼びます
39.
イメージ クライアント Gateway Lambda 200
OK ⾮同期 S3 Lambda
40.
実際のコード • Lambda上でaws-sdkを ⽤いたLambdaの⾮同期 呼び出しを⾏えばよいこ とに気づく • lambda.invokeAsync() がポイント •
InvokeArgsには受け 取ったpayload(event) をそのままぶん投げる
41.
⾮同期化成功!
42.
まとめ • Lambdaをうまく活⽤すればEC2いらずで経済的! • HTTPS経由の⾮同期呼び出しは⼯夫すれば何とか なる!
43.
最後に
44.
ドキュメント読もう。 ちゃんと。
45.
ご清聴ありがとう ございました。
Download now