サーバーレスフレームワークを使用してAWS Lambdaに関数をデプロイしていますが、作成されたURLエンドポイントからステージ指定子を削除できる場所/方法を見つけることができません。ドキュメントはこの部分をカバーしていないようです。
たとえば、これは私のserverless.yml
です(無関係な部分は省略されています)。
service: cd-mock
provider:
name: aws
runtime: python3.6
region: eu-west-1
package:
include:
- handler.py
functions:
index:
handler: handler.index
events:
- http:
path: /
method: get
serverless deploy
の後に、次のサービス情報が返されます。
service: cd-mock
stage: dev
region: eu-west-1
stack: cd-mock-dev
api keys:
None
endpoints:
GET - https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/
functions:
index: cd-mock-dev-index
URLエンドポイントの/dev
部分と、関数にも注目してください。そのdev
は、構成ファイルのstage
パラメータのデフォルト値です。
stage: something
ファイルでserverless.yml
を指定すると、その/something
がURLのサフィックスとして、および関数の一部として含まれます。
質問:生成されたURLエンドポイントからステージ仕様を削除するにはどうすればよいですか、または:ステージ仕様が生成されたURLの一部になるのを防ぐにはどうすればよいですか?
(ステージが関数の一部であることは問題ありません。AWSLambdaダッシュボードでstaging
関数とproduction
関数を簡単に分離できます。)
これは、サーバーレスフレームワークではないAPIゲートウェイの機能/規則であるため、serverless
はそれについて何も実行できません。
API Gatewayにはステージが必要であり、エンドポイントの最後に追加されます。
APIゲートウェイエンドポイントは開発者向けですが、ユーザーフレンドリーではありません。
ユーザーフレンドリーにする場合は、カスタムドメインを追加できます。ステージごとに異なるカスタムサブドメインを設定できます。
できることの1つは、所有しているカスタムドメイン(mycompany.com
など)を使用して、それをAPI Gatewayにマッピングすることです。この方法では、https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/
へのリクエストを作成するのではなく、https://api.mycompany.com/
へのリクエストを作成します。
serverless-domain-manager
と呼ばれるプラグインがあり、このカスタムドメインのセットアップがはるかに簡単になります。それを使用する方法の完全なウォークスルーについては、 このブログ投稿 をチェックしてください。
@dashnugの回答「API Gatewayにはステージが必要であり、エンドポイントの末尾に追加されます」と私が別の場所で読んだ別の応答によってトリガーされ、ステージ仕様を少しわかりにくくすることで問題を「解決」しました(ステージ環境が参照された)v1
ステージとして。これは、APIのバージョン管理も示唆しているので、私の場合も同様です。
だから、私のserverless.yml
セクションに以下が含まれるようになりました:
provider:
name: aws
runtime: python3.6
memorySize: 512
region: ${opt:region, 'eu-west-1'}
profile: ${opt:profile, 'default'}
stage: ${opt:stage, 'v1'} # A trick to don't end up with "production" or "staging" as stage.