目次

はじめに

パフォーマンスが要求されるようなケースや大量のアクセスを捌く必要があるケースでは Lambda&RDSはアンチパターン である事を認識しておく。
※コールドスタート時、VPC内に配置したLambda起動時にはENIアタッチが発生する為、Lambdaの起動に時間がかかる。
※インスタンスが持続して残る訳ではないので、コネクションプールがあまり意味を持たない為、結局はDBへの接続コストがかかる。
 (大量のアクセスを捌く場合は最大接続数も問題になる)

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-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();
    });
}

ロールの作成

マネージメントコンソールのIAM - ロール から以下のポリシーを持つロールを作成する。

・AmazonRDSFullAccess
・AWSLambdaFullAccess
・AmazonVPCFullAccess

作成したロールの「ロール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 名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

デプロイ

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

URLの確認

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


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