异地SNS CloudWatch告警
CloudWatch alarm to SNS in different region
我正在尝试从位于不同区域的 CloudWatch 警报通知 SNS 主题。原因是我想要短信提醒,我的服务所在地区没有。如果我输入订阅的 ARN 并在控制台中保存更改,我会收到 "There was an error saving the alarm. Please try again." 重试无济于事。在本地使用主题确实有效,但这不是我需要的。
有没有办法通知不同地区的主题?如果没有,是否有另一种简单的方法可以实现我的目标?
没有找到任何明确说明不能这样做的文档,但尝试从 us-east-1 设置 SNS 作为 eu-west-1 使用 CLI,我得到了这个:
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 为例。
设置会像这样:
- [us-east-1]在支持 SMS 的地区创建可以发送 SMS 消息的 SNS 主题。
- [eu-central-1 创建一个 lambda 函数,将消息发送到您服务所在区域中第 1 步中的 SNS 主题。
- [eu-central-1] 在您的服务所在区域创建一个 SNS 主题。
对于 SNS 主题,使用 AWS Lambda 协议配置订阅并将其指向步骤 2 中的 lambda。
- [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'
我正在尝试从位于不同区域的 CloudWatch 警报通知 SNS 主题。原因是我想要短信提醒,我的服务所在地区没有。如果我输入订阅的 ARN 并在控制台中保存更改,我会收到 "There was an error saving the alarm. Please try again." 重试无济于事。在本地使用主题确实有效,但这不是我需要的。
有没有办法通知不同地区的主题?如果没有,是否有另一种简单的方法可以实现我的目标?
没有找到任何明确说明不能这样做的文档,但尝试从 us-east-1 设置 SNS 作为 eu-west-1 使用 CLI,我得到了这个:
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 为例。
设置会像这样:
- [us-east-1]在支持 SMS 的地区创建可以发送 SMS 消息的 SNS 主题。
- [eu-central-1 创建一个 lambda 函数,将消息发送到您服务所在区域中第 1 步中的 SNS 主题。
- [eu-central-1] 在您的服务所在区域创建一个 SNS 主题。 对于 SNS 主题,使用 AWS Lambda 协议配置订阅并将其指向步骤 2 中的 lambda。
- [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'