Ich möchte einen privaten HTTP- oder HTTPS-Endpunkt für mein Amazon Simple Notification Service (Amazon SNS)-Thema abonnieren.
Lösung
Gehe wie folgt vor, um einen privaten HTTP- oder HTTPS-Endpunkt für ein Amazon SNS-Thema zu abonnieren.
Eine Amazon VPC-Sicherheitsgruppe (LambdaSG) in derselben Amazon VPC wie der private Endpunkt erstellen
- Öffne die Amazon-VPC-Konsole.
- Wähle im Navigationsbereich unter Sicherheit die Option Sicherheitsgruppen. Wähle dann Sicherheitsgruppe erstellen aus.
- Gib als Name der Sicherheitsgruppe LambdaSG ein.
- Wähle für VPC die Amazon Virtual Private Cloud (VPC) aus, in der sich der private Endpunkt befindet.
- Wähle Sicherheitsgruppe erstellen aus.
Eine Lambda-Funktion in derselben Amazon-VPC und demselben Subnetz wie der private Endpunkt erstellen und mit der LambdaSG-Sicherheitsgruppe konfigurieren
- Öffne die Lambda-Konsole.
- Wähle Funktion erstellen aus.
- Wähle Ohne Vorgabe erstellen.
- Gib unter Funktionsname einen Namen ein, der den Zweck der Funktion beschreibt. Zum Beispiel Private-endpoint-Amazon-SNS-topic-subscription.
- Wähle für Laufzeit Python 3.12.
- Wähle Zusätzliche Konfigurationen. Wähle dann VPC aktivieren aus.
- Wähle für die VPC das Subnetz aus, in dem sich der private Endpunkt befindet.
- Wähle Funktion erstellen aus.
Die Regeln der Sicherheitsgruppe des privaten Endpunkts bearbeiten, um eingehende Verbindungen von der Sicherheitsgruppe der Lambda-Funktion zuzulassen
- Öffne die Amazon-VPC-Konsole.
- Wähle im Navigationsbereich unter Sicherheit die Option Sicherheitsgruppen.
- Wähle unter **Sicherheitsgruppen ** die Sicherheitsgruppe des privaten Endpunkts aus.
- Wähle Regeln für eingehenden Datenverkehr bearbeiten aus.
- Wähle für Typ HTTP oder HTTPS aus. Die Felder Protokoll und Portbereich werden automatisch ausgefüllt.
- Wähle für Quelle die Option Benutzerdefiniert aus. Wähle dann die LambdaSG-Sicherheitsgruppe aus.
- Wähle Regeln speichern aus.
Die Lambda-Funktion so konfigurieren, dass sie eingehende Amazon SNS-Benachrichtigungen an den privaten Endpunkt weiterleitet
- Öffne die Lambda-Konsole.
- Wähle im Navigationsbereich Funktionen aus.
- Wähle unter Funktionsname die Funktion aus, die du zuvor erstellt hast.
- Ersetze in der Code-Quelle den Standardcode durch den folgenden Code:
from __future__ import print_function
import json
import urllib3
http = urllib3.PoolManager()
def lambda_handler(event, context):
url = "PRIVATE_HTTP/S_ENDPOINT_URL"
sns_message_payload = event["Records"][0]["Sns"]
sns_message_headers = {
"x-amz-sns-message-id": sns_message_payload['MessageId'],
"x-amz-sns-message-type": sns_message_payload["Type"],
"x-amz-sns-subscription-arn" : event["Records"][0]["EventSubscriptionArn"],
"x-amz-sns-topic-arn" : sns_message_payload["TopicArn"]
}
try:
r = http.request('POST', url, headers=sns_message_headers, body=json.dumps(sns_message_payload))
print(r.data)
except Exception as e:
print(e)
Wichtig: Ersetze den url-Wert durch die URL deines privaten Endpunkts.
- Wähle Bereitstellen aus.
Die Lambda-Funktion zum Amazon SNS-Thema abonnieren
Weitere Informationen findest du unter Tutorial: Verwendung von Lambda mit Amazon SQS.