我怎样才能让Puppet生成的configuration在我的CloudFormation堆栈中包含其他ec2实例的内部主机名?

我有一个由AWS CloudFormation生成的堆栈,其中包含一个EC2实例(运行Ubuntu 14.04)和一个RDS(数据库)实例。 他们都在一个VPC内,其中包括一个木偶大师(不是云形成堆栈的一部分):

----------------- VPC -------------------- +-----+ +-----+ +---------------+ | EC2 | <---> | RDS | | Puppet master | +-----+ +-----+ +---------------+ 

我想伪装EC2节点,为Web服务器和包括数据库连接信息的应用程序编写一个configuration,其中一部分是RDS实例的内部主机名。

问题是,如果需要知道RDS节点的内部主机名,我该如何让puppetmaster为应用程序configuration编译模板。

我对这些技术大部分都是新手,特别是CloudFormation和Puppet。 到目前为止,我已经想到了一些解决scheme,但想要一些指导,并想知道我是否错过了一些东西。

  • 使用CloudFormation模板中的UserData使其可用于EC2实例,以便将其添加到EC2 puppet代理上的Facter。 这似乎是错误的EC2节点正在向另一台机器的puppet报告。
  • 在木偶大师上使用EC2 API来检查VPC中的RDS节点,并find正确的(通过标签也许?),但我不知道如何让Puppet调用EC2的API,并从它插入一个值到一个模板

如果您可以创build将打印名称的脚本(可能通过调用AWS CLI),则可以使用generate函数在Puppet清单和模板中使用该名称。

你可以在你的site.pp文件中添加这个调用。

 $rds_internal_name = generate('/usr/local/sbin/get-rds-internal-name')