Бессерверная структура не развертывает API-шлюз на AWS из конфигурации - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь использовать Serverless Framework для создания Lambda, который вызывается, когда клиент подключается к шлюзу websocket API. AWS CloudFormation создает определенные функции Lambda, но шлюз API веб-сокета не создается.

После попытки написать свою собственную (которая не работала) я прибегнул к копированию и вставке примеров, которые я нашел на документах без серверов, в только что созданную папку без серверов, просто чтобы посмотреть, сработает ли она - это не получилось, и я не могу найти никого, кто, кажется, имел подобную проблему.


До сих пор я пробовал простые и расширенные методы, документированные здесь (на этом основан пример кода): https://serverless.com/framework/docs/providers/aws/events/websocket/

И я также пытался следить за этим блогом, который также привел к созданию Lambda, но не к API-шлюзу. https://serverless.com/blog/api-gateway-websockets-example/

Вот мой файл serverless.yml. Он развертывается, как и следовало ожидать, кроме шлюза API:

service: temp
provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-2

functions:
  default:
    handler: handler.connect
    events:
      - websocket: 
        route: $default

Вот вывод развертывания -v без сервера:

$ serverless deploy -v
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - temp-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_COMPLETE - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - temp-dev
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (386 B)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - temp-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - DefaultLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - DefaultLogGroup
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - DefaultLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - DefaultLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - DefaultLambdaFunction
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - DefaultLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - DefaultLambdaVersionY0DDREbM8apFqgW7p0WqFe2SjYB4Wt7O63fYPiljU
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - DefaultLambdaVersionY0DDREbM8apFqgW7p0WqFe2SjYB4Wt7O63fYPiljU
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - DefaultLambdaVersionY0DDREbM8apFqgW7p0WqFe2SjYB4Wt7O63fYPiljU
CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - temp-dev
CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - temp-dev
Serverless: Stack update finished...
Service Information
service: temp
stage: dev
region: eu-west-2
stack: temp-dev
api keys:
  None
endpoints:
  None
functions:
  default: temp-dev-default
layers:
  None

Stack Outputs
DefaultLambdaFunctionQualifiedArn: arn:aws:lambda:eu-west-2:[redacted]:function:temp-dev-default:3
ServerlessDeploymentBucketName: temp-dev-serverlessdeploymentbucket-[redacted]

Если кто-нибудь сможет пролить свет на это, поскольку я могу упустить что-то очевидное, я был бы благодарен.

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Пройдя буквально через все, что связано с Serverless, я понял, что моя версия Serverless не самая последняя (не спрашивайте меня, как это произошло, я запустил yarn add serverless, чтобы получить вчера специфичную для проекта версию)

Вместо этого версия была 1.35 и, следовательно, не поддерживала веб-сокеты API Gateway.Возможно, я установил его глобально на предыдущем этапе и не смог удалить его из своих глобальных пакетов npm ...

Тот факт, что он не смог распознать теги без вывода сообщений, не помог процессу отладки, и я мог бы - когдаЯ получаю шанс - внесите свой вклад в проект, добавив проверочный прогон для файлов Serverless.yml, чтобы в консоли были помечены неподдерживаемые параметры.

Как это было, запуск npm install -g serverless@latest устранил проблему, и теперь API-шлюзправильно развернуто.

Спасибо Алекс и Хьюго за ответ!

1 голос
/ 25 апреля 2019

Ваш массив событий искажен, а свойство route не в нужном месте (добавьте еще один отступ.)

Когда вы конвертируете свой образец в JSON, он выглядит так:

{
    "service": "temp",
    "provider": {
        "name": "aws",
        "runtime": "nodejs8.10",
        "region": "eu-west-2"
    },
    "functions": {
        "default": {
            "handler": "handler.connect",
            "events": [
                {
                    "websocket": null,
                    "route": "$default"
                }
            ]
        }
    }
}

Исправлено с дополнительным отступом, например:

functions:
  default:
    handler: handler.connect
    events:
      - websocket: 
          route: $default

Теперь в JSON это выглядит так:

{
    "service": "temp",
    "provider": {
        "name": "aws",
        "runtime": "nodejs8.10",
        "region": "eu-west-2"
    },
    "functions": {
        "default": {
            "handler": "handler.connect",
            "events": [
                {
                    "websocket": {
                        "route": "$default"
                    }
                }
            ]
        }
    }
}
...