[[AWSメモ]] > AWS LambdaからRDSに接続する
* AWS LambdaからRDSに接続する [#ude5d771]
#setlinebreak(on);

#TODO(画像を貼る)

#contents
-- 関連
--- [[AWSメモ]]

** RDSインスタンス 及び DBの作成 [#j4f4daf0]

** AWS sdk のインストール [#c8430add]

** Lambda関数の作成 [#mb92c8d4]

以下、ローカルでの作業

*** Lambda関数用のディレクトリを作成し、MySQLモジュールをインストール [#g9105aa6]
#myterm2(){{
mkdir rds-access1
cd rds-access1
npm install mysql
}}

*** Lambda関数の作成 [#p71dcfcf]

index.js
#mycode2(){{
var AWS = require('aws-sdk');
//var dynamo = new AWS.DynamoDB.DocumentClient();
var mysql = require('mysql');

const createResponse = (callback, statusCode, body) => {
	var res = {
		"statusCode": statusCode,
		"headers": { "Test-Headr": "1234" },
		"body": JSON.stringify(body)
	}
	callback(null, res);
}

exports.handler = function(event,context,callback){
    var connection = mysql.createConnection({
      host     : 'testdbinstance-cluster-1.cluster-cef24caqtt2c.ap-northeast-1.rds.amazonaws.com',
      user     : 'example_user',
      password : 'example_pass',
      database : 'example_db'
    });
    connection.connect();
    connection.query('select * from books', function(err, rows, fields) {
      if (err) throw err;
      console.log(rows);
      console.log(fields);
      var list = JSON.stringify(rows);
      createResponse(callback, 200, { "list": list });
    });
    connection.end(function(err) {
      context.done();
    });
}
}}

** ロールの作成 [#n977d54b]
[[マネージメントコンソールのIAM - ロール:https://console.aws.amazon.com/iam/home?region=ap-northeast-1#/roles]] から以下のポリシーを持つロールを作成する。

・AmazonRDSFullAccess
・AWSLambdaFullAccess
・AmazonVPCFullAccess

作成したロールの「ロールARN」を確認しておく。


** Lambda関数のアップロード [#qcccf6af]

*** zip の作成 [#a015542e]
#myterm2(){{
cd rds-access1
rm -rf rds-access1.zip
zip -r rds-access1.zip .
}}

*** アップロード [#u38f20f7]
#myterm2(){{
aws lambda create-function \
  --function-name rds-access1 \
  --runtime nodejs6.10 \
  --role 上記で確認したロールARN \
  --handler index.handler \
  --zip-file fileb://rds-access1.zip
}}

** AWS API Gateway からアクセスできるようにする [#ga226a9b]

*** API の作成 [#h171a2fa]
[[マネージメントコンソール - API Gateway:https://ap-northeast-1.console.aws.amazon.com/apigateway/home?region=ap-northeast-1#/apis]]にアクセスし、以下の通り作成する。

|API 名|rds_access|
|リソース名|rds-access|
|リソースパス|/rds-access|
|メソッド|GET|
|統合タイプ|Lambda関数|
|Lambdaプロキシ統合の使用|on|
|Lambda リージョン|Lambda関数を作成したリージョン|
|Lambda 関数|作成したLambda関数名|

◆注意
Lambdaプロキシ統合の使用を on にした場合、event から 様々な httpリクストの情報が得られるが、
レスポンスデータの形式もルールに従う必要がある。
参照 : http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-output-format


*** デプロイ [#n8562572]
作成したら、アクションの「API のデプロイ」からデプロイする。
※ステージ名は、ここではとりあえず dev とかにしておく。(このへんは運用次第)

*** URLの確認 [#t1a3a010]

デプロイしたら「ステージ」から対象の API を選択すると「URL の呼び出し」という箇所で APIのURLが確認できる。


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS