10
6

More than 5 years have passed since last update.

WebSocket - AWSのサンプルで API Gateway を使ったchatアプリを作ろうとしたらハマった件

Last updated at Posted at 2019-07-14

はじめに

[発表]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」で公開しています。

このサンプルアプリは以下のような構成で実装されています。

image.png

このコードの解説は、「【新機能】APIGatewayでWebSocketが利用可能になったのでチャットAPIを構築してみた - Qiita」という記事で詳細に解説されています。

メッセージが正しく送れない問題

記事を見ると、AWSが公開しているコードをそのままデプロイすれば問題なく動作しているようでしたが、自分がやってみると正しく送ることが出来ませんでした。

Lambda のデバッグログを確認しながら見てみると、 sendMessage の処理をしている箇所でエラーを吐いているようでした。

ここで、sendMessageの Lambda 関数に設定された IAM Role の設定状況を見てみると、以下のように、execute-api:ManageConnections が正しく設定されていません。

image.png

AWSの記事を見ると、確かに設定が必要と記載がありますが、マネジメントコンソール上では「一致するアクションが見つかりません」となってしまいます。

接続されたクライアントに呼び出しを行うには、アプリケーションに新しいアクセス権 “execute-api:ManageConnections”が必要です。 これは、AWS SAMテンプレートで処理されます。
cf. [発表]Amazon API GatewayでWebsocketが利用可能 - AWS

ここで、execute-api にアクションとして設定出来る選択肢の一覧を探したのですが、以下の記事では InvalidateCacheInvoke の2つしか記載がありませんした。

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

対策

現状では、以下の図のように「すべての ExecuteAPI アクション」を指定することで、期待する動きを確認することが出来ました。

image.png

ドキュメントのアップデートが遅れることはあると思うので、execute-api:ManageConnections が設定出来ないのは日本のリージョンだけなのかもしれませんが、思わぬところでハマってしまいました。

参考

APIGatway

IAM

execute-api

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6