给定 SQS 的工作量,如何创建用于自动缩放 EC2 实例的 bash 脚本?

How to create a bash script for autoscaling EC2 instances given the work volume of a SQS?

我使用 aws-cli 创建了一个 bash 脚本,该脚本使用 SQS 发送 1000 条消息,现在我想创建另一个并行运行并在这种情况下创建和销毁 EC2 实例的脚本: 每 15 秒检查一次:if (((ApproximateNumberOfMessages + 9)/10) - N 运行 instances) > 0 创建一个实例,否则销毁一个实例。

我的第一个问题是我不知道如何将我的 SQS 队列连接到 EC2 实例以便它可以处理这些消息。我尝试按照本教程进行操作:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-sending-messages-from-vpc.html,但我不想使用私有 VPC 和安全组,所以我想知道是否有办法让它更容易。

我的问题是:是否可以仅使用 bash 脚本而不是 CloudWatch 和 Autoscaling Groups 来实现?如何创建准备好处理这些消息的 EC2 实例?

当您创建一个 EC2 实例时,它会自动获得一个弹性网络接口(ENI,虚拟网卡),AWS 会自动为其分配一个默认安全组,或者另一个用户创建的安全组。您不能分离默认 ENI,也不能拥有没有安全组的 ENI。此外,EC2 实例必须 运行 在一个 VPC 内,这可以是 public 私有的。然而,如果您使用 EC2 实例,则还必须处理安全组。

Is it possible to do it just using a bash script instead of CloudWatch and Autoscaling Groups?

这也许是可能的,但您会发现自己在重新发明轮子。自动缩放不仅仅根据某些条件执行 adding/removing 个实例。例如,它还确保在实例变得不健康或由于某种原因终止时替换您的实例。有关详细信息,请参阅 AWS ASG FAQ.

How do I create a EC2 instance that is ready to process these messages?

您不能只启动一个实例并期望处理您的消息。您需要部署一些代码或某种软件,并配置为轮询队列中的消息。