我有一个由 AWS CloudFormation 生成的堆栈,其中包括一个 EC2 实例(运行 Ubuntu 14.04)和一个 RDS(数据库)实例。它们都在 VPC 内,其中包括一个 Puppet Master(不是云形成堆栈的一部分):
----------------- VPC --------------------
+-----+ +-----+ +---------------+
| EC2 | <---> | RDS | | Puppet master |
+-----+ +-----+ +---------------+
我想将 EC2 节点傀儡化,为 Web 服务器和应用程序编写一个配置,包括 DB 连接信息,其中一部分是 RDS 实例的内部主机名。
问题是,如果 puppetmaster 需要知道 RDS 节点的内部主机名,我该如何让它编译应用程序配置的模板。
我对大多数这些技术都很陌生,尤其是 CloudFormation 和 Puppet。到目前为止,我已经想到了一些解决方案,但需要一些指导,并想知道我是否错过了什么。
- 使用 CloudFormation 模板中的 UserData 使其可用于 EC2 实例,以便它可以将其添加到 EC2 puppet 代理上的 Facter。这似乎是错误的,因为 EC2 节点正在向 puppet 报告有关另一台机器的信息。
- 使用 Puppet Master 上的 EC2 API 检查 VPC 中的 RDS 节点并找到正确的节点(也许通过标签?)但我不确定如何让 Puppet 调用 EC2 API 并将其中的值插入到模板中
答案1
如果您可以创建一个脚本(在 Puppet Master 上)来打印名称(可能通过调用 AWS CLI),则可以使用生成函数在 Puppet 清单和模板中使用该名称。
您可以直接在文件中添加此调用site.pp
。
$rds_internal_name = generate('/usr/local/sbin/get-rds-internal-name')