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

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

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

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

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Node.js

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

Q&A

0回答

1835閲覧

AWS「Lambdaプロキシ統合の使用」に対応したNode.jsの書き方

kuniatsu

総合スコア141

AWS Lambda

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

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Node.js

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

0グッド

0クリップ

投稿2018/07/09 13:26

編集2022/01/12 10:55

AWS Lambdaの書き方でわからない部分があります。

awsのElasticSearchから検索結果を返すAPIをAPI Gatewayで作成しました。
LambdaFunctionが以下になります。

node.js

1'use strict'; 2const https = require('https'); 3module.exports.h = (event, context, callback) => { 4 5 var json = {"query": {"match_all": {}}} 6 7 const options = { 8 protocol: 'https:', 9 host: 'ap-northeast-1.elasticsearch.amazonaws.com', 10 path: '/index/type/_search', 11 method: 'GET', 12 headers: { 13 'Content-Type': 'application/json', 14 'Content-Length': Buffer.byteLength(JSON.stringify(json)) 15 } 16 }; 17 18 const req = https.request(options, (res) => { 19 res.setEncoding("utf-8"); 20 res.on('data', (chunk) => { 21 callback(null, `${chunk}`); 22 }); 23 }); 24 req.write(JSON.stringify(json)); 25 req.end(); 26};

問題なくElasticSearchの検索結果が返ってきます。
しかしこれでは、「Lambdaプロキシ統合の使用」Lambda Proxy Integrationの機能が有効にならないため、
https://qiita.com/_mogaming/items/2bd83204e212e35b2c6c
を参考に以下に書き換えました

node.js

1'use strict'; 2const https = require('https'); 3module.exports.hello = (event, context, callback) => { 4 5 var json = {"query": {"match_all": {}}} 6 const response = new Response(); 7 response.body = JSON.stringify({ 8 "event": json, 9 "context": context 10 }); 11 12 const options = { 13 protocol: 'https:', 14 host: 'ap-northeast-1.elasticsearch.amazonaws.com', 15 path: '/index/type/_search', 16 method: 'GET', 17 headers: { 18 'Content-Type': 'application/json', 19 'Content-Length': Buffer.byteLength(response) 20 } 21 }; 22 23 const req = https.request(options, (res) => { 24 res.setEncoding("utf-8"); 25 res.on('data', (chunk) => { 26 callback(null, `${chunk}`); 27 }); 28 }); 29 req.write(response); 30 req.end(); 31}; 32 33class Response{ 34 constructor(){ 35 this.statusCode = 200; 36 this.headers = {}; 37 this.body = ""; 38 } 39}

しかし、これではLambdaFunctionはerrorを表示します。

errorcode

1Response: 2{ 3 "errorMessage": "RequestId: 666bb666-666b-66b6-666d-6666bbb6b666 Process exited before completing request" 4}

どの様に書けば、「Lambdaプロキシ統合の使用」に対応した形に書き換えることができるでしょうか?

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問