web-dev-qa-db-ja.com

サーバーレス-1.0.0フレームワークで定義/デプロイされたAPIのカスタムドメインを追加するにはどうすればよいですか?

Serverless-1.0.0-rc.1 AWS APIGatewayを介してアクセスできるようにAPIをデプロイできます。

質問:ランダムに割り当てられたもの(URL https://qwertylgbtqert.execute-api....)ではなく、SSL証明書を使用してカスタムドメインを介して公開されたデプロイ済みAPIが必要ですか?

それはserverless.ymlまたはサーバーレスフレームワーク内から実行できますか?

これが私の単純なサービスserverless.ymlの定義です:

service: my-service
provider:
  name: aws
  runtime: nodejs4.3

functions:
  generate:
    handler: handler.generate
    events:
      - http:
         method: get
         path: url
         cors: true

これに関連する質問があります: ここでの回答 が、該当する回答を提供していません。特に、serverless.yml自体の中からカスタムドメインを割り当てる方法。

AWS :: Route53リソースを作成してそれを活用できるかどうかを考えましたが、サーバーレスでそれを行う方法がわかりません。

19
Blaise

最初にカスタムドメインを作成し、証明書をアップロードする必要があります。これは、このコードまたはこのソフトウェアの展開の一部であってはなりません。

カスタムドメインを作成したら、CloudFormationの観点から考える必要があります。

ServerlessFrameworkの他のすべてと同じように。 CloudFormationテンプレートを活用して、AWSのリソースを管理できます。

では、CloudFormationのカスタムドメインにAPI Gatewayをどのように追加できるかという質問になります(ヒント:Serverless Frameworkの代わりにCloudFormationを検索すると、Googleでさらに多くのヘルプがあります)。 CloudFormationでAWS::ApiGateway::BasePathMappingを作成することが答えです。

これは、serverless.ymlファイルのリソースで行われます。たとえば、次のようになります。

resources:
    Resources:
        pathmapping:
            Type: AWS::ApiGateway::BasePathMapping
            Properties:
                BasePath: oauth2
                DomainName: ${self:vars.domainName}
                RestApiId: 
                    Ref: ApiGatewayRestApi
                Stage: ${self:vars.stage}

これには、使用するステージのserverless.env.ymlファイルにdomainNamestageNameの変数が必要です。

編集:rc1より前のバージョンのServerless Framework 1の場合、パスマッピングリソースにDependsOn: IamPolicyLambdaを追加する必要があります。これは次の場所で修正されました: https://github.com/serverless/serverless/pull/178

Rc1の前に、RestApiApigEventの代わりにApiGatewayRestApiを使用する必要があります

19
doorstuck

このトピックは更新する価値があると思うので、試してみます。必ず最初にCertificateManagerで証明書を作成してください。次に、「サーバーレスユーザー」がRoute53レコードセットを変更するための適切な管理者権限を持っていることを確認してください。次に、serverless.yamlに以下を追加します。

custom:
  customDomain:
    domainName: "api.example.com"
    certificateName: "*.example.com"
    createRoute53Record: true

plugins:
  - serverless-domain-manager

Runをデプロイする前に(これには時間がかかる場合があります):

serverless create_domain

ソースと追加のオプションは見つけることができます ここ

1
Nebulastic