web-dev-qa-db-ja.com

AWS Lambda関数+サーバーレスフレームワークのURLからステージを削除するにはどうすればよいですか?

サーバーレスフレームワークを使用して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関数を簡単に分離できます。)

20

これは、サーバーレスフレームワークではないAPIゲートウェイの機能/規則であるため、serverlessはそれについて何も実行できません。

API Gatewayにはステージが必要であり、エンドポイントの最後に追加されます。

APIゲートウェイエンドポイントは開発者向けですが、ユーザーフレンドリーではありません。

ユーザーフレンドリーにする場合は、カスタムドメインを追加できます。ステージごとに異なるカスタムサブドメインを設定できます。

17
dashmug

できることの1つは、所有しているカスタムドメイン(mycompany.comなど)を使用して、それをAPI Gatewayにマッピングすることです。この方法では、https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/へのリクエストを作成するのではなく、https://api.mycompany.com/へのリクエストを作成します。

serverless-domain-manager と呼ばれるプラグインがあり、このカスタムドメインのセットアップがはるかに簡単になります。それを使用する方法の完全なウォークスルーについては、 このブログ投稿 をチェックしてください。

29
Alex

@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.