有谁知道一种方法或是否有人设计了一个聪明的解决方法来将回调/挂钩放入 Amazon API (http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/query-apis.html) 以便执行操作像创建实例一样,当实例处于运行状态时,可以简单地通过回调通知?
我在想我可以在 node.js 中编写一个循环来简单地检查所需的状态并最终在一定数量的请求后超时,但我想听听更好的编程方法:)
有谁知道一种方法或是否有人设计了一个聪明的解决方法来将回调/挂钩放入 Amazon API (http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/query-apis.html) 以便执行操作像创建实例一样,当实例处于运行状态时,可以简单地通过回调通知?
我在想我可以在 node.js 中编写一个循环来简单地检查所需的状态并最终在一定数量的请求后超时,但我想听听更好的编程方法:)
除非 AWS API 支持某种通知端点(我对 API 不是很熟悉),否则您可能会陷入轮询。但是,您可以使用anEventEmitter
将其隐藏在公开回调的巧妙 API 后面。伪代码:
// aws_server.js
var EventEmitter = require('events').EventEmitter;
var util = require('util');
function AwsServer(some_data) {
this.data = some_data;
EventEmitter.call(this);
};
util.inherits(AwsServer, EventEmitter);
AwsServer.prototype.createInstance = function() {
// Do something with an API to create an EC2 instance
console.log("Creating instance, data:", this.data);
// Here, you would begin polling for state changes, etc. waiting for
// the server to change state. We will simulate this with a setTimeout call.
setTimeout(function() {
this.emit('running');
}.bind(this), 3000);
};
module.exports = AwsServer;
// somewhere_else.js
var AwsServer = require('./aws_server')
var newServer = new AwsServer('some_data');
newServer.on('running', function() {
console.log('New instance is running');
});
newServer.createInstance();
最好的办法是在服务器 init.d 上添加一个 shell 脚本,该脚本将在服务器停止或启动时运行。
对于这个问题可能没用,但其他以编程方式检测实例是否打开的方法是使用 Amazon 的 EC2 shell 工具:
ec2-describe-instance-status <ec2 instance id>
如此处所述。如果机器没有运行,它将返回空白,如果是,则返回有关它的数据。