Node.js 12 Lambdaで HTTPClient (request)を使う方法

Pocket

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から取得した文字列を問題なく出力できます。然し、AWSLambdaを使う場合上記のようなノンブロッキングの処理ではexports.handlerに返信できません。Lambdaの場合は、awaitPromiseを使って関数内の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!’と書いているのですが、その部分を置き換えています。

この方法を応用すれば、AWS Lambdaにノンブロッキングのパッケージを利用することもできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA