繁体   English   中英

使用适用于Node.js的AWS开发工具包,如何等待EC2实例添加到ECS集群中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM