在EC2实例上运行AWS Lambda运行命令并获取结果

时间:2017-05-23 19:18:32

标签: amazon-web-services amazon-ec2 lambda

我有一个运行几个进程的EC2实例。我还有一个通过各种方式触发的Lambda脚本。我希望这个Lambda脚本能够与我的EC2实例通信并从中获取正在运行的进程列表(基本上在EC2框上运行ps aux,并读取输出)。

现在只需一个实例及其instance-id即可。只需SSH,运行命令,获取输出,并在我的路上。但是,我想将其扩展为多个EC2实例,其中只有instance-id已知且可能没有给出SSH密钥。

Lambda和Boto(或其他库)是否可以进行这样的配置?或者我只需要在我的每个实例上运行一个微服务器,它将回复给定的信息(我真正想避免的事情)

3 个答案:

答案 0 :(得分:9)

您可以通过EC2 Run Command - https://aws.amazon.com/ec2/run-command/

轻松完成此操作

EC2 Run Command提供了一种在实例组上远程执行管理任务的简单方法,而无需通过SSH进行管理。

具体做法是:

  • 使用Lambda函数中的send-command API获取一组实例上的所有进程的列表。您可以通过提供实例列表甚至标记查询来实现此目的
  • 您还可以使用CloudWatch Events直接触发“运行命令”

答案 1 :(得分:0)

我认为这种情况下没有开箱即用的东西。

尝试替代方法,而不是查询。在所有ec2实例上安装代理,它将所需信息报告给中央服务或可能是DynamoDB表,并将HashKey作为InstanceId。

你可能想把这个脚本作为一个cron作业,(可能每小时执行一次?)在AMI本身。

通过此实现,您可以降低在每个EC2实例上管理和运行单独Web服务的复杂性。

按需查询DynamoDB表。会有延迟,因为数据可能不是实时的,但您可以随时根据需要减少CRON间隔。

答案 2 :(得分:0)

与Yeshodhan提到的一样,没有直接的方法。

然而,还有一种方法。

1)将私钥文件保存到s3存储桶,创建lambda函数并使用python fabric模块从lambda函数登录到远程机器并执行命令。

上述方法是可行的,但我强烈建议启动一台单独的机器并使用配置管理系统(最好是ansible)并从远程机器获取结果。