如何将私有 HTTP 或 HTTPS 端点订阅到我的 Amazon SNS 主题?

2 分钟阅读
0

我想将私有 HTTP 或 HTTPS 端点订阅到我的 Amazon Simple Notification Service (Amazon SNS) 主题。

解决方法

要将私有 HTTP 或 HTTPS 端点订阅到 Amazon SNS 主题,请完成以下步骤。

在与该私有端点相同的 Amazon VPC 中创建一个 Amazon VPC 安全组 LambdaSG

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中的 Security(安全)下,选择 Security groups(安全组)。然后,选择 Create security group(创建安全组)。
  3. 对于 Security group name(安全组名称),输入 LambdaSG
  4. 对于 VPC,选择该私有端点所在的 Amazon 虚拟私有云 (VPC)。
  5. 选择 Create security group(创建安全组)。

在与该私有端点相同的 Amazon VPC 和子网内创建一个 Lambda 函数,并使用 LambdaSG 安全组对其进行配置

  1. 打开 Lambda 控制台
  2. 选择创建函数
  3. 选择 Author from scratch(从头开始创建)。
  4. 对于 Function name(函数名称),输入描述函数用途的名称。例如,Private-endpoint-Amazon-SNS-topic-subscription
  5. 对于 Runtime(运行时),选择 Python 3.12
  6. 选择 Additional configurations(其他配置)。然后,选择 Enable VPC(启用 VPC)。
  7. 对于 VPC,选择该私有端点所在的子网。
  8. 选择 Create function(创建函数)。

编辑该私有端点的安全组规则,以允许来自 Lambda 函数安全组的入站连接

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中的 Security(安全)下,选择 Security groups(安全组)。
  3. Security groups(安全组)中,选择该私有端点的安全组。
  4. 选择 Edit inbound rules(编辑入站规则)。
  5. 对于 Type(类型),选择 HTTPHTTPSProtocol(协议)和 Port range(端口范围)字段将会自动填充。
  6. 对于 Source(源),选择 Custom(自定义)。然后,选择 LambdaSG 安全组。
  7. 选择 Save rules(保存规则)。

配置 Lambda 函数,使其将传入的 Amazon SNS 通知传递到该私有端点

  1. 打开 Lambda 控制台
  2. 在导航窗格中,选择 Functions(函数)。
  3. Function name(函数名称)中,选择您之前创建的函数。
  4. Code source(代码源)中,将默认代码替换为以下代码:
    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)
    重要事项: 请将 url 值替换为您的私有端点的 URL。
  5. 选择 Deploy(部署)。

将 Lambda 函数订阅到您的 Amazon SNS 主题

有关详细信息,请参阅教程: 将 Lambda 与 Amazon SNS 结合使用

AWS 官方
AWS 官方已更新 4 个月前