2017-11-07 9 views
2

モバイルアプリのユーザーがAmazon S3でファイル(画像)をアップロードできるAWSバックエンドAPIを実装する必要があります。 アップロードしたファイルとDynamoDB上のユーザーのレコードを関連付けることができないため、Amazon S3と直接接続するAPIを作成することはできません。 私は、次の手順を実行するAPIによってトリガされるラムダ関数(Java)を作成すると考えました。 1)Amazon S3の機能を呼び出してファイルをアップロードします。 2)Dynamo DBにレコードを書き込みます。ファイル APIとして公開されているラムダ関数への入力にバイナリファイルを提供する方法はありますか?S3でファイルをアップロードしてDBに書き込みを行うAWS API

私にお知らせください。ありがとうございました!

ダヴィデ

答えて

2

これを行うための最善の方法は、presigned URLsです。特定の名前とタイプのファイルをS3に直接アップロードできるURLを生成することができます。この方法では、大きなファイルがサーバーの速度を遅くしたり、ラムダの制限を超えたり、帯域幅を倍増したりすることを心配する必要はありません。ほとんどの場合、ユーザーにとってはより高速で、S3 transfer accelerationもサポートしています。

のようなものに見えることができますプロセス:

  1. ユーザー要求がサーバーからのリンクをお使いのサーバが
  2. ユーザーのアップロードがpresigned URLを使ってS3に直接ファイルpresigned URLをDynamoDBの中にエントリを書き込み、返す
  3. アップロードが完了したら、Lambdaを使用して通知を受け取るか、またはユーザーにあなたのサーバーにアップロードを通知させるだけです。
  4. サーバーは、はい、pass binary data to Lambda functionsへの道があり、必要な事後処理を行い、

そして、あなたの実際の質問に答えるように準備ができたファイルをマークします。リンクはステップバイステップのチュートリアルですが、基本的にはAPI Gatewayでは "Request body passthrough"を "テンプレートが定義されていない(推奨)"に設定し、予期したコンテンツタイプを記入する必要があります。マッピングに"base64data": "$input.body"が含まれている必要があります。タイプを「バイナリサポート」に設定する必要があります。実際のラムダ関数では、データには"base64data"という名前でアクセスする必要があります。

+0

lamdbaをアップロードトリガーにして、DynamoDBへの書き込みをs3にする必要があるアプリケーションではなく、それを実行することができます。しかしそうでなければ、これは私がそれをやる方法です。 – strongjz

+1

右の順番はいずれにしてもかまいません。ユーザーが任意の名前と任意のサイズのファイルをアップロードできる公開されたバケットではなく、事前に設定されたURLを使用するようにしてください。 – kichik

関連する問題