我有一個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. AWS Cloud Formation - 如何獲取公共ip地址的ec2實例
- 6. ec2-import-instance生成一個沒有公共IP的實例
- 7. 無法通過公共IP訪問EC2實例
- 8. 在當前EC2實例上獲取公共IP地址
- 9. 無法將EC2實例公共IP分配給Mosquitto MQTT代理
- 10. EC2 t2.micro實例沒有公共DNS
- 11. EC2公共實例無法訪問
- 12. SNS發佈到多個EC2實例
- 13. 從JAVA API獲取Amazon EC2實例的公共DNS
- 14. SSH到EC2綁定到私有IP,而不是公共IP
- 15. 無法通過公共IP訪問EC2 linux實例上的網站
- 16. 如何獲取EC2啓動實例請求上的公共IP地址?
- 17. 將EC2實例註冊到未使用公共IP的ECS羣集
- 18. 通過公共ip的亞馬遜EC2實例無法正常工作
- 19. 檢索給定實例ID的EC2實例的IP地址
- 20. 從沒有公有IP的計算機配置Amazon EC2實例用鹽雲從我的公網IP
- 21. 無法從AWS實例連接到公共IP地址上的相同實例
- 22. 在Saltstack公式中檢索另一個EC2實例的公有IP
- 23. 檢索另一個EC2實例的公有IP地址
- 24. EC2「彈性IP」和「IPv4公共IP」之間的區別
- 25. 從AWS lambda函數獲取EC2實例IP並使用請求庫
- 26. Google OAuth2不適用於Amazon EC2實例的公共DNS?
- 27. 指向ec2實例的CNAME公共主機
- 28. AWS EC2公共IP和主要私有IP
- 29. 將EC2實例從VPC連接到EC2-Classic中的實例
- 30. SNS到Lambda和SNS到SQS到Lambda