AWS

[AWS] serverless webSocket을 이용해 DM 앱 만들기 - 2

폭풍저그김탁구 2022. 1. 3. 20:51

고생고생하던 채팅앱을 드디어 완성했다.

에러가 나던 부분들은 보통 권한 문제였어서 코드 상으로는 크게 고칠 게 없었다.

 


 

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 쓰기 너무 어렵다........