Event 객체에서, http 요청으로 받은 body에서 MessageAttributes를 가져오려는데 body에 MessageAttributes가 없다는 에러가 나왔다.
const consumer = async (event) => {
console.log(event)
const record = event.Records[0]
console.log('body,',record.body)
// point 1
// 여기까진 나옴
const {MessageAttributes} = record.body
//에러 발생.
console.log('body,',record.body)
console.log('MessageAttributes,',MessageAttributes)
const {MessageAttributeProductId} = MessageAttributes
console.log('MessageAttributeProductId',MessageAttributeProductId)
const sku = getValue(MessageAttributeProductId)
};
point 부분에서 record.body의 객체에서 내가 필요로 하는 MessageAttributes가 있었지만, 계속 찾을 수 없다는 에러를 뱉어내고 있었다.
record.body의 값
{
"Type": "Notification",
"MessageId": "xxxxx-xxxx-xxxx-xxxx-xxxxx",
"TopicArn": "arn:aws:sns:ap-northeast-2:BlahBlah:BlahBlahBlahBlah",
"Subject": "도너츠 재고 부족",
"Message": "도너츠 재고가 없습니다. 제품을 생산해주세요! \n메시지 작성 시각: Thu May 25 2023 06:26:57 GMT+0000 (Coordinated Universal Time)",
"Timestamp": "2023-05-25T06:26:57.595Z",
"SignatureVersion": "1",
"Signature": "BlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlah",
"SigningCertURL": "https://sns.ap-northeast-2.amazonaws.com/SimpleNotificationService-BlahBlahBlahBlahBlahBlahBlahBlahBlahBlah.pem",
"UnsubscribeURL": "https://sns.ap-northeast-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=aBlahBlahBlahBlahBlahBlahBlahBlah",
"MessageAttributes": {
"MessageAttributeProductId": {
"Type": "String",
"Value": "CP-502101"
},
"MessageAttributeFactoryId": {
"Type": "String",
"Value": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
}
}
}
위 값처럼 JSON 객체가 직렬화 되어있었다.
const record = event.Records[0]
const {MessageAttributes} = JSON.parse(record.body)
const {MessageAttributeProductId} = MessageAttributes
const sku = getValue(MessageAttributeProductId)
JSON.parse(record.body) 를 사용하여 해결하였다.
serverless.yml 작성 후 serverless deploy로 배포 시도 중 lambda에서
관련 권한이 없어 생성하지 못하는 에러가 발생.
IAM -> 역할 -> 생성하려는 LambdaRole -> 권한 추가
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes"
위 권한 추가 후 정상실행.
에러 핸들링으로 배운 점은 아니지만