Home > Enterprise >  How to send HTTP response from AWS Lambda
How to send HTTP response from AWS Lambda

Time:08-08

It's been a while since I last programmed and I have a simple problem. I don't know how to respond to a request once I sent an email using AWS Lambda & API Gateway (not REST but HTTP API).

I have a form that sends basic contact details to a Lambda function. It generates an email successfully. I now want to respond to the form informing it was successful. My Lambda code below, all examples I can find simply return the promise or just log the outcome in the Lambda function. If I return the promise I get a server 500 error.

I want to respond with all ok if successful or an error if there was a problem. Many thanks.

const aws = require("aws-sdk");
const ses = new aws.SES();
exports.handler = async function (event, context, callback) {
  console.log('EVENT: ', event)
  
  const { name, email, phone, message } = JSON.parse(event.body)
  
  const params = {
    Destination: {
      ToAddresses: ["RECIEVER EMAIL I SUBBED IN REAL CODE"],
    },
    Message: {
      Body: {
        Text: { 
            Data: `Hello from Lambda! You got a message from ${name}. \n Contact Details: \n - Email: ${email} \n - Phone: ${phone} \n ${message}` 
        },
      },
      Subject: { Data: `Enquiry from ${name}` },
    },
    Source: "SENDER EMAIL I SUBBED IN REAL CODE",
  };

  return ses.sendEmail(params).promise()
};

CodePudding user response:

It's returning 500 because the resolved promise from ses.sendEmail() doesn't match the required type for the handler. You must return HTTP-Response as required by ApiGateway.

exports.handler = async function(event, context) { // you don't need callback on async
  /* your code */
  try {
    await see.sendEmail(params).promise();
    return {
      statusCode: 200,
    };
  } catch (e) {
    return {
      statusCode: 500,
      body: "a message that helps you",
    };
  }
}
  • Related