質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

8986閲覧

AWS Lambda(node.js)でrequestモジュールを使用し、スマレジAPIのデータを参照したい

TaikiTsujimoto

総合スコア10

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/02/15 04:23

編集2019/02/15 06:05

前提・実現したいこと

AWS Lambda(node.js)でスマレジAPIにリクエストしデータを参照したい

発生している問題・エラーメッセージ

requestがうまくいかず、何もレスポンスがない。

該当のソースコード

node

1var request = require('request'); 2 3exports.handler = async (event, callback) => { 4 5console.log("form定義"); 6var form = { 7 proc_name: '処理名', 8 params: { 9 "order":[ 10 "項目名1", 11 "項目名2" 12 ], 13 "table_name":"テーブル名" 14 } 15}; 16 17console.log("json: " + JSON.stringify(form)); 18 19console.log("options定義"); 20var options = { 21 url:'XXXXXXXXXXXXXXXXXXXXXX', 22 headers: { 23 "X_access_token": "XXXXXXXXXXXXXXXXXXXXXX" , 24 "X_contract_id": "XXXXXXXXXXXXXXXXXXXXXX" , 25 "Content-type": "application/x-www-form-urlencoded;charset=UTF-8" 26 }, 27 body: JSON.stringify(form), 28 method: 'POST', 29}; 30console.log("options: " + JSON.stringify(options)); 31 32console.log("リクエスト開始"); 33request(options,function (error, response, body) { 34 console.log("status: " + response.statusCode) ; //スルー(ログに出ない) 35 if (error) { 36 console.log('Error: ' + error.message); //スルー(ログに出ない) 37 return; 38 } 39 console.log(body); //スルー(ログに出ない) 40}); 41 42}; 43

試したこと

formをquerystring.stringifyで変換

補足情報

スマレジAPIの仕様でデータ参照ですがhttpmethodはpostになります。
最終的には取得したデータはdynamoDBにPUTする予定です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

近い問題にハマりました。

asyncの中ではrequestはPromiseを返すようにしてあげないといけないのでは?と思いましたが、そもそも今はrequestsが非推奨になったので、自分の場合はaxiosで代替してます。

js

1const axios = require('axios') 2exports.handler = async (event) => { 3 try { 4 const res = await axios.post('https://example.com/testapi/api.asmx/GetNames', {}) 5 console.log(res) 6 return { 7 statusCode: 200, 8 body: JSON.stringify(res) 9 } 10 } catch (e) { 11 console.log(e) 12 return { 13 statusCode: 400, 14 body: JSON.stringify(e) 15 } 16 } 17};

https://stackoverflow.com/questions/55001364/axios-in-lambda-not-waiting-for-response

一応、requestの場合でやるならこんな感じでかけばLambdaでも動きそう(index.jsだけじゃなく、package.jsonとか用意してnpm install request --saveするか、requestのnode_moduleをinstallしたLayerを別途作って関数に適用しないといけないかも)

js

1const request = require('request'); 2exports.handler = async (event) => { 3 // TODO implement 4 const response = { 5 statusCode: 200, 6 body: JSON.stringify(await new Promise((resolve, reject) => { 7 request.get('https://mjeld.com/', (err, resp, b1) => { 8 if (err) { 9 reject(err) 10 } else { 11 resolve(resp) 12 } 13 }) 14 })), 15 }; 16 return response; 17};

https://mjeld.com/nodejs-lambda-httpclient-request/

投稿2022/01/06 04:20

maztak

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

javascript

1exports.handler = async (event, callback) => {

javascript

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

とすること(async)で解決しました。

投稿2019/02/18 08:43

TaikiTsujimoto

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問