我有一个运行几个进程的EC2实例。我还有一个通过各种方式触发的Lambda脚本。我希望这个Lambda脚本能够与我的EC2实例通信并从中获取正在运行的进程列表(基本上在EC2框上运行ps aux
,并读取输出)。
现在只需一个实例及其instance-id即可。只需SSH,运行命令,获取输出,并在我的路上。但是,我想将其扩展为多个EC2实例,其中只有instance-id已知且可能没有给出SSH密钥。
Lambda和Boto(或其他库)是否可以进行这样的配置?或者我只需要在我的每个实例上运行一个微服务器,它将回复给定的信息(我真正想避免的事情)
答案 0 :(得分:9)
您可以通过EC2 Run Command - https://aws.amazon.com/ec2/run-command/
轻松完成此操作EC2 Run Command提供了一种在实例组上远程执行管理任务的简单方法,而无需通过SSH进行管理。
具体做法是:
答案 1 :(得分:0)
我认为这种情况下没有开箱即用的东西。
尝试替代方法,而不是查询。在所有ec2实例上安装代理,它将所需信息报告给中央服务或可能是DynamoDB表,并将HashKey作为InstanceId。
你可能想把这个脚本作为一个cron作业,(可能每小时执行一次?)在AMI本身。
通过此实现,您可以降低在每个EC2实例上管理和运行单独Web服务的复杂性。
按需查询DynamoDB表。会有延迟,因为数据可能不是实时的,但您可以随时根据需要减少CRON间隔。
答案 2 :(得分:0)
与Yeshodhan提到的一样,没有直接的方法。
然而,还有一种方法。
1)将私钥文件保存到s3存储桶,创建lambda函数并使用python fabric模块从lambda函数登录到远程机器并执行命令。
上述方法是可行的,但我强烈建议启动一台单独的机器并使用配置管理系统(最好是ansible)并从远程机器获取结果。