繁体   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