我在安全组中有一组 EC2 实例。我正在寻找一种从命令行获取其公共 DNS 地址列表的方法。我有一个使用 RSYNC 的脚本来确保一组文件在这些服务器上更新。它们位于弹性负载平衡器中,并且组中的服务器数量变化很大,因此我不想手动维护列表。我想避免使用 AWK 或 SED 从 ec2-describes-instances 中提取信息,我更喜欢直接使用 API。有人有什么好的建议吗?:)
答案1
命令行输出格式非常静态,您可以控制何时更改,因为工具包就在您手中。我将 api 工具的副本与我编写的任何使用它的软件一起保存在版本库中,这样它们在给定版本下始终可以协同工作。
如果您决定采用这种方式,这里有一个简单的方法可以获取所有运行的公共 DNS 地址。显然,您也可以为特定组请求此地址。
ec2-describe-instances | grep 'INSTANCE' | cut -f 4
答案2
如果有人正在寻找解决方案,我最终使用了亚马逊的 PHP SDK。它允许您按许多不同的标准筛选结果。我只是做了一个描述实例请求,按特定的安全组进行筛选(其中 security-group-name 是您要搜索的那个!)
// Get the response from a call to the DescribeInstances operation.
$response = $ec2->describe_instances(array('Filter' => array(array('Name' => 'group-name
', 'Value' => 'security-group-name'))));
答案3
ec2din -F instance-state-name=running | grep -e TAG -e INSTANCE | sed -e 's/TAG//' | awk '{print $4}'
您还可以为所需的安全组添加过滤器,添加 -F group-name=your-group