[英]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/
使用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)
該信息可從以下網址獲得: 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.