我有一個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地址上的相同實例