ebSocket - AWS 샘플에서 API Gateway를 사용하여 chat 앱을 만들려고 할 때 빠졌습니다.

소개



"[발표]Amazon API Gateway에서 Websocket 사용 가능 - AWS"과 "【신기능】APIGateway에서 WebSocket을 사용할 수 있게 되었기 때문에 채팅 API를 구축해 보았다 - Qiita"을 참고하여 API Gateway를 사용하여 채팅을 만들려고 하면 생각하지 않는 곳에서 빠져서 해결했을 때의 메모입니다.

APIGateway로 실현되는 WebSocket



[발표]Amazon API Gateway에서 Websocket 사용 가능 - AWS에서 볼 수 있듯이 2018년 12월 19일에 Amazon API Gateway에서 WebSocket 통신을 구현할 수 있습니다.

AWS는 이 기능을 사용하는 간단한 채팅 앱을 'simple-websockets-chat-app - Serverless' 또는 'aws-samples/simple-websockets-chat-app - GitHub'으로 게시합니다.

이 샘플 앱은 다음과 같은 구성으로 구현됩니다.



이 코드에 대한 설명은 "【신기능】APIGateway에서 WebSocket을 사용할 수 있게 되었기 때문에 채팅 API를 구축해 보았다 - Qiita"이라는 기사에서 자세히 설명합니다.
  • simple-websockets-chat-app - Serverless
  • aws-samples/simple-websockets-chat-app - GitHub

  • 메시지가 제대로 전송되지 않는 문제



    기사를 보면, AWS가 공개하고 있는 코드를 그대로 배포하면 문제 없게 동작하고 있는 것 같았습니다만, 자신이 해 보면 올바르게 보낼 수 없었습니다.

    Lambda 의 디버그 로그를 확인하면서 보면 sendMessage 의 처리를 하고 있는 개소에서 에러를 토하고 있는 것 같습니다.

    여기서 sendMessage 의 Lambda 함수에 설정된 IAM Role 설정 상태를 살펴보면 다음과 같이 execute-api:ManageConnections 가 올바르게 설정되지 않았습니다.



    AWS 기사를 보면, 확실히 설정이 필요하다고 기재가 있습니다만, 관리 콘솔상에서는 「일치하는 액션을 찾을 수 없습니다」가 되어 버립니다.

    연결된 클라이언트를 호출하려면 응용 프로그램에 새로운 액세스 권한인 “execute-api:ManageConnections”가 필요합니다. 이는 AWS SAM 템플릿에서 처리됩니다.
    cf. [발표]Amazon API Gateway에서 Websocket 사용 가능 - AWS

    여기서 execute-api 에 액션으로 설정할 수 있는 옵션 목록을 찾았습니다.


    cf. Actions, Resources, and Condition Keys for Amazon API Gateway - AWS Identity and Access Management

    대책



    현재는 아래의 그림과 같이 「모든 ExecuteAPI 액션」을 지정하는 것으로, 기대하는 움직임을 확인할 수 있었습니다.



    문서의 업데이트가 늦는 것은 있다고 생각하기 때문에, InvalidateCache 하지만 설정할 수 없는 것은 일본의 리전만일지도 모릅니다만, 생각하지 않는 곳에서 빠져 버렸습니다.

    참고



    API 게이트웨이


  • Amazon API Gateway란? - Amazon API Gateway

  • IAM


  • 정책 개요(서비스 목록) - AWS Identity and Access Management

  • execute-api


  • API 실행 권한의 IAM 정책 예 - Amazon API Gateway
  • API 호출을 위한 액세스 제어 - Amazon API Gateway
  • IAM 액세스 권한으로 API에 대한 액세스 제어 - Amazon API Gateway
  • IAM 사용자 인증 사용 - Amazon API Gateway
  • Actions, Resources, and Condition Keys for Amazon API Gateway - AWS Identity and Access Management
  • AWS Lambda Websockets - Medium
  • API Gateway에서 REST API에 대한 액세스 제어 및 관리 - Amazon API Gateway
  • 좋은 웹페이지 즐겨찾기