2016-09-20 182 views

回答

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

相关问题