Разница между выводом и экспортом - PullRequest
3 голосов
/ 18 июня 2020

В CloudFormation у нас есть возможность выводить некоторые значения из шаблона, чтобы они могли быть получены другими процессами, стеками и т. Д. c. Обычно это имя чего-либо, может быть, URL-адрес или что-то, сгенерированное во время создания (развертывания) стека и т. Д. c.

У нас также есть возможность «экспортировать» из шаблона. В чем разница между возвратом значения в виде «вывода» и «экспорта»?

1 Ответ

3 голосов
/ 18 июня 2020

Обычные выходные значения не могут быть ссылками из других стеков . Они могут быть полезны, когда вы объединяете или встраиваете свои стеки и их область видимости / видимость является локальной. Экспортированные выходные данные видны глобально в пределах учетной записи и региона и могут использоваться любым будущим стеком, который вы собираетесь развернуть.

Цепочка

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

Например, у вас есть два шаблона с именами instance.yaml и eip.yaml. instance.yaml выводит свой идентификатор экземпляра (без экспорта), а eip.yaml принимает идентификатор экземпляра в качестве входного параметра.

Чтобы развернуть их обоих, вы должны объединить их в цепочку:

  1. Развернуть instance.yaml и дождаться его завершения.
  2. Обратите внимание, что он выводит значения (т.е. id) - обычно выполняется программно, а не вручную.
  3. Развернуть eip.yaml и передать идентификатор экземпляра в качестве входного параметра.

Вложение

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

Например, давайте снова будем использовать instance.yaml и eip.yaml. Но на этот раз eip.yaml будет родительским, а instance.yaml - дочерним. Также eip.yaml не принимает никаких входных параметров, но instance.yaml выводит свой идентификатор экземпляра (не экспорт)

В этом случае, чтобы развернуть их, вы делаете следующее:

  1. Загрузите дочерний шаблон (eip.yaml) в s3
  2. В eip.yaml создайте стек дочерних экземпляров, используя AWS :: CloudFormation :: Stack и URL-адрес s3 из шага 1.

Таким образом, eip.yaml сможет получить доступ к идентификатору экземпляра из выходных данных вложенного стека, используя GetAtt.

Перекрестные ссылки

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

Например, давайте использовать снова instance.yaml и eip.yaml. instance.yaml собирается экспортировать свой вывод (идентификатор-экземпляра). Чтобы использовать идентификатор экземпляра eip.yaml, необходимо использовать ImportValue в своем шаблоне без каких-либо входных параметров или вложенных стеков.

В этом случае, чтобы развернуть их, вы выполните следующее:

  1. Разверните instance.yaml и дождитесь его завершения.
  2. Разверните eip.yaml, который будет импортировать идентификатор экземпляра.

Хотя перекрестные ссылки кажутся очень полезными, у него есть одна серьезная проблема, заключающаяся в том, что очень сложно обновить или удалить перекрестные ссылки стеки :

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

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

Когда какой использовать?

Используйте перекрестные ссылки (экспортированные значения), когда у вас есть глобальные ресурсы , которые будут совместно использоваться много стеков в данном регионе и аккаунте. Также они не должны часто меняться, так как их сложно изменить. Типичные примеры: глобальная корзина для централизованного расположения журналов, VP C.

Используйте вложенный стек (не экспортируемые выходные данные), когда у вас есть некоторые общие компоненты , которые вы часто развертываете, но каждый раз они могут быть немного разными. Примеры: ALB, экземпляр хоста-бастиона, конечная точка интерфейса vp c.

Наконец, связанные стеки (не экспортируемые выходные данные) полезны для разработки слабосвязанных шаблонов, где вы можете смешивать и сопоставлять шаблоны на основе новых требований.

...