【问题标题】:control moto's state transitions of EC2 instances?控制 moto 的 EC2 实例状态转换?
【发布时间】:2022-02-04 13:02:39
【问题描述】:

为了测试我的应用程序是否正确处理状态转换,我想控制 moto 的假 EC2 实例的生命周期:

与其让实例立即从running 开始,不如让它们从pending 开始,让我确认一些事情,然后将它们显式转换到running

与此相关,当实例切换到 running 时,我希望在测试中触发一些操作。

这有可能吗?我在 moto 的代码中找到了 InstanceBackend —— 有没有办法让用户挂钩或覆盖那里的方法?

【问题讨论】:

    标签: moto


    【解决方案1】:

    a few feature requests 用于对转换周期进行更多控制,但尚未实施。

    可以使用内部API直接设置状态,如您所说,使用InstanceBackend

    如果你只有一个实例,可以使用如下代码:

    ec2_backend = moto.ec2.models.ec2_backends[my-region]
    list(ec2_backend.reservations.values())[0].instances[0].state = "..."
    

    如果您有多个预订,您可以像这样使用预订 ID:

    ec2_backend.reservations["r-7df1884b"].instances[0].state = "..."
    

    请注意,AWS 和 Moto 都使用两个属性来跟踪状态,statestate_code。仅更新 state 可能会导致未定义的行为,因此您可能需要更新两者以确保它们同步:

    ec2_backend.reservations["r-7df1884b"].instances[0].state_code = ..
    

    请注意,这是一个内部 API,因此此数据结构的更改可能会在没有警告的情况下发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2020-01-25
      • 1970-01-01
      • 2013-07-21
      相关资源
      最近更新 更多