ゲームとプレーヤーの 2 つのリソースがあり、どちらも crud 機能を備えています。これらは同じサーバーレス サービスにあるはずですか? それらを分離したいのですが、どうすれば同じ API ゲートウェイに配置できますか?
3 に答える
必要なことを行う 1 つの方法は、サーバーレスを使用してラムダをデプロイすることですが、エンドポイントをラムダにリンクするように API Gateway を手動で設定することです。
ここに記載されているサーバーレスには制限があります: https://serverless.com/framework/docs/providers/aws/guide/services/
それが述べているところ:
現在、すべてのサービスは AWS API Gateway で個別の REST API を作成します。AWS API Gateway の制限により、1 つの REST API ごとにのみカスタム ドメインを持つことができます。大規模な REST API を作成する予定がある場合は、この制限に注意してください。また、修正が進行中であり、最優先事項です。
私たちの経験では、クライアントにさまざまな API とルーティング オブジェクトを持つサービスを設定することができました。
それらを同じサーバーレス サービスに含めるかどうかを決定するには、モデリングに入る必要があります。私たちの場合、次の質問に答えます。
- エンティティは関連していますか?
- エンティティとメソッドは同じ速度で変更されますか?
- 消費者は、エンティティの 1 つのセットを消費せずに他のセットを消費しますか?
ゲームを変更すると、プレーヤーなどを変更しますか?
このリンクはその答えに役立ちます: https://martinfowler.com/articles/microservices.html
あなたの例では、それらを同じサーバーレス フレームワークに保持する必要があります。2 つのファイルを作成player.js
しgame.js
、src/controllers
ロジックを分離します。
次の YAML ファイルを使用してサーバーレスをセットアップできます
functions:
player_info:
handler: src/controllers/player.info
events:
- http:
path: player # path in the url
method: get
player_create:
handler: src/controllers/player.create
events:
- http:
path: player # path in the url
method: post
player_delete:
handler: src/controllers/player.delete
events:
- http:
path: player # path in the url
method: delete
game_info:
handler: src/controllers/game.info
events:
- http:
path: player # path in the url
method: get
game_create:
handler: src/controllers/game.create
events:
- http:
path: player # path in the url
method: post
game_delete:
handler: src/controllers/game.delete
events:
- http:
path: player # path in the url
method: delete
サーバーレス フレームワーク プロジェクトは、単一の API ゲートウェイをデプロイします。したがって、別の API ゲートウェイに配置する場合は、別のサーバーレス フレームワーク プロジェクトが必要です。
作成しているサービスのサイズによっては、意味がある場合とそうでない場合があります。
2 つの API ゲートウェイを上位でマージするには、API ゲートウェイ カスタム ドメインを使用し、異なる API ゲートウェイおよびステージへのパスに基づいてリクエストをプロキシし、それらすべてに対して 1 つのドメインを維持します。