我正在尝试从位于不同区域的 CloudWatch 警报通知 SNS 主题。原因是我需要短信提醒,但我的服务所在地区不提供短信提醒。如果我输入订阅的 ARN 并在控制台中保存更改,我会收到“保存警报时出错。请重试”。再试一次也没有帮助。使用本地区域的主题确实有效,但这不是我需要的。
有没有办法通知不同地区的主题?如果没有,还有其他简单的方法可以实现我的目标吗?
没有找到任何文档明确说明这是无法完成的,但尝试使用 CLI 将 us-east-1 中的 SNS 设置为 eu-west-1 中的警报操作,我得到了这个:
调用 PutMetricAlarm 操作时发生错误(ValidationError):指定的区域 us-east-1 无效。仅支持 eu-west-1。
所以我假设它不受支持。
要获得您需要的功能,您可以使用 AWS Lambda。假设您的服务位于不支持短信的区域,我将使用 eu-central-1 作为示例。
设置将如下所示:
为了补充 @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'