CloudFormation с ELB и его общедоступным DNS

Я использую Cloudformation для построения стека с балансировкой нагрузки.

Меня беспокоит то, что каждый раз при повторном создании стека публичный URL-адрес ELB будет меняться, что потребует изменения псевдонима домена маршрута 53 веб-сайта, чтобы указывать на новый URL-адрес ELB.

Я могу добавить конфигурацию Cloudformation, чтобы автоматизировать это, но я опасаюсь, что сайт будет закрываться на несколько минут каждый раз, когда стек создается заново из-за проблем распространения DNS.

Насколько я понимаю, R53 обновит псевдоним примерно через 60 секунд, но кэширующие DNS-серверы могут не подчиняться TTL и могут обновляться в течение нескольких минут.

Один из вариантов - запустить старый и новый стеки вместе, но тогда экземпляры RDS в каждом VPC должны быть каким-то образом синхронизированы.

Также кажется, что в Cloudformation нет возможности связать существующий ELB со стеком, поэтому сохранение ELB отдельно от стека, кажется, не вариант.

Итак, каково правильное решение? Как я могу избежать каких-либо заметных простоев при замене производственного стека на недавно построенный стек CF?

1 ответ

Вы можете использовать политику стека, чтобы предотвратить обновление стека обновлениями ELB.

документация здесь: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html

пример:

{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*",
      "Condition" : {
        "StringEquals" : {
          "ResourceType" : ["AWS::ElasticLoadBalancing::LoadBalancer"]
        }
      }
    },
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}