簡體   English   中英

CloudWatch向不同地區的SNS發出警報

[英]CloudWatch alarm to SNS in different region

我正在嘗試從位於不同區域的CloudWatch警報通知SNS主題。 原因是我想要短信提醒,這在我的服務所在的地區是不可用的。 如果我輸入訂閱的ARN並在控制台中保存更改,我會收到“保存警報時出錯。請再試一次。” 再試一次沒有用。 在本地區域使用主題確實有效,但這不是我需要的。

有沒有辦法通知不同地區的主題? 如果沒有,還有另一種簡單的方法可以實現我的目標嗎?

沒有找到任何明確表示無法完成的文檔,但嘗試使用CLI在us-east-1中設置SNS作為eu-west-1中的警報動作,我得到了:

An error occurred (ValidationError) when calling the PutMetricAlarm operation: Invalid region us-east-1 specified. Only eu-west-1 is supported.

所以我認為它不受支持。

要獲得所需的功能,您可以使用AWS Lambda。 假設您的服務位於不支持SMS的區域,我將使用eu-central-1作為示例。

安裝程序將如下所示:

  1. [ us-east-1 ]在支持SMS的區域中創建可以發送SMS消息的SNS主題。
  2. [ eu-central-1創建一個lambda函數,用於從服務所在區域的步驟1向SNS主題發送消息。
  3. [ eu-central-1 ]在您的服務所在的地區創建一個SNS主題。 對於SNS主題,請使用AWS Lambda協議配置訂閱,並將其從步驟2指向lambda。
  4. [ eu-central-1 ]在您的服務所在區域創建警報,並將步驟3中的SNS主題作為操作。

要添加到@Tartaglia的答案,這里是使用Python 3的這種lambda函數的來源,從各種來源拼湊而成,因為我沒有時間正確地執行它:

import json
import logging

import boto3


logger = logging.getLogger()
logger.setLevel(logging.INFO)


session = boto3.Session(region_name='eu-west-1') # EU (Ireland)
sns_client = session.client('sns')


def lambda_handler(event, context):
    logger.info('Received event: %s', event)

    for record in event['Records']:
        sns_message = record['Sns']

        response = sns_client.publish(
            TopicArn='YOUR TOPIC ARN HERE',
            Subject=sns_message.get('Subject', None),
            Message=sns_message.get('Message', None))

        logger.info('Publish response: %s', response)

    return 'OK'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM