如何將私有 HTTP 或 HTTPS 端點訂閱至我的 Amazon SNS 主題?

1 分的閱讀內容
0

我想將私有 HTTP 或 HTTPS 端點訂閱至我的 Amazon Simple Notification Service (Amazon SNS) 主題。

解決方案

若要將私有 HTTP 或 HTTPS 端點訂閱至 Amazon SNS 主題,請完成下列步驟。

在相同 Amazon VPC 中建立 Amazon VPC 安全群組 LambdaSG,然後將此安全群組作為私有端點使用

  1. 開啟 Amazon VPC 主控台
  2. 在導覽窗格中的安全性下,選擇安全群組。然後選擇建立安全群組
  3. 安全群組名稱中,輸入 LambdaSG
  4. 針對 VPC,請選擇私有端點所在的 Amazon 虛擬私有雲端 (VPC)。
  5. 選擇建立安全群組

在相同的 Amazon VPC 和子網路內建立 Lambda 函數,並將此函數作為私有端點,然後再將使用 LambdaSG 安全群組對其進行設定

  1. 開啟 Lambda 主控台
  2. 選擇建立函數
  3. 選擇從頭開始撰寫
  4. 針對函數名稱,請輸入描述函數目的的名稱。例如,Private-endpoint-Amazon-SNS-topic-subscription
  5. 對於執行時期,選擇 Python 3.12
  6. 選擇其他組態。然後,選擇啟用 VPC
  7. 針對 VPC,請選擇私有端點所在的子網路。
  8. 選擇建立函數

編輯私有端點的安全群組規則,以允許來自 Lambda 函數安全群組的傳入連線

  1. 開啟 Amazon VPC 主控台
  2. 在導覽窗格中的安全性下,選擇安全群組
  3. 安全群組中,選擇私有端點的安全群組名稱。
  4. 選擇編輯傳入規則
  5. 對於類型,選擇 HTTPHTTPS通訊協定連接埠範圍欄位便會自動填入。
  6. 針對來源,請選擇自訂。然後選擇 LambdaSG 安全群組。
  7. 選擇儲存規則

設定 Lambda 函數,以便將傳入的 Amazon SNS 通知傳遞至私有端點

  1. 開啟 Lambda 主控台
  2. 在導覽窗格中,選擇函數
  3. 函數名稱中,選擇您先前建立的函數。
  4. 程式碼 來源中,將預設程式碼取代為下列程式碼:
    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 值替換成您的私有端點網址。
  5. 選擇部署

將 Lambda 函數訂閱至您的 Amazon SNS 主題

如需詳細資訊,請參閱教學課程: 搭配 Amazon SNS 使用 Lambda。

AWS 官方
AWS 官方已更新 5 個月前