簡體   English   中英

最近AWS區域的客戶端IP地址

[英]Client IP Address to Closest AWS Region

我想從客戶端設備上傳一些數據到AWS,但我想上傳到最近的AWS Region的S3 Bucket。

同樣,我希望能夠從最近的地區下載。

當然,我會在每個地區設置一個水桶

是否有一個我可以使用的系統可能需要客戶端的IP地址,然后確定它是us-west-1,eu-west-1,eu-central-1,ap-northeast-1等?

問題的症結在於此。 我上傳的數據僅對一個人有用,它需要盡快找到那個人。

因此,如果我在英格蘭,我上傳一個文件,我的目標收件人目前在日本(因為他們可能在移動) - 上傳到倫敦AWS區域的ping時間將比靠近日本的區域更高。

基於Route53延遲的路由可以幫助您確定最近的區域。 但是每個區域的存儲桶名稱都不同,所以我不確定如何直接在S3中使用它。

我認為最好的選擇是將CloudFront分配放在單個S3存儲桶前面。 然后,您的用戶可以自動上傳到最近的CloudFront邊緣位置。 https://aws.amazon.com/blogs/aws/amazon-cloudfront-content-uploads-post-put-other-methods/

從IP查找客戶端的位置

使用geoip

pip install python-geoip
pip install python-geoip-geolite2

然后你的代碼看起來像這樣。

from geoip import geolite2
match = geolite2.lookup('8.8.8.8')

print match.location

這產生,(37.386,-122.0838)

查找所有AWS中心的位置

該信息可從以下網址獲得: http//docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html您需要為它們找到地理位置。 這可以用geopy完成

pip install geopy

然后

from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.geocode("Singapore")
print location.latitude, location.longitude

這使

1.2904527 103.852038

您需要為所有位置執行此操作並保存數據。 可能在RDBMS中(如果你正在考慮使用django,django對使用GeoDjango進行地理定位搜索有很好的支持)

終於找到了距離

找到客戶端位置后,讓我們將其稱為l1,找到數據中心位置后,就可以找到距離了

from geopy.distance import great_circle
great_circle(l1.point, l2.point)

那里有距離

找到最近的距離

您可以循環瀏覽所有已保存的位置並找到最近的距離,或者如果您將數據保存在支持地理空間數據的RDBMS中(可以立即想到postgis),您可以使用ST_Distance函數快速有效地執行距離同步小代碼。 如前所述, django對地理空間查詢提供了出色的支持。

如果您使用Postgis / Django,涉及great_circle的循環將被調用st_distance替換。

您可以使用S3提供的“傳輸加速”功能(您可以使用AWS控制台在存儲桶屬性中啟用它)。

文檔: https//docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html

您可能希望在存儲桶上使用傳輸加速,原因有多種,包括:

  • 您的客戶可以從世界各地上傳到集中式存儲桶。
  • 您可以在各大洲定期將千兆字節轉換為數TB。
  • 上傳到Amazon S3時,您未充分利用Internet上的可用帶寬。

使用Boto,您可以從session.Session對象中讀取region_name:

my_session = boto3.session.Session()
my_region = my_session.region_name

region_name定義為session.get_config_variable('region')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM