AWS CloudFormation: как вывести PublicIP машины?


Я написал шаблон CloudFormation, который создает хост Linux docker.

Я хочу отобразить PublicIP машины в разделе "выходы".

Это соответствующая часть шаблона:

"Outputs" : {
    "ServerAddress" : {
      "Value" : { "Fn::GetAtt" : [ "Server", "PublicDnsName" ] },
      "Description" : "Server Domain Name"
    },
    "SecurityGroup" : {
      "Value" : { "Fn::GetAtt" : [ "ServerSecurityGroup", "GroupId" ] },
      "Description" : "Server Security Group Id"
    },
    "PublicIp" : {
      "Value" : { "Fn::GetAtt" : [ "ServerPublicIp", "PublicIp" ]},
      "Description" : "Server's PublicIp Address"
    },
  }

Я прочитал в официальной документации AWS об использовании "Fn:: GetAtt" и попытался реализовать его в своем шаблоне, но при попытке создать стек я получаю следующую ошибку:

Error
Template validation error: Template error: instance of Fn::GetAtt references undefined resource ServerPublicIp

Насколько я понимаю, первая часть в строке GetAtt это логическое имя (которое я могу выбрать?) и второй-это реальный атрибут, как показано на приведенной выше ссылке.

Итак, мой вопрос заключается в том, как отобразить PublicIP сервера в разделе Outputs?

1 3

1 ответ:

Предполагая, что у вас есть ресурс экземпляра EC2 в вашем шаблоне с именем Server:

"Server" : {
    "Type" : "AWS::EC2::Instance",
    "Properties" : {
    }
}

Вы выводите публичный IP-адрес, ссылающийся на его имя ресурса:

"Outputs" : {
    "PublicIp" : {
      "Value" : { "Fn::GetAtt" : [ "Server", "PublicIp" ]},
      "Description" : "Server's PublicIp Address"
    }
}