[[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が確認できる。