Node.jsでWebAPIなどの外部サービスへ接続する際「request」と云う使いやすいHTTP clientがあります。requestパッケージはnpmコマンドでインストールできます。ローカルで実行する場合は下記コードのように記述できます。
const request = require("request") request.get('https://mjeld.com/', (err, resp, b1) => { if (!err) { console.log(resp) } })
コード内のconsole.log(resp)部分でWebから取得した文字列を問題なく出力できます。然し、AWSのLambdaを使う場合上記のようなノンブロッキングの処理ではexports.handlerに返信できません。Lambdaの場合は、awaitとPromiseを使って関数内のreturnでデータを返せるように記述します。
const request = require("request") exports.handler = async (event) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify(await new Promise((resolve, reject) => { request.get('https://mjeld.com/', (err, resp, b1) => { if (err) { reject(err) } else { resolve(resp) } }) })), }; return response; };
上記コードはLambdaのデフォルトで入っているexports.handler = async (event) => {}内でrequestで取得したGETデータをreturnで返す処理です。Lambdaのデフォルトではresponse.body = ‘Hello from Lambda!’と書いているのですが、その部分を置き換えています。