我有一个lambda函数,其中的SSH ec2实例并运行一些命令。这个lambda函数是从SNS主题触发的。 SNS主题与一个cloudwatch警报集成。我在lambda函数中使用了python 2.7,后面跟着这个线程https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/。有可能获得实际触发警报的EC2公共IP地址吗?从lambda中的SNS确定EC2实例公共IP
0
A
回答
2
这取决于您用于触发SNS发布的CloudWatch警报。 我的建议是打印出您的功能中的整个事件字典,并检查是否有任何关于EC2实例ID的提及。
如果出现CloudWatch EC2警报(例如,CPU使用率),您会在度量标准维度中找到实例标识。
# Python example
import json
message = json.loads(event['Records'][0]['Sns']['Message'])
instance_id = message['Trigger']['Dimensions'][0]
如果你有实例ID,你可以使用boto3如下容易检索实例的公网IP:
# Python example
import boto3
instance_id = 'xxxx' # This is the instance ID from the event
ec2 = boto3.client('ec2')
instances = ec2.describe_instances(InstanceIds=[instance_id])
public_ip = instances[0]['Reservations'][0]['Instances'][0]['PublicIpAddress']
最后,当您正在执行从lambda函数SSH到您的EC2实例牢记Lambda函数从VPC中获取动态公有IP,因此无法限制用于SSH的EC2实例安全组。从安全的角度来看,让SSH向全世界开放并不是一个好的做法。
我建议在VPC中同时运行EC2和Lambda函数,以限制仅从Lambda vpc安全组的SSH访问您的EC2实例。在这种情况下,您需要检索私有IP地址而不是公共IP地址,以便能够ssh您的实例(python逻辑与上述相同,唯一的区别是您使用'PrivateIpAddress'而不是'PublicIpAddress')。这比使用公共互联网更安全。
我希望这会有所帮助。
G
相关问题
- 1. 从实例ID确定公共Amazone EC2实例IP地址
- 2. 使用公共ip启动ec2实例
- 3. 更改EC2实例的公共IP地址弹性IP地址
- 4. 如何在python中获取当前ec2实例的公共ip?
- 5. 将EC2实例启动到vpc中并使用公共IP
- 6. 访问的Amazon EC2 Windows实例的网络公共IP
- 7. ec2-import-instance生成一个没有公共IP的实例
- 8. AWS Cloud Formation - 如何获取公共ip地址的ec2实例
- 9. RDP - 非VPC EC2实例到VPC(公共)EC2实例:不工作
- 10. 无法将EC2实例公共IP分配给Mosquitto MQTT代理
- 11. 在当前EC2实例上获取公共IP地址
- 12. 无法通过公共IP访问EC2实例
- 13. 无法从公共IP访问EC2实例上的Rails服务器
- 14. EC2公共实例无法访问
- 15. EC2实例没有公共DNS
- 16. EC2 t2.micro实例没有公共DNS
- 17. Aws公共ip在运行实例
- 18. EC2的公共IP如何工作?
- 19. SNS发布到多个EC2实例
- 20. 从JAVA API获取Amazon EC2实例的公共DNS
- 21. SSH到EC2绑定到私有IP,而不是公共IP
- 22. 如何获取EC2启动实例请求上的公共IP地址?
- 23. 将EC2实例注册到未使用公共IP的ECS群集
- 24. 如何跟踪EC2实例或Elastic IP上的公共带宽使用情况?
- 25. 无法通过公共IP访问EC2 linux实例上的网站
- 26. 是否需要将公共IP发送到EC2实例的SSM命令?
- 27. 通过公共ip的亚马逊EC2实例无法正常工作
- 28. amazon aws ec2公共IP地址
- 29. 检索给定实例ID的EC2实例的IP地址
- 30. 无法从AWS实例连接到公共IP地址上的相同实例