演習の概要
- まず初めに、AWSの サーバレス サービスを活用し、ローカル環境で動く WebSocket で通信を行うチャットアプリを構築する
- API Gateway 、 Lambda 、 DynamoDB といったサービスを利用することで、EC2 のような仮想サーバーの管理が不要な環境で、WebSocket のような双方向通信を実現するプロトコルを利用するアプリケーションが構築できる

サーバレスとは(Function as a Service: FaaS)
-
サーバーの管理を必要とせずにサーバー上でプログラミングを実行できる仕組み
- 実際にサーバーは存在しているがこちらで管理をする必要はない
- サーバレスコンピューティングやサーバレスアーキテクチャとも呼ばれている
WebSocketとは
- ユーザーのブラウザとサーバー間で対話的な通信セッションを開くことができる先進技術
-
この API によって、サーバーにメッセージを送信したり、応答をサーバーに
ポーリング
することなく、イベント駆動型のレスポンスを受信したりすることができる
- ポーリング…定期的に監視対象に問い合わせを行うこと
- 参考: https://developer.mozilla.org/ja/docs/Web/API/WebSockets_API
利用するAWSリソースの説明
API Gateway
- フルマネージド型のサービスで、APIの管理や実行を容易にする仕組み
- API Gateway を使用することで、リアルタイム双方向通信アプリケーションを実現する RESTful API および WebSocket API を作成することができる
Lambda
- イベント駆動型のコンピューティングサービスであり、指定したコードを実行できるもの
- 実行された分だけ請求されるので低コストに抑えられる
DynamoDB
- 1 桁ミリ秒単位で規模に応じたパフォーマンスを実現する、高速で柔軟な NoSQL データベースサービス
AWS Identity and Access Management (IAM)
- IDとアクセス権限を管理する機能
- 誰がどのサービスにアクセスできるのかを、許可または拒否することができる
IAMロール
- AWSのサービスや他のアカウントに対してAWS の操作権限を付与するための仕組み
- 今回はLambdaからDynamoDBを操作するときに使う
IAMポリシー
- 「何に対して」「どのような操作を」「できるか(できないか)」の権限を記述したドキュメントで、許可証のようなもの
- これをIAMユーザーやIAMロールに割り当てることで、「誰が」その権限を持つのかといったことを決定する
外部からアクセスできるようにする
- 基本的な構造を作成したら、続いて外部に公開できるようにする
- 外部への公開は、 CloudFront と S3 というサービスを途中に挟むことで簡単に実現可能(以下のような構成)
- 全てがフルマネージド型のサービスなので、こちらでメンテナンスなどのインフラ作業をする必要がない状態になっている

追加するAWSリソース
CloudFront
- 低レイテンシーかつ高速な転送速度でコンテンツを安全に配信するサービス
S3
- どこからでも簡単に、お好みの量のデータを取得できるオブジェクトストレージ
- データレイク、クラウドネイティブアプリケーション、モバイルアプリケーションなど、事実上あらゆるユースケースで、あらゆる量のデータを保存、保護することができる
オリジンアクセスコントロール (OAC)
-
CloudFrontでS3バケットをオリジンとする際のアクセス制御方法
- オリジン…リクエストが送信される場所
- S3に格納したコンテンツをCloudFrontを経由して公開する際に必要
AWSが推奨しているのはOACだが、OAI(オリジンアクセスアイデンティティ)というものもある
- OAIと呼ばれる特別な CloudFront ユーザーを作成しCloudFrontに設定することで、S3から直接ではなく、CloudFront 経由でのみファイルにアクセスできるようになる