6

Когда я запускаю CloudFormation deploy с использованием шаблона с ресурсами API Gateway, при первом запуске он создает и развертывает его на этапах. В последующие времена я запускаю его, он обновляет ресурсы, но не развертывает их на этапы.CloudFormation не развертывается на этапах шлюза API при обновлении

Это поведение, как предполагалось? Если да, как я могу его развернуть на этапы, когда он обновляется?

(Terraform упоминает аналогичный вопрос: https://github.com/hashicorp/terraform/issues/6613)

ответ

5

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

Один из способов обойти это было бы использовать пользовательский ресурс с поддержкой лямбда (см. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html).

Lambda должен создать новое развертывание, только если один из ваших ресурсов обновлен. Для того, чтобы определить, если один из ваших ресурсов была обновлена,
вы, вероятно, придется реализовать свою логику вокруг этого API вызова: http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackEvents.html

Для того, чтобы вызвать обновлений на пользовательских ресурсов, я предлагаю вам поставить CloudFormation параметр, который будет (например, текущее время или номер версии).

Обратите внимание, что вам придется добавить в свой пользовательский ресурс пункт DependsOn, который будет включать все ресурсы, относящиеся к вашему API. В противном случае развертывание может быть создано до обновления всех ресурсов API.

Надеюсь, это поможет.

+0

Конечно помогает. :) Амазонка предложила другой путь - может поделиться, если заинтересована. – bjfletcher

+1

@bjfletcher, конечно, хотел бы знать! – spg

+1

@bjfletcher Запуск этой проблемы также, что вы обнаружили из Amazon? –

2

CloudFormation в словах Amazon является:

AWS CloudFormation заботится о предоставления и настройке этих ресурсов для вас http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html

Перераспределение API, не является задачей инициализации ... Это которая является частью этапа процесса выпуска программного обеспечения.

AWS CodePipeline - это служба непрерывной доставки, которую вы можете использовать для моделирования, визуализации и автоматизации шагов, необходимых для выпуска вашего программного обеспечения. http://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html

CodePipeline также поддерживает выполнение функций Lambda от действий в трубопроводе. Поэтому, как было сказано ранее, создайте функцию Lambda для развертывания вашего API, но вызовите его из Codepipeline вместо CloudFormation.

Consult этой страницы для деталей: http://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html