これを行うための最善の方法は、presigned URLsです。特定の名前とタイプのファイルをS3に直接アップロードできるURLを生成することができます。この方法では、大きなファイルがサーバーの速度を遅くしたり、ラムダの制限を超えたり、帯域幅を倍増したりすることを心配する必要はありません。ほとんどの場合、ユーザーにとってはより高速で、S3 transfer accelerationもサポートしています。
のようなものに見えることができますプロセス:
- ユーザー要求がサーバーからのリンクをお使いのサーバが
- ユーザーのアップロードがpresigned URLを使ってS3に直接ファイルpresigned URLをDynamoDBの中にエントリを書き込み、返す
- アップロードが完了したら、Lambdaを使用して通知を受け取るか、またはユーザーにあなたのサーバーにアップロードを通知させるだけです。
- サーバーは、はい、pass binary data to Lambda functionsへの道があり、必要な事後処理を行い、
そして、あなたの実際の質問に答えるように準備ができたファイルをマークします。リンクはステップバイステップのチュートリアルですが、基本的にはAPI Gatewayでは "Request body passthrough"を "テンプレートが定義されていない(推奨)"に設定し、予期したコンテンツタイプを記入する必要があります。マッピングに"base64data": "$input.body"
が含まれている必要があります。タイプを「バイナリサポート」に設定する必要があります。実際のラムダ関数では、データには"base64data"
という名前でアクセスする必要があります。
lamdbaをアップロードトリガーにして、DynamoDBへの書き込みをs3にする必要があるアプリケーションではなく、それを実行することができます。しかしそうでなければ、これは私がそれをやる方法です。 – strongjz
右の順番はいずれにしてもかまいません。ユーザーが任意の名前と任意のサイズのファイルをアップロードできる公開されたバケットではなく、事前に設定されたURLを使用するようにしてください。 – kichik