我对AWS SNS的使用有一个快速的问题。
我在us-west-1(N.California)部署了一个EC2(t2.micro,Linux)实例。我用boto3编写了一个python脚本,向我的手机发送一条简单的短信。后来我发现,在我们东部1(N.Virginia)部署的实例中没有SNS服务。直到这一点它才有意义,因为我在执行我的python脚本时看到以下错误,因为该区域在aws configure(AWS cli)和我的python脚本中定义为“us-west-1”。
botocore.errorfactory.InvalidParameterException: An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: PhoneNumber Reason:
但是为了测试,当我将aws conifgure中的“region”和我的python脚本中的“region”更改为“us-east-1”时,我的脚本将一条短信发送到我的手机上。这不奇怪吗?任何人都可以解释为什么这只是通过更改AWS cli和我的python脚本中的区域来工作,虽然我的实例仍然在us-west-1中我在N.california地区的SNS仪表板上看不到“发布文本消息”选项?
是否正在使用us-east-1重新定义aws cli,类似于在us-east-1中部署一个新实例?我不这么认为。如果我错了,请纠正我。或者就像在us-west-1中有一个实例,但只是使用来自我们的SNS服务 - 东1?请详细说明。
这是我的python脚本,如果有人需要查看它(它是一个简单的片段)。
import boto3
def send_message():
# Create an SNS client
client = boto3.client("sns", aws_access_key_id="XXXX", aws_secret_access_key="XXXX", region_name="us-east-1")
# Send your sms message.
client.publish(PhoneNumber="XXXX",Message="Hello World!")
if __name__ == '__main__':
send_message()
答案 0 :(得分:1)
正在使用us-east-1重新定义aws cli,类似于部署新的 在us-east-1中完全是一个例子?
不,它根本不是那样的。
或者就像在us-west-1中有一个实例,但只是使用SNS 来自us-east-1的服务?
是的,这就是你所做的一切。您可以从Internet上的任何位置连接到任何AWS区域的API。它在特定区域的EC2实例上运行并不重要,只需要告诉SDK / CLI使用哪个区域。
您可以在本地计算机上运行相同的代码。显然,您的本地计算机未在AWS上运行,因此您必须告知代码将AWS调用发送到哪个AWS区域。你在做什么是一回事。
在EC2服务器上运行的代码不限于在EC2服务器所在的区域中使用AWS API。
答案 1 :(得分:0)
您是否在发布主题之前尝试创建主题?您应该尝试创建主题,然后发布到该主题。