Облачная информация: Какова наилучшая практика разделения файла конфигурации?

#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 строк. Я думаю, что должен быть какой-то подход к разделению файла шаблона на части для облегчения обслуживания.

Подход, Который Я Пробовал

  1. Я разрезал файл шаблона на части в соответствии с различными конечными точками
  2. Я написал сценарий со следующими действиями:
    • Объедините ресурсы конечной точки в один и загрузите в корзину S3
    • Сожмите каждую лямбда-функцию и загрузите zip-файл
  3. В каждом файле шаблона(например, UserResource.yaml с определением конечной точки пользователя CRUD), я указал кодовый файл с zip-файлом в корзине S3
  4. В файле главного шаблона я использовал AWS::Include для импорта объединенного файла ресурсов из корзины S3

Результат

Подход, который я пробовал, работает совершенно нормально. Он может успешно развернуть ресурсы, как и раньше, и я получу шаблон.yaml с менее чем 300 строками и кучей нарезанных файлов yaml.

Вопрос

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

Я новичок в AWS и не являюсь носителем языка, пожалуйста, потерпите, если я не выразился ясно или допустил какую-то глупую ошибку, спасибо!

Ответ №1:

Как вы указали, не рекомендуется создавать, а затем управлять сторонними сценариями для объединения ваших шаблонов CFN.

Вы должны помнить, что CFN-это не язык программирования, к которому вы, возможно, привыкли. Повторение-это естественная часть этого. Сказав это, вы можете рассмотреть следующие решения, присущие CFN:

Если этого все еще недостаточно, то, возможно, CFN просто не подходит для вашего использования. Затем вам нужно обратиться к гораздо более мощным инструментам IoC, таким как Terraform или CDK (CDK от AWS и «соответствует» CFN).

Комментарии:

1. Большое спасибо за ваш ответ, я попробую их!

2. @xiaokeliu666 Без проблем. Если ответ полезен, мы будем признательны за его принятие.