고생고생하던 채팅앱을 드디어 완성했다.
에러가 나던 부분들은 보통 권한 문제였어서 코드 상으로는 크게 고칠 게 없었다.
1. 코드 수정 부분
(1편에서 유튜브 동영상을 보면 예제 코드가 있습니다. 아래는 그 코드에서 수정한 부분들입니다.)
*
const result = await docClient.query(params).promise();
if (result.Items) { ... }
이 부분에서 if 부분이 작동이 안 됐다. 왜인지는 모르겠으나 변수에 잘 저장이 안 된 것으로 판단하고
docClient.query(params, async function (err, data) { ... }
이렇게 바로 처리해주었다. result를 data로 바꾸기만 하면 된다.
*
위 문제처럼
try {
await apigwManagementApi.postToConnection(dt).promise();
} catch (e) { ... }
여기서도, catch 부분에서 error를 잡아내지 못했다. 에러가 생겨도 코드가 계속 작동하고 return까지 한다. 아무래도 설정 문제인 것 같은데 거기까지 건드릴 엄두가 나지 않아서, 코드에서 최대한 엮었다.
await apigwManagementApi.postToConnection(dt, async function (err, data) {
if (err) { ... });
위처럼 바로 처리해줬다.
2. aws 콘솔을 이용한 디버깅
잘 작동하는 줄 알고, 프론트 앱이랑 연결을 해보니 아무것도 전송되지 않았다. DB도 잘 검사하고 코드 200도 잘 반환하였는데 뭐가 문제일까 싶어서 중간중간 계속 에러 스택을 출력해봤는데,
바로 위의 postToConnection 함수에서 에러가 났던 것이었다.
에러 내용은 다음과 같다.
AccessDeniedException:
User: arn:aws:sts::*:*/*/* is not authorized to perform: execute-api:ManageConnections on resource: arn:aws:execute-api:ap-northeast-2:*:*/dev/POST/@connections/{connectionId}
구글링해도 잘 안 나와서 api-gateway에서 권한 부여자도 수정해보고 이것 저것 해봤는데, 역시 답은 에러 코드에 있었다. 결론을 말하자면 role 문제였다...
해결 방법은
AWS Console -> IAM -> 역할 -> 내가 사용하는 역할 -> 권한 -> 인라인 정책 추가
에서
이렇게 입력하고 정책 검토를 누르면 된다.
물론 애초에 role 설정은 다들 다르니 이런 에러는 안 날 가능성이 크다.
json 에러라든지 자잘자잘한 에러들이 많이 났었는데 대부분 내가 삽질하다 생긴 에러들이라 여기에 적진 않았다.
aws 쓰기 너무 어렵다........
'AWS' 카테고리의 다른 글
[AWS] 이미지 업로드/읽기 속도 향상기 - Signed URL, Lambda@Edge, Cloud Front (0) | 2022.07.26 |
---|---|
[AWS] Access denied for user 'id'@'ip' (using password: YES)" 해결 방법 (0) | 2022.04.17 |
[AWS] User is not authorized to access this resource 에러 해결 방법 (0) | 2022.02.14 |
[AWS] serverless webSocket을 이용해 DM 앱 만들기 - 1 (0) | 2021.12.27 |
[AWS] 이모지 저장하기 (0) | 2021.10.26 |