【发布时间】:2017-01-16 15:23:49
【问题描述】:
SNS 问题
我目前正在为 SNS 使用 python boto3 库(例如,创建主题、订阅主题、将 SNS 发送到主题)。当我使用Resource 或Client 时,我必须指定一个区域(例如'us-west-2'、'us-east-1')。我没有看到任何用于处理区域故障转移的内置选项。我的问题是,您如何设置 AWS SNS 和 SQS 以实现高可用性/区域故障转移?
import boto3
client = boto3.client('sns', region_name='us-west-2')
response = client.create_topic(Name='my_new_topic')
client.subscribe(TopicArn='arn:aws:sns:us-west-2:123456789:some-topic', Protocol='HTTP', Endpoint='Some-HTTP-Endpoint')
SNS解决方案的思考
我正在考虑检查客户的响应。例如下面是成功client.create_topic()的响应。
{'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'adbb58ef-9047-5d44-834d-04a41599eb2b'}, u'TopicArn': 'arn:aws:sns:us-west-2:123456789:some-topic'}
如果请求不成功,我可以在尝试新的region_name 之前重试 X 次,但是这种方法看起来很 hacky(因为它总是会尝试首先尝试关闭的区域并且需要不断切换到新客户)。
SQS 的问题
如果上述方法成功(我们可以跨区域处理 SNS),现在我有多个需要读取的 SQS 队列(再次使用似乎是循环访问具有不同区域的客户端的 hacky 解决方案) .
【问题讨论】: