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