【问题标题】:AWS - Get instance id w/o having to SSH inAWS - 无需 SSH 即可获取实例 ID
【发布时间】:2013-07-02 21:28:27
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudformation


    【解决方案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 方法返回匹配堆栈的数组。应该只有一个,但你可以检查一下。

    【讨论】:

    • 可以在创建 cloudformation 堆栈后添加输出吗?还是通过 API?
    • 不,输出是在堆栈时创建的。如果您想发现有关正在运行的堆栈的其他信息,您可以获取其所有资源并遍历它们。
    • 文档链接为 +1
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多