我有一个使用OpsWorks启动中央服务器实例的CloudFormation模板(所以我定义了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不同(即使它创build了EC2实例),因此模板validation失败:
模板validation错误:模板错误:资源MyServerInstance不支持Fn :: GetAtt中的属性typesPublicDnsName
有没有另外一种方法来获取启动的OpsWorks实例的地址? 或者是否有可能从AWS :: OpsWorks :: Instance中获取AWS :: EC2 :: Instance,以便我可以请求它为PublicDnsName?
这不可能通过CloudFormation,你必须在OpsWorks层上使用一本食谱。
我使用这个: https : //github.com/opscode-cookbooks/aws 。
你也可以安装aws-cli和一个Chef食谱,并从那里parsing细节(我使用这种方法将一个EC2引导到VPC的NAT中)。 这假设你正在运行“本地”,或者你需要从另一台机器上运行…