2017-08-15 133 views
0

我對使用AWS SNS有一個簡短的問題。ec2實例部署在us-west-1時使用AWS SNS

我在us-west-1(N.California)部署了一個EC2(t2.micro,Linux)實例。我寫了一個使用boto3的python腳本來發送簡單的文本消息到我的手機。後來我發現,對於部署在我們以外的實例 - 東1(N.Virginia),沒有SNS服務。直到這一點它是有道理的,因爲我看到這個下面的錯誤,當我執行我的python腳本,因爲該區域被定義爲「us-west-1」aws配置(AWS cli)和我的python腳本。

botocore.errorfactory.InvalidParameterException: An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: PhoneNumber Reason: 

但測試,當我在AWS conifgure,在我的Python腳本改「區域」,以「美東1」,我的劇本推短信到我的手機。這不是很奇怪嗎?任何人都可以解釋爲什麼這只是通過改變AWS cli和我的python腳本中的區域來工作,儘管我的實例仍然在us-west-1中,而我在N.california地區的SNS儀表板上看不到「發佈文本消息」選項?

正在用us-east-1重新定義aws cli,類似於在我們東部一個地區部署一個新實例嗎?我不這麼認爲。糾正我,如果我錯了。或者就像我們在西方1有一個實例,但只是使用我們東1的SNS服務?請說明一下。

這是我的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

您是否在發佈之前嘗試創建主題?您應該嘗試創建一個主題,然後發佈到該主題。

+0

我因此未產生任何話題。 – chaitanya

+0

你不需要創建一個主題來發布SNS消息到一個電話號碼 – Milk

1

重新定義在美國東部-1完全部署新的 實例與美東-1類似,CLI中的AWS?

不,它根本不是這樣。

還是像在美國西部1有一個實例,但只是使用美國東1的SNS 服務?

是的,這就是你正在做的。您可以從Internet上的任何位置連接到任何AWS區域的API。無關緊要的是它在特定區域的EC2實例上運行,它只關乎您告訴SDK/CLI使用的區域。

您可以在本地計算機上運行相同的代碼。很明顯,您的本地計算機不在AWS上運行,因此您必須告知代碼將哪個AWS區域發送給API調用。你在做什麼是同樣的事情。一個EC2服務器上運行

碼不限於進入該EC2服務器是在同一地區使用AWS API。

+0

是啊..它是有道理的。感謝您解釋@Mark B – chaitanya