当env降级时,用户如何aws EventBridge重新启动实例



我正试图使用事件桥来重新启动我降级的ec2实例,每当beanstall变为警告状态时,在目标位置可以选择调用lambda函数或使用api重新启动实例,我的疑问是如何获得降级实例的id(考虑到我的环境有2个实例(。

当Elastic Beanstalk调度一个健康状态更改事件时,它看起来像:

{ 
"version":"0",
"id":"1234a678-1b23-c123-12fd3f456e78",
"detail-type":"Health status change",
"source":"aws.elasticbeanstalk",
"account":"111122223333",
"time":"2020-11-03T00:34:48Z",
"region":"us-east-1",
"resources":[
"arn:was:elasticbeanstalk:us-east-1:111122223333:environment/myApplication/myEnvironment"
],
"detail":{
"Status":"Environment health changed",
"EventDate":1604363687870,
"ApplicationName":"myApplication",
"Message":"Environment health has transitioned from Pending to Ok. Initialization completed 1 second ago and took 2 minutes.",
"EnvironmentName":"myEnvironment",
"Severity":"INFO"
}
}

在您的AWS Lambda中,您可以使用任何AWS Elastic Beanstalk命令,使用您选择的语言的AWS SDK

使用用于Elastic Beanstalk的AWS JavaScript SDK,您可以使用restartAppServer:重新启动环境

var params = {
EnvironmentName: event.detail.EnvironmentName // based on the sample above
};
elasticbeanstalk.restartAppServer(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else     console.log(data);           // successful response
});

在上面的示例中,我们将触发环境中所有实例的重新启动。

要针对特定实例,可以使用describe instances health,在AWS JavaScript SDK中重命名为describeInstancesHealth

var params = {
AttributeNames: ["HealthStatus"],
EnvironmentName: event.detail.EnvironmentName,
};
elasticbeanstalk.describeInstancesHealth(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else     console.log(data);           // successful response
});

根据它的响应,您可以过滤不正常的实例,并通过调用EC2 APIrebootInstances:使用实例id触发重新启动

var params = {
InstanceIds: [
"i-1234567890abcdef5"
]
};
ec2.rebootInstances(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else     console.log(data);           // successful response
});

最新更新