Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何使用 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。
相關資訊
- 語言
- 中文 (繁體)

