CloudFormation не может обновить стек, когда пользовательский ресурс требует замены - PullRequest
0 голосов
/ 07 июля 2019

У меня есть шаблон CloudFormation, который создает конфигурацию запуска:

Resources:
# Launch Configuration for the instances in the Atoscaling Group
  LaunchConfiguration:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      AssociatePublicIpAddress: false
      ImageId: !Ref EC2AMI
      InstanceType: !Ref EC2InstanceType
      KeyName: !Ref EC2Key
      IamInstanceProfile: !ImportValue EC2RoleInstanceProfileARN
      LaunchConfigurationName: jxt-private-asg-launch-config
      SecurityGroups:
        - !ImportValue PrivateSecurityGroupId   

Когда я пытаюсь обновить стек, я получаю следующую ошибку:

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

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

Ответы [ 2 ]

3 голосов
/ 07 июля 2019

Одним из решений может быть пропуск LaunchConfigurationName, так как это не обязательно.

Скопировано из AWS :: AutoScaling :: LauncConfiguration документации :

Имя конфигурации запуска. Это имя должно быть уникальным для каждого региона для каждого аккаунта. [...]

Требуется обновление: Замена

Проблема, с которой вы сталкиваетесь, заключается в том, что вы внесли изменение, которое требует замены конфигурации запуска. Обычно CloudFormation создает новый ресурс (в случае, если существующий ресурс не может быть обновлен), указывает любые зависимые ресурсы на новый ресурс, а затем удаляет старый ресурс. Однако эта операция завершается ошибкой, если ресурс использует статическое имя, поскольку тогда он конфликтует с ограничением уникального имени, упомянутым в документации.

0 голосов
/ 08 июля 2019

Вы можете либо:

  1. Делать то, что рекомендовано @matsev, и не использовать имена для ресурсов, которые не требуют этого (вероятно, лучший вариант) - имена будут генерироваться на основе имени стека.
  2. Добавьте переменную в ваше имя ресурса, например, параметр, который передает идентификатор фиксации или дату или что-то в том же духе.В идеале это сделает ваше имя ресурса уникальным.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...