Контекст
Я чувствую, что мне нужно предоставить здесь много контекста для полного понимания проблемы, поэтому заранее прошу прощения, если это займет немного времени или в итоге предоставит много информации, я просто хочу отразить как можно больше последующих вопросов и запросов на разъяснения.
У меня есть проект, который передается техническим специалистам. Раньше он был в производстве под другим владельцем в другом AWS аккаунте. Я пытаюсь перезапустить его под учетной записью AWS, которой я управляю, и один из пакетов создает для меня некоторые проблемы.
Он использует Serverless для предоставления пары блоков S3 и их политик доступа, пара ролей IAM и куча методов ApiGateway. Пакет опирается на вложенных стеков , чтобы обойти ограничение в 200 ресурсов, как описано здесь .
Наконец, пользователь IAM, к которому подключается CircleCI, имеет политику AdministratorAccess
присоединено.
Проблема
Я продолжаю получать сбои от CircleCI во время этого шага в сборке
node_modules/.bin/serverless deploy --verbose --stage develop --region us-east-1 --package ./.serverless
Точная природа сбоев кажется несовместимой, т.е. не всегда терпит неудачу в одном и том же месте. В какой-то момент ресурс просто не удается создать, и весь процесс откатывается. Вот несколько примеров сбоев при запуске в журнале с +/- 5 строками, за которыми следует фактическая ошибка, сообщенная без сервера
Выполнить 1
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod001VarOptions
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod002VarOptions
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod003VarOptions
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod004VarOptions
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod006Options
CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncAbcNestedStack
CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncDefNestedStack
CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncGhiNestedStack
CloudFormation - UPDATE_ROLLBACK_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop
CloudFormation - UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop
CloudFormation - DELETE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethod006Options
Serverless Error ---------------------------------------
An error occurred: FuncAbcNestedStack - Embedded stack arn:aws:cloudformation:us-east-1:ACCOUNT_ID:stack/org-package-develop-FuncAbcNestedStack/RESOURCE-ID-001 was not successfully created: The following resource(s) failed to create: [AbcLambdaFunction]. .
Выполнить 2
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod001VarOptions
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod002VarOptions
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod005VarOptions
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod006Options
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethod004VarOptions
CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncDefNestedStack
CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncGhiNestedStack
CloudFormation - CREATE_FAILED - AWS::CloudFormation::Stack - FuncAbcNestedStack
CloudFormation - UPDATE_ROLLBACK_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop
CloudFormation - UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - org-package-develop
CloudFormation - DELETE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethod001VarOptions
Serverless Error ---------------------------------------
An error occurred: FuncDefNestedStack - Embedded stack arn:aws:cloudformation:us-east-1:ACCOUNT_ID:stack/org-package-develop-FuncDefNestedStack/RESOURCE-ID-002 was not successfully created: The following resource(s) failed to create: [DefLambdaFunction]. .
Примечание. Все уникальные идентификаторы в вышеприведенных журналах заменены / скрыты новыми идентификаторами, уникальными для обоих журналов, а не для log, т. Е. FuncAbcNestedStack
появляется в обоих журналах, потому что это точно такой же ресурс в конфигурации.
Вопрос
Учитывая все вышеизложенное, мой вопрос на данный момент как мне отладить это? Это представляет все детали, которые, как мне кажется, мне доступны, в том, что я не могу погрузиться глубже, чтобы выяснить , почему ресурс не удалось создать. Я прочитал немного о ошибках устранения неполадок , но ничего страшного не получилось, поскольку я на самом деле не использую EC2 напрямую.
4 апреля Обновление
У меня есть проделал большую работу, пытаясь отладить шаблоны. Имейте в виду, я обычно не работаю с самими шаблонами, Serverless генерирует их и выгружает их в корзину S3 до их применения.
Вот некоторые шаги, которые я предпринял
- Обновлено до самой последней версии Serverless (
1.67.0
, с 1.30.3
) - Обнуление существующих стеков
- Связанное с обнажением ведро S3
- Обновление времени выполнения узла (
12.16.1
, от 8.10.0
) - Скачал и выложил шаблон CFN, который содержит неисправную лямбду - проблем не обнаружено
Я все еще получаю те же результаты. Когда я перезапускаю сборку и проверяю журналы событий CloudFormation, я вижу, что стек не может быть создан, потому что внутри него не удается создать функцию Lambda. В этой функции нет ничего особенного (другие лямбды успешно создаются ранее в ходе выполнения), кроме факта, что она является авторизатором для всех других функций в API, что может иметь или не иметь значение. Я до сих пор не могу найти более подробную информацию о , почему лямбда не удается создать.
Обновление 6 апреля
Хорошо, теперь, когда я понимаю, как работает консоль CloudFormation, вот что я думаю - это скрытое сообщение об ошибке
Unzipped size must be smaller than 262144000 bytes (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 0507722d-46e7-4340-bc68-fdba1ed469d6)
Глядя на сам шаблон CFN для этого вложенного стека, я теперь вижу, что происходит. Каждая лямба получает свой собственный стек, и каждый стек во всем пакете компилируется в один ZIP-файл, размер которого в итоге оказывается на 270 МБ или 20 МБ больше, чем указанное выше ограничение. С этого момента кажется, что у меня есть два возможных пути вперед
- Выясните, как разделить функции по нескольким ZIP
- Измените конфигурацию веб-пакета, чтобы скомпилированные файлы были менее раздутыми (я серьезно не знаю, что здесь происходит - файл 1K TypeScript выходит размером 6,5 МБ после веб-пакета)