praveen Dp
praveen Dp

Reputation: 2936

how to call rest api inside aws lambda function using nodejs

i have created aws lambda function. i want to use rest api calls inside my lambda function. Is there any reference how to connect it to rest api using nodejs

Upvotes: 21

Views: 41711

Answers (5)

Ronald Das
Ronald Das

Reputation: 1277

AWS Lambda now supports Node.js 18 ,which has support for global fetch , you can now easily call the REST api endpoints like this

// index.mjs 

export const handler = async(event) => {
    
    const res = await fetch('https://nodejs.org/api/documentation.json');
    if (res.ok) {
      const data = await res.json();
      console.log(data);
    }

    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

Upvotes: 3

Dhanuka Perera
Dhanuka Perera

Reputation: 1803

const https = require('https')

// data for the body you want to send.
const data = JSON.stringify({
  todo: 'Cook dinner.'
});

const options = {
  hostname: 'yourapihost.com',
  port: 443,
  path: '/todos',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  },
};

const response = await doRequest(options, data);
console.log("response", JSON.stringify(response));

/**
 * Do a request with options provided.
 *
 * @param {Object} options
 * @param {Object} data
 * @return {Promise} a promise of request
 */
function doRequest(options, data) {
  return new Promise((resolve, reject) => {
    const req = https.request(options, (res) => {
      res.setEncoding("utf8");
      let responseBody = "";

      res.on("data", (chunk) => {
        responseBody += chunk;
      });

      res.on("end", () => {
        resolve(JSON.parse(responseBody));
      });
    });

    req.on("error", (err) => {
      reject(err);
    });

    req.write(data);
    req.end();
  });
}

Upvotes: 11

aknamdeo
aknamdeo

Reputation: 11

const superagent = require('superagent');

exports.handler =  async(event) => {
    return await startPoint();  // use promise function for api 
}


function startPoint(){
    return new Promise(function(resolve,reject){
    superagent
    .get(apiEndPoint)
    .end((err, res) => {
        ...



       });
    })
}

Upvotes: 1

Eduardo Díaz
Eduardo Díaz

Reputation: 138

If you want to call rest api inside lambda function, you can use request package:

install request package via npm: https://www.npmjs.com/package/request

Then inside lambda function try this to call rest api:

    var req = require('request');
    const params = {
        url: 'API_REST_URL',
        headers: { 'Content-Type': 'application/json' },
        json: JSON.parse({ id: 1})
    };
    req.post(params, function(err, res, body) {
        if(err){
            console.log('------error------', err);
        } else{
            console.log('------success--------', body);
        }
    });

Upvotes: 3

winter
winter

Reputation: 144

If you are asking about creating a HTTP rest endpoint in lambda using nodejs. Here is the example. https://github.com/serverless/examples/tree/master/aws-node-simple-http-endpoint

If you are asking about access an external API inside lambda using nodejs. Here is an example.

https://github.com/robm26/SkillsDataAccess/blob/master/src/CallService/index.js

Hope this helps.

Upvotes: -4

Related Questions