AWS APIGateway Lambda DynamoDB Serverless Docker

ローカル環境でAPIGateway+Lambda+DynamoDBでチャットサービスを作成する【2】:ServerlessFrameworkプロジェクトの雛形を作成

どーも、シローです。

今回は前回(https://shiro-secret-base.com/?p=994)に引き続き、ServerlessFrameworkを使ってWebSocketの実装を紹介します。

前回の確認

前回ではDockerでserverlessコンテナとdynamodbコンテナを作成しました。

docker-compose psでコンテナが稼働していることを前提として進めていきます。

serverlessコンテナに入りServerlessFrameworkプロジェクトの雛形を作成

まずはコンテナに入ります。

sls create --template aws-nodejsでプロジェクトの雛形を作成します。

次にwebsocketを行うためのLambda関数のファイルを作成します。

最終的にディレクトリが次のようになります。

serverless.ymlの記述

ざっくりとは

  • WebSocketに接続: functions/socket/connect/index.handler
  • 接続を切る: functions/socket/disconnect/index.handler
  • メッセージを送信: functions/socket/sendMessage/index.handler

functions/socket/connect/index.handlerの記述

functions/socket/disconnect/index.handlerの記述

functions/socket/sendMessage/index.handlerの記述

Dockerfileとstartup.shの修正

ServerlessFrameworkのWebSocketにコンテナ立ち上げ時に接続できるようにDockerfiledocker-compose.ymlの修正をします。

Dockerfileの記述

./docker/serverless/Dockerfile

下3行をコメントアウトしています。

startup.shの記述

./docker/serverless/startup.sh

プロジェクトのディレクトリに入ってsls offlineでローカルでサーバレス環境を稼働するようにしています。

Dockerをビルドし直して再度、コンテナを起動する

Dockerfileを変更したので、反映させるためにビルドする必要があります。

コンテナを起動します。

出力が↑のようになっていればおそらくうまく行ってます。

試しにローカルで立ち上げたソケットに接続してみる

ソケットに接続してみます。

docker-compose.ymlでポートフォワードで指定した"3334"ポートがローカルから接続できるポート番号になっています。

接続にはwscatコマンドを使います。npm install -g wscatでインストールできます。参考 => (https://www.npmjs.com/package/wscat)

接続&メッセージ投稿

実際に動かしてみた動画

AWSによるサーバーレスアーキテクチャ
クラウドコンピューティングの技術の中でも、昨今注目を集めているのがサーバーレスアーキテクチャです。
FaaS(Function-As-A-Service)とも呼ばれるサーバーレスアーキテクチャは、ファンクション(関数)と呼ばれるマイクロサービスを実装し、組み合わせながら、サービスを構築していくアーキテクチャです。

-AWS, APIGateway, Lambda, DynamoDB, Serverless, Docker

© 2024 Shiro's secret base