[英]Using AWS SDK for Node.js, how to wait for EC2 instance being added to ECS cluster?
我最近开始使用AWS,并阅读了其文档。
出于我的需要,我必须从node.js代码部署EC2实例,等待它们添加到我的ECS集群中(通过使用正确的Arn实例配置文件),然后在最后一个启动的EC2实例上启动任务。
但是,实际上,我没有找到在EC2开始时定义任务的方法,因为我必须用nodejs中的变量覆盖docker命令并执行其他任务。 因此,我必须等待被添加到ECS集群中的EC2才能尝试使用我的参数和容器实例ID的Arn来启动startTask()(但直到从listContainerInstances()才能获取它)。
有没有一种方法可以轻松实现这一目标? (实际上,我尝试使用setTimeout循环,直到listContainerInstances()返回新的内容,但我认为这根本不是一个好习惯,并且我的代码看起来有些丑陋)。
Nodejs SDK中的EC2和ECS类都具有waitFor,允许您循环直到满足特定条件。 每6秒钟循环一次,最多100次。
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html#waitFor-property
您是否尝试过使用用户数据在启动时将命令发送到EC2? 例如,我将以下用户数据传递到我的ECS容器实例中,以便它们进行自我更新并附加到集群:
#!/bin/bash
yum update -y
echo ECS_CLUSTER=<my cluster name> >> /etc/ecs/ecs.config
如果您不使用自动缩放组,则还可以在此处使用名称标记实例,等等。
您也应该能够在这里运行自己的代码,然后容器实例将在附加到集群时准备就绪。
您如何开始进入ASG?
最好的选择是打电话给describeAutoScalingInstances
并获取instanceIds。 将您的实例设置为启动,通过获取不在上一个调用中的实例来找到它的instanceId。 然后设置一个具有最大尝试次数和睡眠超时的循环,以等待其准备就绪。 您必须使用listContainerInstances
进行调用,以使集群知道何时准备就绪。
准备就绪后,您将要在其上运行任务并在此处覆盖命令。 您可以通过SDK和CLI将任务固定到特定实例,但不能在UI中固定
你尝试了什么?
您应该使用节点js ecs api describeClusters。
var params = {
clusters: [
'STRING_VALUE',
/* more items */
]
};
ecs.describeClusters(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
响应将在属性“ registeredContainerInstancesCount”中返回已注册实例的计数。在启动ec2实例之前等待实例计数,直到计数增加1。您可以使用像deasync之类的库来同步等待。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.