Ich habe eine Lambda-Funktion, die SSH ec2-Instanz und einige Befehle ausführen. Diese Lambda-Funktion wird vom SNS-Thema ausgelöst. SNS-Thema ist mit einem Cloudwatch-Alarm integriert. Ich benutze Python 2.7 in Lambda-Funktion, gefolgt von diesem Thread https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/. Ist es möglich, die öffentliche IP-Adresse von EC2 zu erhalten, die tatsächlich Alarm ausgelöst hat?Ermitteln der EC2-Instanz öffentliche IP von SNS in Lambda
Antwort
Es hängt vom CloudWatch-Alarm ab, den Sie zum Auslösen der SNS-Veröffentlichung verwenden. Mein Vorschlag ist, das gesamte Ereignis Wörterbuch in Ihrer Funktion auszudrucken und zu überprüfen, ob es eine Erwähnung über die EC2-Instanz-ID gibt.
Im Falle eines CloudWatch EC2-Alarms (z. B. CPU-Auslastung) finden Sie die Instanz-ID in der metrischen Dimension.
# Python example
import json
message = json.loads(event['Records'][0]['Sns']['Message'])
instance_id = message['Trigger']['Dimensions'][0]
Wenn Sie die Instanz-ID haben, können Sie leicht die Instanz öffentliche IP mit boto3 abrufen wie folgt:
# 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']
Schließlich, wie Sie SSH von Lambda-Funktion auf Ihre EC2-Instanz ausführen im Auge behalten dass Lambda-Funktionen außerhalb von VPC eine dynamische öffentliche IP erhalten, ist es daher unmöglich, Ihre EC2-Instanz-Sicherheitsgruppe für SSH einzuschränken. SSH für die ganze Welt offen zu lassen, ist aus Sicherheitssicht keine gute Praxis.
Ich empfehle, sowohl EC2 und Lambda-Funktion in VPC ausführen SSH-Zugriff auf Ihre EC2-Instanzen nur von Lambda VPC Sicherheitsgruppe beschränken. In diesem Fall müssen Sie die private IP-Adresse statt der öffentlichen IP-Adresse abrufen, um Ihre Instanz ssh zu starten (die Python-Logik ist dieselbe wie oben). Der einzige Unterschied besteht darin, dass Sie 'PrivateIpAddress' anstelle von verwenden 'PublicIpAddress'). Dies ist viel sicherer als das öffentliche Internet.
Ich hoffe, das hilft.
G
- 1. AWS ASG + SNS + Lambda
- 2. Ermitteln der IP-Adresse
- 3. Ermitteln der Geolokalisierung von der IP-Adresse
- 4. Invoke Lambda mit SNS von außerhalb Konto
- 5. Holen öffentliche IP in Golang
- 6. Was ist das öffentliche IP-Limit von AWS? (Öffentliche IP-Adresse nicht elastisch IP)
- 7. iptables - öffentliche IP vs. private IP, erreichbar über öffentliche IP, aber nicht mit privater IP
- 8. AWS EC2 Öffentliche IP vs. Private IP
- 9. Öffentliche IP in Azure verbinden
- 10. Ermitteln der lokalen IP-Adresse in der P2P-Anwendung
- 11. NginX: lokale IP vs. öffentliche IP
- 12. Internet-IP-Adresse in der Shell ermitteln?
- 13. Kann öffentliche IP von gitlab-aws-image
- 14. Öffentliche IP-Adressen von EC2-Instanzen auflisten
- 15. wie öffentliche IP durch von GPRS-Modem
- 16. Öffentliche IP mit POCO finden
- 17. SNS-Thema löst Lambda nicht aus
- 18. Lambda dasselbe SNS-Ereignis mehrmals verarbeiten?
- 19. AWS Lambda/SNS Publish ignoriere ungültige Endpunkte
- 20. Senden SNS Push durch Lambda - keine Nachricht?
- 21. AWS SNS als Quelle für AWS Lambda
- 22. Ermitteln der IP eines Jenkins-Knotens
- 23. Warum löst SNS nicht mein Lambda aus?
- 24. Änderung in Bitnami Wordpress AWS öffentliche IP
- 25. Breaking down eine öffentliche IP in Komponenten
- 26. Kann ich die öffentliche IP-Adresse von AWS Lambda bei jeder Anfrage ändern?
- 27. Timeout beim Veröffentlichen von AWS Lambda an SNS
- 28. App Maker: Öffentliche IP für UrlFetch?
- 29. Routing öffentliche/externe IP zu Docker Container
- 30. Redis: verwendet private IP schneller als öffentliche IP?