AWS LambdaでMySQL(RDS)に接続できるか試してみた。
テストスクリプト
※あいかわらずlambchop使ってます。超便利!
test.js
#!/usr/bin/env lambchop /* function_name: test role: arn:aws:iam::123456789012:role/lambda_exec_role handler: test.handler */ var mysql = require("mysql"); exports.handler = function(event, context) { var conn = mysql.createConnection({ host: "xxx.xxx.ap-northeast-1.rds.amazonaws.com", user: "root", password: "..." }); conn.query( "SHOW DATABASES", function (err, rows, fields) { if (err) throw err; console.log(rows); } ); conn.end(function() { context.done(); }); };
ファイル構成
. ├── node_modules/ │ ├── mysql/ │ └── node-mysql/ └── test.js
実行結果
おもむろにtest.js
を実行。
$ ./test.js Function was uploaded: { "function_name": "test", "function_arn": "arn:aws:lambda:us-east-1:123456789012:function:test", "configuration_id": "89f31ed1-2a88-4c5d-93db-5757f26d8ed6", "runtime": "nodejs", "role": "arn:aws:iam::123456789012:role/lambda_exec_role", "handler": "test.handler", "mode": "event", "code_size": 234754, "description": "", "timeout": 3, "memory_size": 128, "last_modified": "2014-11-24 13:34:24 +0900" } Node modules: [ "mysql", "node-mysql" ] ...
別のターミナルからイベントを送る。
$ echo '{}' | lambchop-cat test
正常にMySQLに接続できていることを確認。
... START RequestId: 6dea0f18-7393-11e4-8193-1b72ed395815 2014-11-24T04:36:13.884Z 6dea0f18-7393-11e4-8193-1b72ed395815 [ { Database: 'information_schema' }, { Database: 'innodb' }, { Database: 'mysql' }, { Database: 'performance_schema' } ] END RequestId: 6dea0f18-7393-11e4-8193-1b72ed395815 REPORT RequestId: 6dea0f18-7393-11e4-8193-1b72ed395815 Duration: 1178.26 ms Billed Duration: 1200 ms Memory Size: 128 MB Max Memory Used: 13 MB
IAMでうまくセキュリティを制御できれば、応用範囲が広がりそう。