2016-04-14 18 views
1

私は新しい情報を見つけました。私のS3イベントソースに誤ったインターフェースを実装した可能性があります。私は今のところ、それが動作するようにすることができていないか、または、もしあればどのインタフェースを実装すべきかを理解できていません。 RequestHandlerインタフェースでは、handleRequestメソッドが値を返す必要があります。助言がありますか?AWS Lambda Java Handler Hello World

OUTPUTTYPE - あなたはラムダ関数同期 (RequestResponse呼び出しタイプを使用して)を呼び出すために計画している場合は、あなたがサポートされるデータ型のいずれかを使用して、関数の出力 を返すことができます。たとえば、 モバイルアプリケーションバックエンドとしてラムダ関数を使用する場合は、 を同期呼び出しします。あなたの出力データ型は、 をJSONにシリアル化します。

( イベント起動型を使用して)Lambda関数を非同期に呼び出す予定がある場合は、outputTypeは無効にする必要があります。たとえば、 Amazon S3、Amazon Kinesis、Amazon SNSなどのイベントソースでAWS Lambdaを使用する場合、これらのイベントソースは、イベント起動タイプを使用してLambda 関数を呼び出します。

私は基本的なハンドラを作成したが、私をほのめかすし続けて重要なステップを見逃しているように思われています。

コード&エラー以下:

package example; 

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.LambdaLogger; 
import com.amazonaws.services.lambda.runtime.RequestHandler; 
import com.amazonaws.services.s3.model.S3Event; 

public class Hello implements RequestHandler<S3Event, Object> { 
    public String handleRequest(S3Event input, Context context) { 
     return "Hello"; 
    } 
} 

{ "にErrorMessage": "エラーはJSONの解析中に発生しました"、
"ERRORTYPE": "java.lang.RuntimeException"、 "スタックトレース": []、
"原因":{ "にErrorMessage":「com.fasterxml.jackson.databind.JsonMappingException: は START_OBJECTトークン\ n個のうちのcom.amazonaws.services.s3.model.S3Eventのインスタンスをデシリアライズすることはできません出所: lambdainternal.util.NativeMemoryAsInputSt[email protected];行:1、 コラム:1" 、 "ERRORTYPE": "java.io.UncheckedIOException"、 "スタックトレース":[]、 "原因":{ "にErrorMessage":「COMのインスタンスをデシリアライズすることはできません。 amazonaws.services.s3.model.S3 START_OBJECTトークンのうち、\ 0,にあるイベント出典:[email protected];1、列:1 "、 " errorType ":" com.fasterxml.jackson.databind.JsonMappingException "、 " stackTrace ":[ " com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java :148) "、 " com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835) "、 " com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:831) "、 com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeOther(EnumDeserializer.java:137) " 、 "com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserial (EnumDeserializer.java:18) "、 " com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441) "、 " com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader。「オブジェクトとして] } }}

+1

私はあなたがJSONオブジェクトにシリアライズできる値を返すことになっていると思います。 '' 'Hello" ''は無効です。 – garnaat

答えて

0

方法のhandleRequest(の戻り値の型を作る)、あなたが返すことができます "1047)あまりにも" こんにちは

+0

私は見つけたいくつかの追加情報を追加しようとしていますが、コメントセクションでこれを許可していないようです。 – MikeH

0

あなたは

を得たエラーメッセージ:Javaの。

がSTART_OBJECTのうち、com.amazonaws.services.s3.model.S3Eventのインスタンスをデシリアライズすることはできませんトークン

は値が入力Pとして渡されたことを意味しますあなたのラムダ関数へのメタデータはS3Eventオブジェクトを表していません。

実際のS3イベントをトリガするのではなく、AWSコンソールからラムダ機能をテストしましたか?
もしそうなら、>ラムダ>機能> yourFunction>アクションに行くテストイベントを設定し、どちらかを選択S3はのためにあなたの関数に適切な入力を送信するためにサンプルイベントテンプレートからドロップダウンをを削除かS3を入れてテスト。

0

私はあなたが非オブジェクトレスポンスを返すことはできないと思います。

return new Gson().fromJson(jsonObject, Object.class); 

注:jsonObjectはあなたが返すようにしたい情報が含まれているJSONであるあなたは、このような何かを行うことができます。