2011-11-21 107 views
2

我使用的.NET SDK,并试图创建后立即标记一个新的实例后 - RunInstances后立即CreateTags。AWS,EC2 - CreateTags RunInstances

大多数它只是工作时间,但偶尔我会得到一个错误,该实例ID是无效的(在控制台随后检查或再次尝试,它是有效的)。我明白,与SQS,SDB等他们是'最终一致',它可能是必要的重试电话(尽管我相信SDK为你做到这一点) - 但一般来说,创建实例我没有认为这是必要的。更重要的是,我认为这不是一件好事;寻找一个特定的例外,并重试几乎无限,直到它的工作。

如果创建一个实例,并标记它必须进入一个分布式工作流与轮询和重试多余的集中式系统的过程中,我认为这是一个糟糕的情况!

我似乎无法找到这个文档中任何相关信息。我想如果我调用RunInstances并获得带有实例ID的响应,那么该实例ID应该立即对标记有效。

我对可能的解决方案的想法至今:几秒钟RunInstances(坏,任意延迟)

    • 固定延迟立即尝试,否则,延迟5秒,然后重试,到“N”次(OK,但任意)
    • 创建分布式工作流处理的任何链接的API调用这样,就需要EC2实例的中央多余的农场管理是可靠的(坏,大量过度设计)
    • 寻找一些其他的解释,我可以打电话另一种API方法或设置一些请求,要么打电话让它工作

    有没有其他人经历过这方面的知识,在该领域等?

    (我在AWS社区论坛线程这里,还没有:https://forums.aws.amazon.com/thread.jspa?threadID=80489&tstart=0

  • 回答

    2

    恐怕你与你的第一个选项是正确的 - 它需要一个有限的,可变的时间调用RunInstances后在为实例分配预留身份之前,它开始运行,并可用于进一步调用该实例。

    我的控制软件在启动线程上只休眠5秒钟间隔,直到实例进入'Running'状态,此时我可以开始发出其他呼叫。

    +0

    好吧,但只是为了确认 - 呼叫立即返回一个实例ID,但一会儿,该实例ID是无效和无用的? (我不需要实例正在运行,我只想标记它) –

    +0

    您获得的InstanceID是有效的,因为它是已分配给您的新实例的真实ID。然而,Xen Hipervisor在后台异步构建虚拟机并将其设置为正在运行,因此,在给予该ID之后的很短一段时间内,该实例还没有实际存在,只要涉及API的其余部分并且调用到其他使用该ID的方法失败。 –

    +0

    好吧,虽然我有点困惑:系统必须在某处记录实例ID *,例如跟踪它将要使用的AMI。 CreateTags会通过实例ID存储标签信息,所以我无法想象为什么标签与VM的状态,管理程序或其他任何东西有关。我不认为你有什么可以引用这一切,我希望找到一些文档? –

    1

    加标签API是在Xen管理程序API的标记功能的基础上实现的,即see the tags field of a VM in the XenAPI。相比之下,实例ID对应于AWS管理基础架构数据库中的条目。因此,一个实例可以在实例ID已被返回给调用者之后排队创建VM。这种方法的副作用是某些标记无法创建,因为它们是为AWS基础结构保留的。

    由于@Jonners指出,标签是不依赖于虚拟机的唯一API。例如。停止一个实例。然而,“管理程序”更可能避免商标争议,因为该术语被NIST接受,例如Guide to Security for Full Virtualization Technologies,而“hipervisor”只归于IBM文档。