curl -X POST https://s8bpez4yvb.execute-api.ap-northeast-2.amazonaws.com --header 'Content-type: application/json' --data-raw '{ "input": 1 }'
요청을 보냈을 때, Forbidden이 떴다.
{"message":"Forbidden"}
일단 권한 문제이지 않을까 생각했다.
일단 curl 요청을 보내는 api 주소부터 바보같이 잘못 입력했었다.
그리고 코드 자체에 뭔가 문제가 단단히 있는 것 같다.
갑자기 콘솔 창 api 엔드포인트를 눌러도 되지가 않는다.
이 문제는 없애고 다시 처음부터 하기로 했다.
service: tutorial-step-1
frameworkVersion: '3'
provider:
name: aws
runtime: nodejs14.x
region: ap-northeast-2
functions:
function1:
handler: handler.hello
index가 아닌 handler가 구동되도록 바꾸고 노드 버전도 14버전으로 낮췄다.
이러니 해결 됐다.
curl -X POST https://ppisorhjmk.execute-api.ap-northeast-2.amazonaws.com/default/tutorial-step-1-dev-function1 --header 'Content-type: application/json' --data-raw '{ "input": 1 }'
"message": "메시지를 받았습니다. 입력값: 1, 결과: 2"
API 트리거에서 POST만 가능하게 하니까 undefinded가 떴다.
{"statusCode":200,"body":"{\n \"message\": \"메시지를 받았습니다. 입력값: undefined, 결과: undefined\"\n}"}
ANY로 받았을 땐, 값을 잘 주다가 왜 이러는지 모르겠다.
이건 시간을 너무 잡아 먹어서 다음에 알아보기로 했다.
SQS를 테스트하는데 module을 찾을 수 없다고 한다.
"Error: Cannot find module '@aws-sdk/client-sqs'\nRequire stack ...
node_modules에 분명히 모듈이 있는데 왜 없다고 하는지 답답하다.
일단 모든 문제의 근본은 버전이기 때문에 버전 수정부터 했다.
역시나 버전 문제였다.
STEP 1에서 nodejs14버전을 써서 이번에도 그대로 썼는데 안됐었다.
팀원 중 1명은 16버전 나는 18버전으로 수정했다.
그러니 16버전의 팀원은 안되고 18버전은 됐다.
body 값에 1을 줬는데 consumer에서 NaN 값이 뜬다.
e0fa0287-4a19-5466-9b13-5eefa70e0dcb INFO 메시지를 받았습니다. 입력값: NaN, 결과: NaN
코드 상에서 body 값을 제대로 못 찾는 것 같다.
const consumer = async (event) => {
for (const record of event.Records) {
console.log("Message Body: ", record.body);
let inputValue, outputValue
// TODO: Step 1을 참고하여, +1 를 하는 코드를 넣으세요
inputValue = parseInt(record.body)
outputValue = inputValue + 1
const message = `메시지를 받았습니다. 입력값: ${inputValue}, 결과: ${outputValue}`
console.log(message)
}
};
curl을 이용해서 반복문으로 요청을 보내니까 또 NaN이 떴다.
a857fb86-32d4-5d95-97fb-a7eec1e7c7fb INFO 메시지를 받았습니다. 입력값: NaN, 결과: NaN
로그를 보고 뜯어 고쳐야겠다고 생각했다.
test로는 되는데 curl이 안 되는 이유가 대체 뭔가 생각해봤다.
test가 성공했을 때, Message Body에 1이 찍히는데
curl 했을 때, Message Body에는 { "body": "1" }이 찍혀있었다.
curl -X POST https://e2ibhxu3kj.execute-api.ap-northeast-2.amazonaws.com/produce --header 'Content-type: application/json' --data-raw '{ "body":"1" }'
이게 원래 요청했던 curl 코드인데 제일 뒤에 --data-raw가 그대로 body로 받아들여지는 것 같아서
curl -X POST https://e2ibhxu3kj.execute-api.ap-northeast-2.amazonaws.com/produce --header 'Content-type: application/json' --data-raw '1'
그냥 1로 바꿔주니까 해결 됐다.