2012-06-12 5 views
1

누군가가 방법을 알고 있거나 Amazon API에 콜백/후크를 배치하는 방법을 고안 한 사람이 있습니까 (http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/query- apis.html) 인스턴스 생성과 같은 액션의 경우 인스턴스가 실행 상태에있을 때 콜백을 통해 간단히 알림을받을 수 있습니까?AWS API에 대한 콜백 후크

나는 단순히 원하는 상태에 대해 결국 요청의 특정 # 후 timesout 확인하는 Node.js를에서 루프를 쓸 수 있다고 생각 해요하지만 난 더 나은 프로그래밍 방법 :

답변

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(); 
+0

setTimeout을 실험 할 때, 나는 한 번만 실행된다는 것을 깨달았고 setInterval을 사용하여 원하는 '실행 중'상태가 확인되면 중지 방법을 생각할 수 없었습니다. 이제 각 setTimeout을 원하는 '실행 중'상태에 도달 할 때까지 다른 하나씩 시작합니다. 마지막으로 실행되는 콜백이 진행되면서 ... 위에서 설명한 내용입니까? 차이점은 콜백이 전달되고 실행되는 대신 이벤트가 방출된다는 것입니다 ... 맞습니까? – pulkitsinghal

+0

글쎄, 내 예제에서 setTimeout은 약간의 시간을 시뮬레이션하고, EventEmitter 이벤트를 내보내고들을 수 있음을 보여 주기만하면되었다. 그러나 설문 조사 방법에 관한 한 올바른 방향으로 가고있을 것입니다. 필자는 개인적으로 setInterval 대신에 다른 setTimeout을 호출하는 setTimeout을 선호합니다. 함수 내부의 작업이 해당 간격의 타이머보다 오래 걸리는 경우에 대비합니다. –

+0

안녕하세요. Brandon, AWS API 또는 알림의 후크에 대해 아무도 응답하지 않았는지 확인하기 위해 조금만 기다려도 괜찮습니까? – pulkitsinghal

1

가장 좋은 방법은 서버가 중지되거나 시작될 때마다 실행되는 서버있는 init.d에 쉘 스크립트를 추가하는 것입니다.

이 질문하지만 프로그램에서 인스턴스가 아마존의 EC2 쉘 도구를 사용하는 것입니다 여부를 검출하는 다른 방법에 대한 아마 쓸모 :

ec2-describe-instance-status <ec2 instance id>

으로는 here을 설명했다. 컴퓨터가 실행되고 있지 않으면 공백으로 돌아가고, 그렇지 않으면 공백으로 돌아갑니다.

+0

나는 init.d 아이디어를 다시보고하는 인스턴스를 좋아하지만, devops에 대한 일종의 동적 URL을 다시보고하겠습니까? – pulkitsinghal

+0

예, 공식 AWS 후크 또는 자체 서버에서 온 것인지에 관계없이 동일한 작업을 수행해야합니다. 이와 같은 일에 대해 마이크로 인스턴스를 24/7까지 올릴 수 있습니다 (비용은 약 $ 15/월입니다). 또한 Pingdom (서비스 비용 지불) 및 Nagios (오픈 소스)를 사용하여 모든 시스템의 가동 시간을 감지합니다. –