현재 AWS실습중이며, ec2 인스턴스 2개를 사용하여 웹서버를 구축하고 있습니다. 사용 환경은 linux AMI입니다. <div><br></div> <div>하나는 웹 서버 실행용, 다른 하나는 이미지 리사이즈 서버 실행용인데요,</div> <div><br></div> <div>이미지 리사이즈 서버의 app.js 파일을 forever를 통해 실행했는데, forever list로 동작을 확인해 보니 ctime이 STOPPED로 서버가 실행되지 않았고, 로그를 살펴보니 다음과 같은 오류가 발생했습니다.</div> <div><br></div> <div><div><br></div> <div>/home/ec2-user/t13ResizeServer/node_modules/aws-sdk/lib/request.js:32</div> <div> throw err;</div> <div> ^</div> <div>TypeError: Cannot read property 'Body' of null</div> <div> at Response.<anonymous> (/home/ec2-user/ResizeServer/app.js:73:20)</div> <div> at Request.<anonymous> (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/request.js:350:18)</div> <div> at Request.callListeners (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/sequential_executor.js:100:18)</div> <div> at Request.emit (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/sequential_executor.js:77:10)</div> <div> at Request.emit (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/request.js:604:14)</div> <div> at Request.transition (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/request.js:21:12)</div> <div> at AcceptorStateMachine.runTo (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/state_machine.js:14:12)</div> <div> at /home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/state_machine.js:26:10</div> <div> at Request.<anonymous> (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/request.js:22:9)</div> <div> at Request.<anonymous> (/home/ec2-user/ResizeServer/node_modules/aws-sdk/lib/request.js:606:12)</div></div> <div><br></div> <div>각종 구글링을 통해서 app.js코드의 Body부분이 문제라는 것 까지는 파악했는데요.. 도저히 App.js파일에서 무엇을 수정해야 할 지 감이 안옵니다. 책의 예제 소스를 다운받아서 설정한건데.. 코드 자체에 문제가 있는 것인지요..?</div> <div><br></div> <div>App.js의 코드는 다음과 같습니다.</div> <div><br></div> <div>------------------------------------------------------------------</div> <div><div>//Reszie app.js</div> <div>var AWS = require('aws-sdk')</div> <div> , Sequelize = require('sequelize')</div> <div> , im = require('imagemagick')</div> <div> , mime = require('mime')</div> <div> , s3 = new AWS.S3({ region: 'ap-southeast-1' })</div> <div> , sqs = new AWS.SQS({ region: 'ap-southeast-1' });</div> <div><br></div> <div>var s3Bucket = '*********';</div> <div>var sqsQueueUrl = '************';</div> <div>var rdsEndpoint = {</div> <div> host: '***********',</div> <div> port: 3306</div> <div>};</div> <div><br></div> <div>// MySQL DB 이름, 계정, 암호</div> <div>var sequelize = new Sequelize('***', '****', '***', {</div> <div> host: rdsEndpoint.host,</div> <div> port: rdsEndpoint.port</div> <div>});</div> <div><br></div> <div>// MySQL DB 테이블 정의</div> <div>var Photo = sequelize.define('Photo', {</div> <div> filename: { type: Sequelize.STRING, allowNull: false, unique: true }</div> <div>});</div> <div><br></div> <div>// SQS 메시지 삭제</div> <div>function deleteMessage(ReceiptHandle) {</div> <div> sqs.deleteMessage({</div> <div> QueueUrl: sqsQueueUrl,</div> <div> ReceiptHandle: ReceiptHandle</div> <div> }, function (err, data) {</div> <div> if (err)</div> <div> console.log(err, err.stack);</div> <div> else</div> <div> console.log(data);</div> <div> });</div> <div>}</div> <div><br></div> <div>// MySQL에 데이터 저장</div> <div>function insertPhoto(filename) {</div> <div> sequelize.sync().success(function () {</div> <div> Photo.create({</div> <div> filename: filename</div> <div> });</div> <div> });</div> <div>}</div> <div><br></div> <div>// SQS 메시지 받기</div> <div>function receiveMessage() {</div> <div> sqs.receiveMessage({</div> <div> QueueUrl: sqsQueueUrl,</div> <div> MaxNumberOfMessages: 1,</div> <div> VisibilityTimeout: 10,</div> <div> WaitTimeSeconds: 10</div> <div> }, function (err, data) {</div> <div> if (!err && data.Messages && data.Messages.length > 0)</div> <div> resizeImage(data.Messages[0]);</div> <div> else if (err)</div> <div> console.log(err, err.stack);</div> <div> receiveMessage();</div> <div> });</div> <div>}</div> <div><br></div> <div>// 이미지 해상도 변환</div> <div>function resizeImage(Message) {</div> <div> var filename = Message.Body;</div> <div> s3.getObject({</div> <div> Bucket: s3Bucket,</div> <div> Key: 'original/' + filename</div> <div> }, function (err, data) {</div> <div> im.resize({</div> <div> srcData: data.Body,</div> <div> width: 800</div> <div> }, function (err, stdout, stderr) {</div> <div> s3.putObject({</div> <div> Bucket: s3Bucket,</div> <div> Key: 'resized/' + filename,</div> <div> Body: new Buffer(stdout, 'binary'),</div> <div> ACL: 'public-read',</div> <div> ContentType: mime.lookup(filename)</div> <div> }, function (err, data) {</div> <div> console.log('Complete resize ' + filename);</div> <div> deleteMessage(Message.ReceiptHandle);</div> <div> insertPhoto(filename);</div> <div> });</div> <div> });</div> <div> });</div> <div>}</div> <div><br></div> <div>receiveMessage();</div></div> <div><br></div> <div>-----------------------------------------------------</div> <div><br></div> <div>해당 js파일에 쓰인 Body는 resizeImage의 Body뿐인데, 이를 어떻게 수정해야 TypeError를 막을 수 있을까요? 5일째 서버구축에 실패하고 있어서 지푸라기 잡는 심정으로 질문글 올려봅니다ㅠㅠ 고수님들 도와주세요..!</div>