1

У меня есть сетевой стек, который содержит InternetGateway, который подключен к VPC через элемент VPCGatewayAttachment.Импорт VPCGatewayAttachment из другого шаблона

У меня есть стек приложений, где У меня есть EIP, и он должен Положитесь на VPCGatewayAttachment, который в настоящее время выглядит следующим образом:

"MyEIP": { 
    "Type": "AWS::EC2::EIP", 
    "DependsOn": [ 
    { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackName}-GatewayAttachment" } } 
    ], 
} 

Однако я получаю ошибку шаблон, который говорит, что каждое значение DependsOn должно быть строкой , Итак, как я могу импортировать это значение?

+0

Вы экспортировали его в стек, который вы пытаетесь импортировать? – Darek

ответ

0

Нет необходимости использовать атрибут DependsOn на ресурсе AWS::EC2::EIP в стеке приложений, поскольку ресурс AWS::EC2::VPCGatewayAttachment создается в отдельном сетевом стеке. Это отмечено в EIP ресурса Domain собственности:

Примечание

Если вы определяете Elastic IP-адрес и связать его с VPC , который определен в том же шаблоне, вы должны объявить зависимость от приложение VPC-gateway с использованием атрибута DependsOn на этом ресурсе.

Когда VPC определен в отдельном шаблоне, вам не нужно явно объявлять какую-либо зависимость. Пока стек приложения удаляется до сетевого стека, EIP будет удален до присоединения VPC-шлюза.

В общем, объявление DependsOn между стеками никогда не требуется. Поскольку вы не можете удалить стек, если другой стек ссылается на один из его выходов, использование Fn::ImportValue для создания ссылки на межсетевой столбец создает зависимость, которую стек, содержащий ссылку, должен быть удален до ссылки на стек.

+0

это может быть необязательно, но причина этого не срабатывает, так как DependsOn требует строку, а не некоторую функцию;) – gsaslis

+0

Да, вопрос уже признал, что каждое значение DependsOn должно быть строкой. Было задано вопрос: «Как я могу импортировать эту ценность?» (мой ответ: вам это не нужно, и это никогда не нужно, и вот почему). – wjordan

-2

У вас есть скобки вокруг вашего оператора импорта. Который в JSON означает, что объект будет массивом, а не строкой. Удалите эти скобки, и вы преодолеете эту ошибку.

"MyEIP": { 
    "Type": "AWS::EC2::EIP", 
    "DependsOn": { "Fn::ImportValue": { "Fn::Sub": "${NetworkStackName}-GatewayAttachment" } } 
} 
+0

Зависит от принимает строку и список строк, так что не проблема – masterforker

+0

@ Danlee, какое сообщение об ошибке вы получаете? –

-1

Как говорят документы (и вы прочитали), атрибут DependsOn принимает строку (или строки списка).

Это означало буквально, в том, что вы не предназначены для использования CloudFormation Fn или Ref функции для вставки некоторого значения там, а вы просто вставить имя CloudFormation ресурса, так же, как у вас есть в вашем шаблон.

Итак, ваш шаблон должен читать что-то вроде:

"MyEIP": { 
    "Type": "AWS::EC2::EIP", 
    "DependsOn": [ 
    "MyGatewayAttachment" 
    ], 
} 

, где MyGatewayAttachment является имя соответствующего CloudFormation ресурса в шаблоне.

Если вы посмотрите еще на examples на официальные документы, вы увидите, что это так, как это делается во всех примерах.

+0

хотел бы, чтобы downvoter прокомментировал почему? – gsaslis

Смежные вопросы