0

我最近开始使用 AWS,并阅读了它的文档。

根据我的需要,我必须从我的 node.js 代码部署 EC2 实例,等待它们被添加到我的 ECS 集群(通过使用正确的 Arn 实例配置文件),然后在最后一个启动的 EC2 实例上启动一个任务。

但是,实际上,我没有找到在 EC2 启动时定义任务的方法,因为我必须用我的 nodejs 中的变量覆盖 docker 命令并执行一些其他任务。因此,我必须等待 EC2 添加到 ECS 集群,然后再尝试使用我的参数和来自容器实例 Id 的 Arn 启动任务(但我无法从 listContainerInstances() 中获取它)。

有没有办法轻松实现这一目标?(实际上我尝试使用 setTimeout 循环,直到 listContainerInstances() 返回新的东西,但我认为这根本不是一个好习惯,而且我的代码看起来有点难看)。

4

4 回答 4

2

Nodejs SDK 中的 EC2 和 ECS 类都有 waitFor 允许您循环直到满足特定条件。它每 6 秒循环一次,最多循环 100 次。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html#waitFor-property

于 2016-08-25T15:14:28.460 回答
0

您是否尝试过在启动时使用用户数据向您的 EC2 发送命令?例如,我将以下用户数据传递到我的 ECS 容器实例中,以便它们自行更新并附加到集群:

#!/bin/bash
yum update -y
echo ECS_CLUSTER=<my cluster name> >> /etc/ecs/ecs.config

如果您不使用自动缩放组,您还可以在此处使用名称标记您的实例,等等。

您也应该能够在此处运行自己的代码,然后您的容器实例将在连接到集群时准备就绪。

于 2016-05-06T21:13:01.697 回答
0

您是如何加入 ASG 的?

最好的办法是调用describeAutoScalingInstances并获取 instanceIds。将您的实例设置为启动,通过获取上一次调用中没有的实例来找到它的 instanceId。然后设置一个具有最大尝试次数和睡眠超时的循环以等待它准备好。您必须打电话listContainerInstances给您的集群才能知道它何时准备就绪。

准备就绪后,您将希望在其上运行任务并覆盖那里的命令。您可以通过 SDK 和 CLI 将任务固定到特定实例,但不能在 UI 中

你试过什么?

于 2016-05-06T21:14:08.463 回答
-1

您应该使用节点 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 之类的库来同步等待。

于 2016-05-13T20:37:45.357 回答