質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

2400閲覧

S3アップロードでLocalのLambda Functionを動かす方法

te_ff

総合スコア13

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/06/11 07:12

前提・実現したいこと

フロントエンド:React
バックエンド:Python Lambda Function

Reactで直接S3に画像をアップロードし、アップロード時にLambdaFunctionで処理をしたいと考えています。
Localでテストした後にAWSにデプロイしたいのですが、S3アップロードをトリガーにLocal Lambda Functionを動かす方法がわかりません。
Localではテストできないのでしょうか?

AWS toolkit にてLambdaアプリケーションを作成し、sam local start-api -p 8000で起動しています。

該当のソースコード

Python

1import json 2import urllib.parse 3import boto3 4 5def lambda_handler(event, context): 6 # ---for local test--- 7 s3 = boto3.client("s3") 8 9 # Get the object from the event and show its content type 10 bucket = event["Records"][0]["s3"]["bucket"]["name"] 11 key = urllib.parse.unquote_plus(event["Records"][0]["s3"]["object"]["key"], encoding="utf-8") 12 try: 13 response = s3.get_object(Bucket=bucket, Key=key) 14 print("CONTENT TYPE: " + response["ContentType"]) 15 return response["ContentType"] 16 except Exception as e: 17 print(e) 18 print( 19 "Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.".format( 20 key, bucket 21 ) 22 ) 23 raise e

yaml

1Resources: 2 MyBucket: 3 Type: AWS::S3::Bucket 4 BucketName: develop-test-bucket 5 6 CreateVideoFunction: 7 Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction 8 Properties: 9 CodeUri: lambdas/create_video/ 10 Handler: app.lambda_handler 11 Runtime: python3.8 12 Events: 13 CreateVideo: 14 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api 15 Properties: 16 Path: /create_video 17 Method: GET 18 FileUpload: 19 Type: S3 20 Properties: 21 Bucket: !Ref MyBucket 22 Events: s3:ObjectCreated:*

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

現実的に実際のS3アップロードをトリガーにするのは難しいのではないでしょうか…。
S3イベントをどうにかしてローカルに通知させれば実現可能かもしれませんが、そんなことをするよりは実際にテストする環境をAWSに作ってそこでテストしたほうが早いと思います。

ファイルアップロードされた時のイベント通知で送られるjsonの形は決まっているので、サンプルの入力を用意すればそれで擬似的にテストすることはできるでしょう。
AWS Lambda を Amazon S3 に使用する

既にご存知かもしれませんがsamでも擬似的にイベントを発生させてテストすることはできます。
sam local generate-event

投稿2021/06/11 07:33

yu_1985

総合スコア7447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

te_ff

2021/06/11 08:23

ありがとうございます! 記載していただいた方法で試すことにします!
guest

0

自己解決

不可能っぽいのでsam local generate-event s3 putでテストしてみます
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-generate-event.html

投稿2021/06/11 07:20

te_ff

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問