Независимо от вашего решения, в конце концов, все это будет архитектурное решение, которое должно быть принято с учетом процессов, опыта команды, культуры, архитектурных знаний и т. Д.
Чтобы дать вам немного понимания,Вы можете структурировать свой проект так, чтобы ваши функции находились в папке, а любой другой модуль - в папке diff.Вы должны быть осторожны, чтобы определить «package.include» и / или «package.exclude» в своем конфигурационном файле.
Более того, если под структурой вы подразумеваете все ресурсы CloudFormation, у вас есть разделдля этого в ваших файлах конфигурации serverless.yml.Если он станет слишком большим, вы также можете использовать дополнительный конфигурационный файл и импортировать его в ваш serverless.yml
Пример:
├── config //configs based on your stage
├── dev.json
├── prod.json
├── functions
├── functionsA
├── index.js
├── functionsB
├── index.js
├── tests
├── unit.test.js
├── package.json
├── serverless.yml
├── serverless.resources.yml
Преимущества наличия всего в одном репо:
- Вы сохраняете все ресурсы в одном проекте, что означает, что если вы «sls remove», команда позаботится об удалении всех ваших ресурсов.То же самое для лямбд.
- Новые члены команды могут легко понять вашу архитектуру.
- У вас есть весь код, необходимый для запуска локального экземпляра API и выполнения интегрированных тестов.Полезно для CI.
- У вас будет только один репо для управления во время конвейера.
- Вам не нужно будет управлять двумя репо, чтобы оценить, что они "гуляют" вместе.
- Безсерверные функции позволяют использовать / развертывать только функции, если вы не хотите обновлять облачную архитектуру.
- Поставщик будет управлять связью между всеми вашими ресурсами.Пример: Вам не нужно управлять тем, чтобы apiGateway на этапе DEV вызывал лямбда-выражения, указывающие на DV DB или содержащие переменную среды со значением DEV.
- По крайней мере, вы держитесь от своего ручного управления,тем лучше.
Надеюсь, этих причин достаточно, чтобы вы приняли решение.