LoginSignup
38

More than 5 years have passed since last update.

Node.jsでLambdaからAuroraに接続する

Last updated at Posted at 2016-02-06

はじめに

AWS独自のSQL互換データベースのAuroraですが、
Asia Pacific 1 (Tokyo)への展開は昨年10月ということもあり、
まだまだNode.jsからRDS Auroraに接続する情報について、
日本語情報があまり見つからない状況ですので、
現時点での手順を整理しておこうと思います。

VPCのセキュリティグループの設定

まず、大事な点はRDSは必ずVPCの中にあるということ(2016年2月時点)。
古い情報などでは、RDSをVPCの外側に置けていたようですが、
現時点ではRDSを起動する際にVPCの指定は必須となります。

以下、VPCの作業を備忘録として記録しておきますが、
あれこれ試行錯誤しながらやっていたので、手順として適切かは自身がありません。

まず、事前にVPCを作成しておく必要があります。

次にルートテーブルを作ります。
送信先「0.0.0.0/0」というセキュリティ的にアウトの設定を追加します。
ターゲットは今回対象となるVPCですね。
ここはきちんと制約かけないといけないと思いますが、
LambdaのグローバルIPが固定でないので、範囲をきちんと絞る必要がありそうです。

2016-02-06 (9).png

さらにサブネットを作成して、ルートテーブルと関連付けます。
そして、そのVPCをインターネットから接続できるように
インターネットゲートウェイも作成します。

最後にセキュリティグループにインバンドとして「MySQL/Aurora」を
全てのアクセス元からアクセス可能なように設定します。

2016-02-06 (10).png

これで、VPCの設定は完了です。

RDSのセットアップ

続いてはRDS側のセットアップです。
こちらで注意するのは1点だけ、「パブリックアクセス可能」に「はい」を選択するだけ。

2016-02-06 (11).png

そしたら、ローカルからSQL Clientでアクセスして、
適当なテーブルとデータを作っておきましょう。
ここらへんは特にクセはありませんでした。

Lambda関数の実行

これでっと、Lambdaの出番です。
AuroraはSQL互換なので、mysqlモジュールを同梱してあげればアクセス可能になります。
npmでmysqlモジュールを取得して、index.jsと同じフォルダに格納して
一緒にZIP化してアップロードすればOKです。

npm install mysql

コード自体もMySQLに接続するのと何ら変わりありません。
もちろん細かなチューニング等に違いはあると思いますが、
アプリケーションの視点から見ると、さほど差異は意識しないですみそうです。
以下のサンプルではitemテーブルから全件取得しています。

index.js
var mysql = require('mysql');

var conn = mysql.createConnection({
    host     : 'xxx.xxx.ap-northeast-1.rds.amazonaws.com',
    user     : 'your username',
    password : 'your password',
    port     : '3306',
    database : 'your database'
});

exports.handler = function(event, context){
    console.log('Begin Process');
    conn.connect();
    console.log('Connected');
    conn.query('select * from item;', function(err, rows, fields) {
        conn.destroy();
        context.done(null, rows);
    });
};

結果はごらんの通り。

[
  {
    "sku": "1234567890123",
    "store": "us",
    "lang": "en",
    "name": "T-Shirt",
    "price": 10
  }
]

RDSをVPCの外側から見れるようにするための手間が95%くらいを占めていました。
ローカルのSQLクライアントからRDSに接続できるようになってから
上記のコードを実行してみるまでの所要時間は10分もかかりませんでした。
思った以上にスムーズに導入できそうな感じです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38