如何將私有 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.    在左側導覽窗格中的安全性下,選擇安全群組。然後選擇建立安全群組

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.8

6.    選擇進階設定

7.    針對 VPC - 選用,選擇私有端點所在的 Amazon VPC。子網路安全群組的下拉式清單隨即出現。

8.    針對子網路,請選擇私有端點所在的子網路。

9.    針對安全群組,請選擇 LambdaSG

10.    選擇建立函數

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

1.    開啟 Amazon VPC 主控台

2.    在左側導覽窗格中的安全性下,選擇安全群組

3.    選擇私有端點的安全群組名稱。

4.    選擇編輯傳入規則

5.    針對類型,請選擇 HTTPHTTPS (取決於您的使用案例)。通訊協定連接埠範圍欄位便會自動填入。

6.    針對來源,請選擇自訂。然後選擇 LambdaSG 安全群組。

7.    選擇儲存規則

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

1.    建立 Lambda 部署套件,其中包括 Lambda 函數的 Python 請求程式庫。請依照[教學課程:在 Python 3.8 中建立 Lambda 函數中的建立部署套件說明 ](https://docs.aws.amazon.com/lambda/latest/dg/python-package-create.html#python-package-create-package-with-dependency)。在步驟 3 中,請將教學課程中提供的程式碼換成下列範例程式碼片段。

Python 程式碼片段使用請求程式庫將 Amazon SNS 的傳入通知發表至私有端點

重要事項: 將 url 值替換成您的私有端點網址。

import json
import requests

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 = requests.post(url = url, data = json.dumps(sns_message_payload), headers = sns_message_headers)
    except Exceptions as e:
        print(e)

    print(r.content)

    return {
        'statusCode': 200,
        'body': json.dumps(r.content)
    }

2.    使用部署套件更新您稍早之前建立的 Lambda 函數

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

請遵循如何將 Lambda 函數訂閱至相同帳戶中的 Amazon SNS 主題?中的說明


AWS 官方
AWS 官方已更新 2 年前