我有一个 CloudFormation 模板,它使用 OpsWorks 启动中央服务器实例(因此我定义了 OpsWorks::App、OpsWorks::Instance、OpsWorks::Layer 和 OpsWorks::Stack)。在 CF 模板的其他地方,它为从属节点启动 EC2 实例,该从属节点需要知道中央服务器的 IP 地址/DNS 名称,以便它启动与服务器的通信。Opsworks 服务器获得一个弹性 IP,但不是我明确提供的,而是 OpsWorks 层将 AutoAssignElasticIps 设置为 true。
如果是一个引用另一个 EC2 实例,我只需使用 { "Fn::GetAtt": [ "MyServerInstance", "PublicDnsName" ] } 来获取地址。但是 AWS::OpsWorks::Instance 与 AWS::EC2::Instance 不同(即使它确实创建了一个 EC2 实例),因此模板验证失败,并显示:
模板验证错误:模板错误:资源 MyServerInstance 不支持 Fn::GetAtt 中的属性类型 PublicDnsName
还有其他方法可以获取已启动的 OpsWorks 实例的地址吗?或者是否可以从 AWS::OpsWorks::Instance 获取 AWS::EC2::Instance,然后我可以向它索取 PublicDnsName?
答案1
通过 CloudFormation 无法实现这一点,您必须在 OpsWorks 层上使用手册。
答案2
您还可以安装 aws-cli 和 Chef 配方并从中解析详细信息(我使用此方法将 EC2 引导到 VPC 的 NAT 中)。这假设您正在“本地”运行,或者您需要从另一台机器运行...