본문 바로가기
Project 3

Devops Day 58 (5.26) Project 3_마이크로서비스_Day 3

by Jackykim 2023. 5. 30.

Step 4 : 데이터베이스의 재고를 증가시키는 Lambda 함수 생성
- 데이터베이스의 재고를 증가시키는 Lambda 함수(stock-increase-lambda)를 배포

- stock_lambda에서 레거시 시스템(Factory API)에 제품 생산 요청

- 위의 Factory API 문서를 활용하여, 코드를 작성해야 합니다.

- stock_lambda 프로젝트에 npm install axios 명령으로 axios 라이브러리를 설치해야 합니다. axios는 node.js에서 HTTP 명령을 보내는 라이브러리입니다. (fetch와 유사)

- 코드 맨 윗줄에 const axios = require('axios').default를 추가합니다.

4.1 데이터베이스 폴더로 들어가 stock-increase-lambda sls deploy 진행합니다.
4.2 Factory-api 에 제품 생산 요청하기 위한 Stock-Lambda 코드 구성

- 코드 작성하기 그전에 AWS Lambda 콘솔에서 생산한 Stock-Lambda 삭제 후 AWS CLI로 통해 생성합니다.
- Project3 디렉토리 들어가 sls 명령하여 serverless project 생성합니다.
- Node.js SQS worker로 생성하고 바로 디플로이 하지 않습니다.

- Stock-Lambda Serverless.yaml 작성할때 node14js.x으로 지정하고, 리전 그리고 sqs를 바로 연결 할 수 있게 합니다.

- stock-lambda 폴더에 ‘npm install axios’ 명령으로 설치

- Factory-api에 연결 및 parameter 설정하기 위한 코드 작성합니다.

- 코드 작성하고 sls deploy 로 배포 하고 AWS Lambda에 함수 생성합니다.

 

4.3 Sales-api handler.js 코드도 수정해야합니다. App.post Checkout (endpoint) 진행 할 때 필요한 값을 가지고 올 수 있게 합니다.

- 코드 업데이트 완료 했으면 sales-api 폴더로 들어가 serverless deploy 합니다.

 

4.4 Postman으로 Post 명령하여 factory-api 트리거 할 수 있도록 합니다.
- Postman에 들어가 하단 사진처럼 POST 합니다.

4.5 Factory-api에 들어가 Postman에서 post 한 내용을 확인 할 수 있습니다.
- 한번에 않들어 갈 수 있어, POST을 2~3번 해야합니다.
- POST 명령하면 ‘준비 -> 생산 -> 포장 -> 종료 순서로 자동으로 진행합니다.
- 상단 사진처럼 진행 되면 Step 4 완료 했습니다.

 

모두 구성 후 아키텍처

 

Step 4 진행 하면서 이슈 및 Error

 

1. Stock-Lambda에 있는 Index.js 코드
첫 코드 작성할 때 Backtick ` 대신 다운표 ‘ 로 사용하여 문제가 생겼습니다.

백틱은 자바스크립트의 템플릿 리터럴 또는 템플릿 문자열에서 사용됩니다. 템플릿 리터럴을 사용하면 ${}`로 둘러싼 표현식을 문자열 안에 삽입할 수 있습니다. 이 기능은 변수나 표현식을 문자열과 결합하는 더 편리하고 가독성이 좋은 방법을 제공합니다.
- 또한 Attribute부분에 Attributes으로 작성하여 수정하였습니다.

2. Sales-api에 있는 Handler.js 코드 수정하였습니다.
const product 코드에 if (product.stock >= 0 && product.stock >= req.body.MessageAttributeProductCnt) 코드 추가 하였고 하단 코드에 req.body 추가
- 하단 Attributes 부분에 { }, 잘 못 되어 있어 수정 및 Spelling 확인

3. Step 2에 SNS / SQS / DLQ 트리거 설정 문제가 있어 Curl 및 트리고 하지 않아도 AWS Cloudwatch에 지속적으로 트리거가 들어갔습니다. Step 2에 DLQ 가 제대로 SQS하고 연결 되지 않아 SNS / SQS/ DLQ 모두 삭제 하여 다시 연결 했습니다.  

- DLQ 생성하면 리드라이브 허용 및 배달 못한 편지 대기열 설정을 Step2에 하지 않았고 SQS 하고 연결 하지않아 무한 트리거가 생겼습니다.

4. SNS 삭제 후 새로 생성하면서 Sales-api Lambda 함수 수정, .env 수정, 하고 각 트리거 제거 및 제연결 해야 했습니다.

 

- Stock Lambda에 serverless.yaml 파일도 수정해야 합니다.

5. Sales-api / Stock-lambda 에서 업데이트된 내용 deploy 할 경우 제대로 적용 안되는 상황이 발생하여 AWS CloudFormation에 들어가 해당 스택을 삭제했습니다.
- 스택 삭제하면서 S3 버킷 내용 수동으로 삭제 그리고 IAM 정책들도 수동으로 삭제해야 합니다.
수동으로 삭제 하지 않는 경우 스택이 삭제가 안되며 Rollback error가 생깁니다.

- 모든 내용 수정 및 업데이트 하면 이상없이 factory-api하고 연결 되고 무한 트리고 문제점도 해결 했습니다.