控制 EC2 实例的 moto 状态转换?
control moto's state transitions of EC2 instances?
为了测试我的应用程序是否正确处理状态转换,我想控制 moto 的假 EC2 实例的生命周期:
与其让实例在 running
中立即启动,不如让它们在 pending
中启动会更好,让我确认一些事情,然后明确地将它们转换为 running
.
相关地,当实例切换到 running
时,我想在测试中触发一些操作。
这有可能吗?我在 moto 的代码中找到了 InstanceBackend
-- 用户是否可以挂钩或覆盖那里的方法?
有 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 都使用两个属性来跟踪状态,state
和 state_code
。仅更新 state
可能会导致未定义的行为,因此您可能需要更新两者以确保它们同步:
ec2_backend.reservations["r-7df1884b"].instances[0].state_code = ..
请注意,这是内部 API,因此可能会在没有警告的情况下更改此数据结构。
为了测试我的应用程序是否正确处理状态转换,我想控制 moto 的假 EC2 实例的生命周期:
与其让实例在 running
中立即启动,不如让它们在 pending
中启动会更好,让我确认一些事情,然后明确地将它们转换为 running
.
相关地,当实例切换到 running
时,我想在测试中触发一些操作。
这有可能吗?我在 moto 的代码中找到了 InstanceBackend
-- 用户是否可以挂钩或覆盖那里的方法?
有 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 都使用两个属性来跟踪状态,state
和 state_code
。仅更新 state
可能会导致未定义的行为,因此您可能需要更新两者以确保它们同步:
ec2_backend.reservations["r-7df1884b"].instances[0].state_code = ..
请注意,这是内部 API,因此可能会在没有警告的情况下更改此数据结构。