2016-12-04 17 views
4

C#lambdasをサポートしている最近リリースされたSDKを使用しています。ラムダAが公開するSNSトピック設定があります。それはすべて正常に動作しています。今私はその同じ話題に登録されているラムダBを持っています。ラムダAの発火時ラムダBが起動され、JSONメッセージが渡されます。問題はJSONをAmazon.SimpleNotificationService.Util.Messageタイプに解析することができないことです。AWS LambdaのSNSメッセージオブジェクトを解析します。

私はこのJSONを与えました。

{ 
"Records": [ 
{ 
    "EventSource": "aws:sns", 
    "EventVersion": "1.0", 
    "EventSubscriptionArn": "arn:.......", 
    "Sns": { 
    "Type": "Notification", 
    "MessageId": "ce4a1d7c-c50d-51ea-bfe8-4dc1078795fe", 
    "TopicArn": "arn:.......", 
    "Subject": null, 
    "Message": "test queue", 
    "Timestamp": "2016-12-04T07:05:46.709Z", 
    "SignatureVersion": "1", 
    "Signature": "<mysighere>", 
    "SigningCertUrl": "<pem url here>", 
    "UnsubscribeUrl": "<unsub url here>", 
    "MessageAttributes": {} 
    } 
    } 
] 
} 

だから私は

var j = Newtonsoft.Json.Linq.JObject.Parse(messageText.ToString()); 
var sns = jsonData["Records"][0]["Sns"]; 

Console.Write($"sns object: {sns}"); 
var message = Message.ParseMessage(sns.ToString()); 

。私はちょうど「SNS」ノードを与えない、このコード(messageTextが型である「オブジェクト」パラメータを行うことを試みた。しかしParseMessageはエラーをスローします呼び出しますSigningCertUrlフィールドがnullであると言っています。クラウドウォッチにJSONを書き込んだので、すべてのフィールドに値が設定されているのがわかります。私はそのすべてのプロパティをnullしようとしました。

+0

は 'Console.Write($ "SNSオブジェクト:{} SNS")の出力何;?' –

+0

大きなオブジェクトのsnsノードでオブジェクト値を保持しています...... { "タイプ": "通知"、 "MessageId": "ce4a1d7c-c50d-51ea-bfe8-4dc1078795fe"、 "TopicArn" : "arn:......."、 "件名":null、 "メッセージ": "テストキュー"、 "タイムスタンプ": "2016-12-04T07:05:46.709Z"、 " SignatureVersion ":" 1 "、 "署名 ":"""、 "MessageAttributes":{} } "" SigningCertUrl ":" "、 " UnsubscribeUrl " – ToddB

答えて

2

ここでの問題は、メッセージを解析するためのAWS SDKのバグです。ここでは、 "parseMessage"メソッドが何をしているのですか(他にもいくつかのフィールドがありますが、これらは問題があります)。解析が実行されるとき、それは返すので、最後には「URL」はここでは代わりに

message.SigningCertURL = Message.ValidateCertUrl(func("SigningCertURL")); 
    message.SubscribeURL = func("SubscribeURL"); 
    message.UnsubscribeURL = func("UnsubscribeURL"); 

「URL」の(すべて大文字)はJSON

"SigningCertUrl": "<pem url here>", 
"UnsubscribeUrl": "<unsub url here>", 

には何かということですので、それは何のフィールドを見つけていないか注意してくださいヌル。 ValidateCertUrlメソッドが失敗します。

「URL」から「URL」に変更するJSON文字列を更新するだけですべてが機能し始めたことを確認しました。

これはGitHubに問題が記録されています。 https://github.com/aws/aws-sdk-net/issues/502

UPDATE あなたはGitHubの問題を見れば、あなたは私が間違ったライブラリを使用していたので、私はこれに走った理由だったが表示されます。 。そうではないバグ、ユーザー・エラー:(このライブラリの

プル Amazon.Lambda.SNSEvents

関連する問題