AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何使用 Webhook 將 Amazon SNS 訊息發佈至 Amazon Chime、Slack 或 Microsoft Teams?
我想要將通知從 Amazon Simple Notification Service (Amazon SNS) 訊息傳送到 Amazon Chime、Slack 或 Microsoft Teams。
簡短描述
您可以使用 Amazon SNS 將通知訊息傳送至 HTTP 或 HTTPS 端點,例如 Webhook 網址。但是,某些 Webhook 在確認 HTTP 或 HTTPS 訂閱時預期收到的是 JSON 索引鍵/值組,而 Amazon SNS 不支援該格式。
例如,Amazon Chime Webhook 預期收到包含與 Content 索引鍵對應之訊息字串的 JSON 請求。同樣地,Slack 和 Microsoft Teams Webhook 都預期收到包含與 text 索引鍵對應之訊息字串的 JSON 請求。
若要轉換 Amazon SNS 訊息內文的 JSON 文件,使 Webhook 端點能夠處理,請使用 AWS Lambda 函式。
**注意:**如需 Amazon SNS 訊息內文 JSON 文件中索引鍵/值組的清單,請參閱 HTTP 和 HTTPS 通知 JSON 格式。
解決方法
建立 SNS 主題
如果尚未使用唯一名稱建立 SNS 主題,請加以建立。
建立 Lambda 函式
依照指示建立 Lambda 函式。您的 Lambda 函式程式碼必須包含邏輯,用來將 SNS 主題的通知訊息轉換為您所使用的 Webhook 端點所需的格式。
如需範例,請參閱下列用於 Amazon Chime、Slack 和 Microsoft Teams Webhook 的 Python 程式碼片段。
Amazon Chime 的 Python 程式碼片段範例
Amazon Chime Webhook 預期收到包含與 Content 索引鍵對應之訊息字串的 JSON 請求。如需詳細資訊,請參閱建立 Amazon Chime 的 Webhook。
import urllib3import json http = urllib3.PoolManager() def lambda_handler(event, context): url = "https://hooks.chime.aws/incomingwebhooks/xxxxxxx" msg = {"Content": event["Records"][0]["Sns"]["Message"]} encoded_msg = json.dumps(msg).encode("utf-8") resp = http.request("POST", url, body=encoded_msg) print( { "message": event["Records"][0]["Sns"]["Message"], "status_code": resp.status, "response": resp.data, } )
**注意:**將 https://hooks.chime.aws/incomingwebhooks/xxxxxxx 替換為您的 Webhook 網址。
Slack 的 Python 程式碼片段範例
Slack Webhook 預期收到包含與 text 索引鍵對應之訊息字串的 JSON 請求。它們還支援訊息自訂以新增使用者名稱和圖示,或覆寫 Webhook 的預設頻道。如需詳細資訊,請參閱 Slack 網站上的使用傳入 Webhook 傳送訊息。
import urllib3import json http = urllib3.PoolManager() def lambda_handler(event, context): url = "https://hooks.slack.com/services/xxxxxxx" msg = { "channel": "#CHANNEL_NAME", "username": "WEBHOOK_USERNAME", "text": event["Records"][0]["Sns"]["Message"], "icon_emoji": "", } encoded_msg = json.dumps(msg).encode("utf-8") resp = http.request("POST", url, body=encoded_msg) print( { "message": event["Records"][0]["Sns"]["Message"], "status_code": resp.status, "response": resp.data, } )
**注意:**將 https://hooks.slack.com/services/xxxxxxx 替換為您的 Webhook 網址,並將 #CHANNEL_NAME 替換為目標頻道的名稱。
Microsoft Teams 的 Python 程式碼片段範例
Microsoft Teams Webhook 預期收到包含與 text 索引鍵對應之訊息字串的 JSON 請求。如需詳細資訊,請參閱 Microsoft Teams 網站上的建立和傳送訊息。
import urllib3import json http = urllib3.PoolManager() def lambda_handler(event, context): url = "https://outlook.office.com/webhook/xxxxxxx" msg = {"text": event["Records"][0]["Sns"]["Message"]} encoded_msg = json.dumps(msg).encode("utf-8") resp = http.request("POST", url, body=encoded_msg) print( { "message": event["Records"][0]["Sns"]["Message"], "status_code": resp.status, "response": resp.data, } )
**注意:**將 https://outlook.office.com/webhook/xxxxxxx 替換為您的 Webhook 網址。
測試 Lambda 函式
請完成下列步驟:
- 在 Lambda 主控台的 Functions page (函式) 頁面上,選擇您的函式。
- 開啟 Test (測試) 索引標籤。在 Event name (事件名稱) 中,輸入名稱。
- 選擇 Template (範本) 下拉式清單,然後選取 SNS Topic Notification (SNS 主題通知)。
- 選擇 Save (儲存),然後選擇 Test (測試)。
如果測試調用成功並傳回 200 狀態代碼,表示 Amazon SNS 通知訊息已由您的 Webhook 接受並傳送到頻道。
如果測試調用失敗並顯示 4xx 狀態代碼,請確認 Webhook URL 索引鍵/值組是否正確並由目標 Webhook 接受。
如需詳細資訊,請參閱使用主控台程式碼編輯器調用 Lambda 函式。
新增 SNS 主題並將 Lambda 函式訂閱至該主題
請完成下列步驟:
- 在 Lambda 主控台的 Functions page (函式) 頁面上,選擇您的函式。
- 在 Function overview (函式概觀) 下,選擇 Add trigger (新增觸發程序)。
- 在 Trigger configuration (觸發程序組態) 下拉式清單中,然後選取 SNS。
- 在 SNS topic (SNS 主題) 中,選擇您之前建立的 SNS 主題。
- 選擇 Add (新增)。
- 將您的 Lambda 函式訂閱到 SNS 主題。
現在您已將函式訂閱到 SNS 主題,發佈至主題的訊息將轉送至該函式和您的 Webhook。
相關資訊
- 語言
- 中文 (繁體)

