0

我有一堆使用 CloudFormation 启动的 EC2 实例。我需要以编程方式获取这些主机中的每一个的 AWS instance_id,并且理想情况下希望这样做,而不必 ssh 进入每个主机并收集该信息。是否有 AWS API 可以为我提供此功能?谢谢!

4

1 回答 1

1

有几种方法。我最喜欢的是在您的 CloudFormation 模板中放置一个输出部分,其中包含模板创建的每个 EC2 实例的条目。然后,您可以在创建堆栈时从程序输出(如果您使用命令行工具创建堆栈)或使用 CloudFormation API 获取这些结果。

您还可以使用 CloudFormation API 从堆栈中获取所有已创建资源的列表,或使用 EC2 API 获取区域中所有实例的列表,然后过滤它们,可能按启动时间进行过滤。

假设您的 CloudFormation 堆栈创建了名为 Tom and Jerry 的 EC2 实例。然后,您将添加一个输出部分,如下所示:

"Outputs": {
    "TomId": {
        "Description": "Tom's instance id",
        "Value": {"Ref": "Tom"}
    },
    "JerryId": {
        "Description": "Jerry's instance id",
        "Value": {"Ref": "Jerry"}
    }
}

如果您从控制台创建堆栈,则会有一个堆栈输出选项卡,其中将包含一个包含两个实例 ID 的表。大多数用于创建堆栈的命令行工具也将通过某种方式包含输出。

但是您询问了如何以编程方式进行操作。这是 Python 中的一个示例,使用了出色的boto库:

import boto.cloudformation
cf = boto.cloudformation.connect_to_region('us-east-1', aws_access_key_id='MyAccessKey', aws_secret_access_key='MySecretKey')
stacks = cf.describe_stacks('MyStackName')
stack = stacks[0]
for output in stack.outputs:
    print "%s: %s" % (output.key, output.value)

请注意, describe_stacks 方法返回匹配堆栈的数组。应该只有一个,但你可以检查一下。

于 2013-07-02T11:38:20.150 回答