Bare Minimum Requirement
- 다음 아키텍처로 구성된 서버리스 애플리케이션을 배포합니다.
- API Gateway - Lambda - DynamoDB
- 직접 API Gateway로 실행해 봅니다.
- API Gateway의 인증 기능을 이용해서, HTTP 요청에 특정 API Key를 사용하는 예제를 다음 두 가지 방법으로 구현합니다.
- API Key
- 권한 부여자
- CloudWatch Logs를 통해서 API 호출을 모니터링할 수 있어야 합니다.
트러블슈팅: Eooro: Unable to upload artifact HelloWolrdFunction referenced by CodeUri parameter of HelloWorldFunction resource. S3 bycket does not exist.
빌드한 내용을 sam deploy를 통해 s3 버킷에 배포하려고 했는데 버킷이 존재하지 않는다는 오류 발생
저번 실습때 deploy 명령어를 사용하면 자동으로 버킷이 생성됐었는데, 클린업 하면서 이를 수동으로 지웠다
deploy 명령을 통해 버킷을 다시 만들어줄 줄 알았는데 다시 만들어주지 않고 버킷이 존재하지 않는다는 오류만 발생했다
폴더를 지웠다 다시 만들어도 sam을 지웠다 다시 깔아도 여전히 같은 문제 발생
chatGPT에 물어본 결과, 기존 생성됐던 버킷과 같은 이름으로 버킷을 생성하라고 했다
기존에 캡쳐해둔 것이 있어서 한글자씩 타이핑 해 같은 이름으로 버킷을 생성했다(옵션은 아무것도 건들지 않았다)
배포가 성공적으로 이루어졌다
lambda와 dynamodb를 연동하기 위해 깃 클론을 떠온다
현재 람다가 노드 14버전을 지원하므로 템플릿 yaml 파일을 수정한다
빌드를 진행한다
배포를 진행한다
람다 함수가 성공적으로 생성되었다
다이나모 디비 또한 성공적으로 생성되었다
제대로 생성되었는지 확인하기 위해 람다 함수의 arn으로 요청을 보낸다
상태코드 202로 정상 작동 하는 것을 알 수 있다
DynamoDB에 값 또한 정상적으로 들어갔다
람다 함수에 트리거를 추가한다
생성된 API Gateway의 엔드포인트로 접속하면 정상작동 하는 것을 볼 수 있다
POST 전용으로만 작동하게 만들기
본문만 저장하도록 만들기
API Gateway에서 POST로 새 메소드 생성을 한다
기존에 있던 ANY 메소드는 삭제한다
POST 외에 GST 요청도 정상적으로 이루어졌다
API 수정을 해놓고 배포를 안해서.. ;;
API 배포를 진행한다
새 스테이지를 만들었다
안된다
GET POST 다 안된다
팀원 분은 디폴트 스테이지로 성공하셨다길래 배포를 다시 진행했다
여전히 안된다
뒷부분에 default를 빼도 안된다
메소드를 만들 때 람다 함수의 arn이 아닌 이름을 넣어야 한단다
다시 생성했다
다시 배포를 진행한다
여전히 안된다
엔드포인트 주소를 잘못 써서 그랬다 ..
스테이지명 뒤에 람다 함수의 이름까지 써줘야 한다
POST 요청이 성공적으로 되는 것을 볼 수 있다
GET 요청은 되지 않는다
다이나모 디비에도 값이 정상적으로 들어간다
API 키를 이용한 인증 추가하기
메서드 요청 탭으로 들어간다
API Key가 필요함 탭을 true로 바꿔준다
API 키를 만들어준다
사용량 계획을 생성한다
POST 요청을 보낼 시 403 에러와 함께 Forbiden이 나타난다
헤더에 x-api-key 값을 추가한 후 키 값을 넣어준다
정상적으로 작동한다
다이나모 디비에도 값이 들어간다
권한 부여자를 이용한 인증 부여하기 (Optional)
결론부터 말하자면 실패했다
새로운 람다 함수를 생성해야하는데, 기존 람다 함수에서 진행했고
이를 시간이 다 흐른 뒤에 알아서 시도하진 못했다
엔지니어님 왈, 옵셔널 만들면서 이걸 실제로 시도해보는 팀이 있을 줄은 몰랐다 ..
추후에 다시 시도해볼 예정..
이게 unauthorized랑 deny는 값을 제대로 읽어가는데 allow만 못읽어갔다
그래서 같은 람다 함수 내에서 하는게 맞는데, 값을 못읽어가는 거라고 생각..
심지어 상태코드는 200이 나오는데 오류가 났다 ;;
토큰 값을 찍도록 console.log를 추가하고 cloudwatch를 봤는데
토큰 값에 allow가 출력도 되고 제대로 들어갔는데, 다음 코드 동작을 안하고 갑자기 코드가 한 번 더 돌면서 undefined가 출력됐다
이유를 모르겠다..
'Code States > TIL' 카테고리의 다른 글
[0511] (페어) 마이크로서비스 작성 - 서버리스 애플리케이션 (0) | 2023.05.11 |
---|---|
[0510] (페어) 마이크로서비스 작성 - 서버리스 애플리케이션 (0) | 2023.05.11 |
[0509] 마이크로서비스 작성 - 마이크로서비스 배포 툴 (SAM 실습) (0) | 2023.05.09 |
[0509] 마이크로서비스 작성 - 독립적인 서비스 구성 (1) | 2023.05.09 |
[0508] 마이크로서비스 - CQRS (0) | 2023.05.08 |