有没有人知道某种方式或有没有人设计出一个聪明的解决方法来将回调/挂钩放入亚马逊API(http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/query-apis.html)这样的对于像create instance这样的动作,当实例处于运行状态时,可以通过回调通知一个人吗?
我在想我可以在node.js中编写一个循环,它只是检查所需的状态,并最终在一定数量的请求之后超时,但我希望听到更好的编程方法:)
答案 0 :(得分:1)
除非AWS API支持某种通知端点(我对API不是很熟悉),否则您可能会遇到轮询问题。但是,您可以使用an EventEmitter
隐藏一个暴露回调的聪明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();
答案 1 :(得分:1)
您最好的选择是在服务器init.d上添加一个shell脚本,该脚本将在服务器停止或启动时运行。
对于这个问题可能没用,但其他以编程方式检测实例是否使用亚马逊的EC2 shell工具的方法:
ec2-describe-instance-status <ec2 instance id>
如上所述here。如果机器没有运行,它将返回空白,如果是,则返回数据。