2016-09-20 112 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

相關問題