코드스테이츠_Devops_4기/section3) 마이크로서비스와 인프라스트럭처 관리

Section3 실습과제 Day3

불여우의 길 2023. 5. 30. 09:50

step 4를 진행하는 날이 되었습니당.


데이터베이스의 재고를 증가시키는 Lambda 함수 생성

𝅺먼저 강의록에 있는 API를 직접 쏴보았다

일단 직접 함수를 통해 디비를 update하는 stock-increase-lambda를 배포해주었댱

 

트러블 슈팅 -1

stock-increase-lambda 를 배포를 하고 콘솔에서 삭제를 했었는데 deploy가 되지 않았다.

 

그래서 serverless remove 명령어를 사용해서 삭제하고 다시 배포하니 정상 동작이 되었다

 

트러블 슈팅 -2

axios 가 install 이 안되는 현상이 있었다.

axios install를 해도 package.json이 생기지를 않았다.

그래서 npm install을 하고 axios install를 해주었다.

 

윈도우에서 나타나는 현상인듯..?

그 뒤에는 포스트맨을 사용해서 공장 url로 api를 쏴보았다.

DB까지 정상적으로 업데이트 되는 것을 확인하고 stock-lamda 소스 코드를 수정했다.

 

그런데 api를 강의록의 목적대로 쏘려면 sale-api 의 소스 코드를 수정해야했다.

우리팀은 디비에 있는 재고값을 불러오는 식으로 작성했었는데 api에 req값을 담아주도록 변경을 해주었다.

      const params = {
        Message: message,
        Subject: '도너츠 재고 부족',
        MessageAttributes: {
          MessageGroupId: {
            StringValue: req.body.MessageGroupId,
            DataType: "String",
          },
          MessageAttributeProductId: {
            StringValue: req.body.MessageAttributeProductId,
            DataType: "String",
          },
          MessageAttributeProductCnt: {
            StringValue: req.body.MessageAttributeProductCnt,
            DataType: "String",
          },
          MessageAttributeFactoryId: {
            StringValue: req.body.MessageAttributeFactoryId,
            DataType: "String",
          },
          MessageAttributeRequester: {
            StringValue: req.body.MessageAttributeRequester,
            DataType: "String",
          },
          CallbackUrl: {
            StringValue: req.body.CallbackUrl,
            DataType: "String",
          }
        },
        TopicArn: process.env.TOPIC_ARN
      }

이런식으로 파라미터 값을 담도록 해주었다.

 

그리고는 stock-lamda 소스코드를 수정해주었다.

const payload = {
  // TODO:
  // 어떤 형식으로 넣어야 할까요? Factory API 문서를 참고하세요.
  // 필요하다면 record.body를 활용하세요.
}

 axios.post('URL', payload)
.then(function (response) {
  console.log(response);
})
.catch(function (error) {
  console.log(error);
});

트러블 슈팅 -3

 

클라우드 워치로 콘솔에 찍은 event 를 확인해서 api로 쏠 수 있게 만들어주었다.

payload에 공장에서 api를 쏠 수 있도록 데이터를 담아 주었당.

이런식으로 콘솔에 찍혔는데 이상하게 자꾸 로그에 받아야하는 값이 undefined로 나왔당..

그래서 stock-increase-lamda로 파라미터 값들을 보내줄 수가 없었다.

 

차근차근 보니 Record의 값은 배열이었던것!

그리고 event.Reocords[0].body는 json 형식으로 변경을 해줘야했다.

그렇게 소스코드를 수정하니 메시지가 정상적인 파라미터 값을 갖을 수 있어 api를 쏠 수 있었다.

 

정상적으로 재고가 업데이트 되는 것을 확인

 

추가 시나리오까지 작성한 우리조의 아키텍쳐는 이랬다

 

피드백을 받고 수정한 아래 아키텍쳐

 API GATEWAY 를 트리거로 사용하는 람다 함수 두개를 만들면 되지 않을까 생각했었는데,

기존 람다함수에 수량을 체트하는 로직을 만들고 SNS를 사용해서 메시지를 처리하는 방식으로 변경하였다.


그래도 평가도 어찌저찌 잘 넘겼고 step4 까지 잘 완성했다.

미리미리 캡쳐를 잘 해놔야하는데 귀찮아서 안했더니 글이 짧은 것 같네

 

암튼 Iac작성할때는 잘 작성해봐야지이