#amazon-web-services #amazon-cloudformation
Вопрос:
Описание
Я разрабатываю веб-приложение с помощью AWS, чтобы развернуть свои конечные точки и функции lambda в своей песочнице, я использовал cloudformation для помощи в управлении ресурсами. Однако по мере роста проекта я обнаружил, что в моем шаблоне слишком много повторяющихся ресурсов.файл yaml, такой как:
CreateUserFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: functions/function-user/
Handler: app.create
Environment:
Variables:
...
Policies:
...
Events:
xxxApi:
Type: Api
Properties:
Path: /users
Method: post
В принципе, я создал такой ресурс для каждой конечной точки и размера шаблона.yaml насчитывает более 2000 строк. Я думаю, что должен быть какой-то подход к разделению файла шаблона на части для облегчения обслуживания.
Подход, Который Я Пробовал
- Я разрезал файл шаблона на части в соответствии с различными конечными точками
- Я написал сценарий со следующими действиями:
- Объедините ресурсы конечной точки в один и загрузите в корзину S3
- Сожмите каждую лямбда-функцию и загрузите zip-файл
- В каждом файле шаблона(например, UserResource.yaml с определением конечной точки пользователя CRUD), я указал кодовый файл с zip-файлом в корзине S3
- В файле главного шаблона я использовал AWS::Include для импорта объединенного файла ресурсов из корзины S3
Результат
Подход, который я пробовал, работает совершенно нормально. Он может успешно развернуть ресурсы, как и раньше, и я получу шаблон.yaml с менее чем 300 строками и кучей нарезанных файлов yaml.
Вопрос
Даже мое решение работает, я не думаю, что это лучшая практика, потому что каждый раз, когда я хочу развернуть после изменения, мне приходится запускать скрипт для загрузки ресурсов. Я хочу знать, как лучше всего управлять ресурсами.
Я новичок в AWS и не являюсь носителем языка, пожалуйста, потерпите, если я не выразился ясно или допустил какую-то глупую ошибку, спасибо!
Ответ №1:
Как вы указали, не рекомендуется создавать, а затем управлять сторонними сценариями для объединения ваших шаблонов CFN.
Вы должны помнить, что CFN-это не язык программирования, к которому вы, возможно, привыкли. Повторение-это естественная часть этого. Сказав это, вы можете рассмотреть следующие решения, присущие CFN:
- вложенные стеки — распространенный способ повторного использования и параметризации общих ресурсов
- разделите свой шаблон на логически разделенные шаблоны, например, сетевой стек, стек API и стек БД. Затем вы повторно используете их путем экспорта выходных значений стека
- Существуют также макросы CFN и пользовательские ресурсы, которые могут использоваться в качестве замены отсутствия циклов в CFN.
Если этого все еще недостаточно, то, возможно, CFN просто не подходит для вашего использования. Затем вам нужно обратиться к гораздо более мощным инструментам IoC, таким как Terraform или CDK (CDK от AWS и «соответствует» CFN).
Комментарии:
1. Большое спасибо за ваш ответ, я попробую их!
2. @xiaokeliu666 Без проблем. Если ответ полезен, мы будем признательны за его принятие.