通过托盘获取 ec2 dns 名称
Posted
技术标签:
【中文标题】通过托盘获取 ec2 dns 名称【英文标题】:Get ec2 dns name via pallet 【发布时间】:2013-05-05 06:09:40 【问题描述】:我使用托盘返回一个 ec2 节点列表。我想获取这些的 dns 名称。我看到在 jclouds 中有一个 dnsName 方法,但我看不出有办法访问它以在 clojure 中与托盘一起使用。这可能吗?
详情
我正在尝试对storm-deploy 项目进行修改以使用dns 名称,以便安全组正常工作。具体来说,我正在尝试编写类似此函数的内容以在代码中使用:
(defn zookeeper-dns-names [compute name]
(let [running-nodes (filter running?
(map (partial jclouds-node->node compute) (nodes-in-group compute (str "zookeeper-" name))))]
(map dns-name running-nodes)))
【问题讨论】:
0.7,虽然查看文档似乎在 0.8 中不支持此功能 它只是不在文档中。我的答案在 0.8 中运行(我还没有在 0.7 中测试过),0.8 测试版肯定可以供日常使用了。 【参考方案1】:我在我们的托盘部署器中使用它,它通过公共 ip 派生 dns 名称:
(defn get-aws-name []
(let [ip (-> (target-node) bean :publicAddresses first)]
(str "ec2-" (apply str (replace \. \- ip)) ".compute-1.amazonaws.com")))
私有 IP 也可以通过安全组工作:
(defn ips-in-group [group-name public-or-private]
"Sequence of the first public IP from each node in the group"
(->> (nodes-in-group group-name)
(map bean)
(map public-or-private)
(map first))
(defn public-ips-in-group
"Sequence of the first public IP from each node in the group"
[group-name]
(ips-in-group group-name :publicAddresses))
(defn private-ips-in-group
"Sequence of the first public IP from each node in the group"
[group-name]
(ips-in-group group-name :privateAddresses))
【讨论】:
谢谢。我最终使用私有 ips 方法解决了这个问题。以上是关于通过托盘获取 ec2 dns 名称的主要内容,如果未能解决你的问题,请参考以下文章
从 JAVA API 获取 Amazon EC2 实例的公共 DNS
如何将我的 DreamHost DNS 注册网站指向我的 EC2 实例?
将 AWS Route 53 DNS 记录静态链接到 EC2 实例