CloudWatch alarm to SNS in different region

前端 未结 2 1327
误落风尘
误落风尘 2021-02-14 09:48

I\'m trying to notify an SNS topic from a CloudWatch alarm that\'s in a different region. The reason is that I want SMS alerting, which isn\'t available in the region where my

相关标签:
2条回答
  • 2021-02-14 10:41

    Didn't find any docs that explicitly say this can't be done but tried to set an SNS from us-east-1 as an action of an alarm in eu-west-1 using the CLI and I got this:

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

    So I'll assume it's not supported.

    To get the functionality you need you can use AWS Lambda. Lets say your service is in a region where SMS is not supported, I'll use eu-central-1 as an example.

    Setup would go like this:

    1. [us-east-1] Create your SNS topic that can send SMS messages, in the region where SMS is supported.
    2. [eu-central-1 Create a lambda function that sends messages to the SNS topic from step 1 in the region where your service is.
    3. [eu-central-1] Create an SNS topic in the region where your service is. For the SNS topic configure subscription with AWS Lambda protocol and point it to lambda from step 2.
    4. [eu-central-1] Create your alarm in the region where your service is and put the SNS topic from step 3 as an action.
    0 讨论(0)
  • 2021-02-14 10:41

    To add to @Tartaglia's answer, here's the source of such a lambda function using Python 3, cobbled together from various sources because I don't have time to do it properly:

    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'
    
    0 讨论(0)
提交回复
热议问题