通过托盘获取 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 实例

通过计算机名称C#AD获取DNS名称

带有 PHP SDK 的 AWS EC2 - 等到实例具有公共 DNS 名称

使用 Route 53 服务将 DNS 名称分配给 EC2 实例的最简单方法是啥?