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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

5341閲覧

AWS LambdaでMySQLの情報を取得したい

suvera

総合スコア106

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2016/07/19 01:10

現在AWSでWebAPIの開発を行っています。
やろうとしていることは

RDSで立てたMySQLのサーバーの情報をjson形式でAPIから取得できるようにすることです。

LambdaとAPIGatewayを利用してやってみようとしたのですが、
Lambdaにzipをアップして、テストを実行しても思ったように処理が終わりません。
色々試しましたが問題点、解決策がわかりませんでした。
長文になるとは思いますがお付き合いお願いします。

まず、データベースについて記載します。

RDS:MySQL
データベース名:testDB
テーブル情報:testTable (id int, value varchar(10))
testTableの中身:
( 1, testValue1 )
( 2, testValue2 )
( 3, testValue3 )

testTableにある情報を全て取得して
それをjsonにして返すことを目的としてやっています。

DBからの情報の取得と、取得した情報のjsonへの変換はjavascriptとnodeで行いました。

「Runtime」には「Node.js4.3」を選択。
「Code entry type」は「Upload a .ZIP file」を選択。
VPCはDBを立てているVPCを選択。
セキュリティグループもDBと同じものを選択しています。

.zipは以下のようにしてあります。

uploadzip.zip ┗index.js ┗node_modules ┗mysql

index.js

var mysql = require('mysql'); 'use strict'; exports.handler = (event, context) => { var connection = mysql.createConnection({ host : 'RDSからエンドポイントを指定', user : 'MySQLのユーザ名', password : 'MySQLのパスワード', database : 'testDB' }); connection.connect(function(err) { if (err) { console.error('error connecting: ' + err.stack); return; } console.log('connected as id ' + connection.threadId); }); connection.query('show tables', function(err) { if (err) { console.error('error connecting: ' + err.stack); return; } console.log('connected as id ' + connection.threadId); }); connection.query('select * from testTable', function(err, rows, fields) { if (err) { console.log("--err"); console.log(err); throw err; } console.log(rows); console.log(fields); }); connection.end(function(err) { context.done(); }); };

Lambdaでの設定を載せます。

  • Code

Code entry type : Upload a .ZIP file

  • Configuration

Runtime : Node.js 4.3
Handler : index.handler
Role : Chose an existing role
Existing role : lambda_basic_vpc_execution
VPC : VPCを設定(VPCは全体で1つしか作っていません)
Subnets : ap-northeast-1a,-northeast-1c
Security Groups : DBのセキュリティグループと同じものを設定

これで、Lambdaのテストを実行すると

{ "errorMessage": "2016-07-19T00:07:13.619Z oooooooo-oooo-oooo-oooo-oooooooooooo Task timed out after 3.00 seconds" }

と赤文字で返って来ます。
jsoneは普通に実行する分には取得したいものが取得できていました。

分かりにくいかもしれませんが困っています。
解決策、問題点を教えて下さい。
よろしくお願いします。
長文になりましたが読んでくださりありがとうございました。

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

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

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

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

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

TaichiYanagiya

2016/07/19 02:45

「Security Groups : DBのセキュリティグループと同じものを設定」とのことですが、インバウンドの送信元で自セキュリティグループを許可していますか?
TaichiYanagiya

2016/07/19 15:34

RDS は VPC 内のみ公開でしょうか、public に公開でしょうか? もし後者の場合、「RDSのエンドポイント名」を VPC 内の DNS で名前解決すると、グローバルIPアドレスが返ったりしませんでしょうか?
guest

回答1

0

ベストアンサー

Task timed out after 3.00 seconds

文字通り捉えれば、Lambda Functionに設置しているタイムアウト値が3秒になっており、
実際の処理が3秒以上かかるためにタイムアウトとなっているのでしょう。

テスト実行などで処理時間を計測したのちに、適切なタイムアウト値に設定してあげてください。

投稿2016/07/19 01:29

attakei

総合スコア2738

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

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

suvera

2016/07/19 02:10

回答有り難うございます! タイムアウト値を増やしてテストすると以下のように出てきます。 "errorMessage": "Process exited before completing request" また、index.jsをコマンドラインなどで実行した際は3秒もかからずに取得できています。
attakei

2016/07/19 06:29

"Process exited before completing request" ですと、context.doneより前にコードが終わってしまうと発生するメッセージみたいです。 でも、正常に接続終了させられればcontext.done()が呼ばれるように見えますね。。。 だとすると、 - 実はconnection.endより前でエラーで止まってしまう - connection.endが実は正しい使い方ではない あたりが、考えられそうです。
suvera

2016/07/25 01:40

返信遅くなって申し訳ありません。 その見方では考えれていなかったのでその方面から調査してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問