1. 개요
2. 작업
2.1. 작업할 로컬 디렉토리 생성
2.2. 로컬 디렉토리에서 필요 모듈 다운로드
우선 npm init 실행한 후 필요한 정보를 입력한다.
그러면 package.json이 생성된다.
이어서 mysql
모듈을 받는다.
$ npm install --save mysql npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN recent-tech-note@1.0.0 No description npm WARN recent-tech-note@1.0.0 No repository field. + mysql@2.17.1 added 11 packages from 15 contributors and audited 13 packages in 0.747s found 0 vulnerabilities
이번엔 async
모듈을 받는다.
$ npm install --save async npm WARN recent-tech-note@1.0.0 No description npm WARN recent-tech-note@1.0.0 No repository field. + async@3.1.0 added 1 package from 1 contributor and audited 14 packages in 0.583s found 0 vulnerabilities
2.3. js 파일 생성
파일명과 Lambda 함수의 hander 이름은 같아야 한다.
예를 들어 username.js 라면 handler 이름은 username.hander임.
var BreakException = {}; var mysql = require('mysql'); var async = require('async'); var conn = mysql.createPool({ host : 'xxxx.rds.amazonaws.com', user : 'aaaa', password : 'bbbb', port : '3306', database : 'cccc' }); exports.handler = function(event, context, callback){ async.waterfall([ function (cb) { conn.query( 'SELECT name, dept FROM content WHERE ... ORDER BY ... desc LIMIT 30', function(err, rows, fields) { if (!err) { cb(null, rows); } else { console.log('Error while performing Query.', err); cb(500); } } ); }], function (err, result) { if (!err) { if (result.length > 0) { var res = []; try { result.forEach(function(value, index) { var temp = {}; temp.name = value.name; temp.dept = value.dept; res.push(temp); }); } catch (e) { if (e !== BreakException) throw e; } context.succeed(res); } else { context.succeed(''); } } else { if (err === 400) { context.fail('Bad Request: You submitted invalid input'); } else { context.fail('Internal Error: Internal Error'); } } } ); };
2.4. zip 파일 패키징
로컬 디렉토리 상에서 zip -r myfunction.zip ./
처럼 압축한 후 업로드한다.