从lambd中的SNS确定EC2实例公共IP

2024-05-03 12:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个lambda函数,它SSH ec2实例并运行一些命令。此lambda函数是从SNS主题触发的。SNS topic集成了cloudwatch警报。我在lambda函数中使用python2.7遵循这个线程https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/。有没有可能得到真正触发警报的EC2公共IP地址?在


Tags: 实例lambda函数https命令awsamazon主题
1条回答
网友
1楼 · 发布于 2024-05-03 12:43:43

这取决于您用来触发SNS发布的CloudWatch警报。 我的建议是在您的函数中打印出整个事件字典,并检查是否有任何关于EC2实例ID的提及

在cloudwatchec2警报的情况下(例如CPU使用率),您将在metric维度中找到实例ID。在

# Python example
import json
message = json.loads(event['Records'][0]['Sns']['Message'])
instance_id = message['Trigger']['Dimensions'][0]

如果您有实例ID,可以使用boto3轻松检索实例公共IP,如下所示:

^{pr2}$

最后,当您执行从Lambda函数到EC2实例的SSH时,请记住VPC中的Lambda函数会获得一个动态的公共IP,因此不可能限制您的EC2实例SSH安全组。从安全角度来看,让SSH向全世界开放并不是一个好做法。在

建议在VPC 2的ECDA和ECDA两个实例中,限制从VPC 2的安全访问。在这种情况下,您需要检索私有Ip地址而不是公共Ip地址,以便能够通过ssh连接实例(python逻辑与上述相同,唯一的区别是使用'PrivateIpAddress',而不是“PublicIpAddress”)。这比使用公共互联网安全得多。在

我希望这有帮助。在

G

相关问题 更多 >