目次 †はじめに †パフォーマンスが要求されるようなケースや大量のアクセスを捌く必要があるケースでは Lambda&RDSはアンチパターン である事を認識しておく。 [追記] https://aws.amazon.com/jp/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/ RDSインスタンス 及び DBの作成 †TODO:
AWS sdk のインストール †TODO:
Lambda関数の作成 †以下、ローカルでの作業 Lambda関数用のディレクトリを作成し、MySQLモジュールをインストール †mkdir rds-access1 cd rds-access1 npm install mysql Lambda関数の作成 †index.js 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-xxxxxxxxxx.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(); }); } ロールの作成 †マネージメントコンソールのIAM - ロール から以下のポリシーを持つロールを作成する。 ・AmazonRDSFullAccess 作成したロールの「ロールARN」を確認しておく。 Lambda関数のアップロード †zip の作成 †cd rds-access1 rm -rf rds-access1.zip zip -r rds-access1.zip . アップロード †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 からアクセスできるようにする †API の作成 †マネージメントコンソール - API Gatewayにアクセスし、以下の通り作成する。
◆注意 デプロイ †作成したら、アクションの「API のデプロイ」からデプロイする。 URLの確認 †デプロイしたら「ステージ」から対象の API を選択すると「URL の呼び出し」という箇所で APIのURLが確認できる。 |