web-dev-qa-db-ja.com

AWS Lambda関数は常にnullを返します(ノード/ Javascript)?

イベントデータを取得してSNSトピックにメッセージを送信することになっている単純なLambda関数があります。

ランタイムはNode.js 8.10です。

Lambdaコード全体を次に示します。

const AWS = require("aws-sdk");

exports.handler = async (event) => {

const sns = new AWS.SNS();

const emailBody = 
`
New Message

From: ${event.name}
Contact: ${event.contact}

Message: ${event.message}
`;

const snsMessageParams = {
    TopicArn: process.env.snsTopicArn,
    Message: emailBody
};

sns.publish(snsMessageParams, (err, data) => {
    if(err) {
        return err;
    } else {
        return data;
    }
  });
};

関数を実行するたびに、常に応答としてnullが返されます。エラーは返されませんが、SNSからメールでメッセージを受信することはないため、問題が発生しています。なんだかわからない。

SNSコンソールから、およびNode SDKからローカルコンピューターに)からメッセージをSNSトピックに正常に公開できます。これらは完全に機能します。環境変数のsnsTopicArnが私の成功したローカルコードとSNSコンソールから直接コピーして貼り付けることで正しいです。

Lambda関数に実行ロールがあり、自分のアカウントのトピックに関するSNSに公開できます。すべてをテストするためだけにLambdaのロールを構成するときに、デフォルトの「SNSPublish」オプションを選択しました。ただし、参考までに、ここに私の実行ロールのポリシーを示します。

{
  "roleName": <MyRoleName>,
  "policies": [
    {
       "document": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "sns:Publish"
              ],
              "Resource": "arn:aws:sns:*:*:*"
            }
          ]
        }
    ...
}

ここで何が問題になっていますか?どんな助けでも間違いなくありがたいです。

10
Z_z_Z

わかりました、それで私はそれを理解しました。

2つの問題がありました。 1つ目は、Lambda for Nodeによって暗黙的に使用される「コールバック」パラメーターを使用していなかったことです。 2つ目は、関数はデフォルトで非同期であるため、後で「待機」することを想定しています。 「非同期」を削除して同期的に実行することを決定しました。これは単純な関数であり、とにかくそれを必要としないからです。

これが私の更新された作業コードです:

const AWS = require("aws-sdk");
const sns = new AWS.SNS();

exports.handler = (event, context, callback) => {

const emailBody = 
`
Message

From: ${event.name}
Contact: ${event.contact}

Message: ${event.message}
`;

const snsMessageParams = {
    TopicArn: process.env.snsTopicArn,
    Message: emailBody
};

sns.publish(snsMessageParams, (err, data) => {
    if(err) {
        return err;
    } else {
        callback(null, JSON.stringify(data));
    }
});
};
9
Z_z_Z