2

に私がAWSラムダに比較的新しいですので、多分これは簡単ですが、私は今のところ、それを考え出したていません。 APIゲートウェイリクエストに対する応答としてコールバックとして返すことができるのと同じJSONデータを返したいと思います。 問題は、ユーザーがアップロードした画像を処理して、その処理の結果をJSON形式でユーザーに返すことです。 S3アップロード(トリガー)に応答するラムダ関数を作成することはできますが、そのようにユーザーにデータを返すことはできません。戻りJSON S3のアップロードに対応し

+0

。 –

答えて

2

あなたは、単一の、同期動作としてこれを実装することができるかもしれません。イメージが10MB以下の場合、イメージを受け入れ、S3にアップロードし、処理し、データをユーザーに返すラムダ関数を作成することができます。これはまた、S3にアップロードして29秒以内に画像を処理できることを前提としています。これは、APIゲートウェイが要求をタイムアウトするまでの最大時間です。

それがあなたのために動作しません場合は、非同期処理にスイッチがあるでしょう。 S3アップロードイベントに応答し、処理を実行し、結果をDynamoDB、RDS、またはAuroraのテーブルに書き込むラムダ関数を持つことができます。 API Gatewayメソッドを公開して、完了した処理をチェックし、結果を取得することができます。クライアントはこのAPIゲートウェイメソッドをポーリングする必要があります。

1

私は別のアプローチをお勧めします:直接

  • あなたのラムダ関数サムネイル画像を聞かせ命名に基づいてS3に結果のサムネイルをバック救うそのバケットにはJavaScript
  • subscribe your lambda function to S3 eventsを使用して

    1. let the browser do the upload to S3たとえば、画像がsomeimage.jpgの場合は、someimage-thumb.jpgとして保存できます。アップロード後
    2. は、サムネイルが存在し、表示されるまで、JavaScriptクライアントの世論調査にループでS3バケットを聞かせて完成します。

    この方法を使用すると、アップロードが高速になり、ユーザーエクスペリエンスが向上し、信頼性が向上します。

    ============================================== ===

    実際にAPIゲートウェイを使用したい場合は、バイナリデータがnow supportedであるため可能です。関数内のデータは、バイナリまたはbase64でエンコードされたものとして受け取ることができます。あなたは、例えば、処理された画像をbase64エンコードし、いくつかのメタデータを含む応答を返信することができます:ここに

    { 
        "thumbnail": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==", 
        "metadataKey1": "some data", 
        "metadataKey2": "some other data" 
    } 
    

    短所:遅くなりますアップロードする

    1. 時間を私たちは、ボトルネックを導入しているとして、 。
    2. 特に大きな画像をbase64に/から変換する必要がある場合は、さらに処理が必要です。
    3. ブラウザは、処理されたイメージのレンダリングをより困難にします。あなたは、コードサンプルを含める必要が
  • 関連する問題