Как добавить настраиваемый домен для установленного/развернутого API-интерфейса serverless-1.0.0?

Serverless-1.0.0-rc.1 позволяет развернуть API для доступа через AWS API Gateway.

Вопрос: мне нужен развернутый API, открытый через собственный домен с сертификатом SSL вместо случайно назначенного (URL https://qwertylgbtqert.execute-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 и использовать его, но я не знаю, как это сделать без сервера.

Ответы

Ответ 1

Сначала необходимо создать пользовательский домен и загрузить сертификаты. Это не должно быть частью этого кода или вашего развертывания этого программного обеспечения.

После того, как у вас есть собственный домен, вам нужно подумать о CloudFormation.

Как и все остальное в Serverless Framework; вы можете использовать шаблоны CloudFormation для администрирования ресурсов в AWS.

Итак, ваш вопрос заключается в том, как вы можете добавить свой API-шлюз в свой пользовательский домен в CloudFormation (подсказка: в Google Search Search гораздо важнее помощь в поиске CloudFormation вместо Serverless Framework)? Создание AWS::ApiGateway::BasePathMapping в CloudFormation - это ответ.

Это выполняется в Ресурсах в вашем файле serverless.yml. Например, например:

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

Это требует наличия переменных для domainName и stageName в файле serverless.env.yml для используемых вами этапов.

Изменить: Для версий Serverless Framework 1 перед rc1 вы должны добавить DependsOn: IamPolicyLambda в ресурс pathmapping. Это было исправлено в: https://github.com/serverless/serverless/pull/1783

Перед rc1 вы должны использовать RestApiApigEvent вместо ApiGatewayRestApi

Ответ 2

Я думаю, что эта тема заслуживает обновления, поэтому я попробую. Обязательно сначала создайте сертификат с помощью диспетчера сертификатов. Затем убедитесь, что ваш "серверный пользователь" обладает правами администратора для изменения наборов записей Route53. Затем добавьте следующее в ваш serverless.yaml:

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

plugins:
  - serverless-domain-manager

Перед развертыванием выполните (это может занять некоторое время):

serverless create_domain

Источник и дополнительные параметры можно найти здесь.