s3 本地测试环境的搭建

Posted on 2015-09-30 20:20 in Python

s3 ninja

http://s3ninja.net/ s3 ninja 在本地模拟S3 API, 而且自带一个管理界面, 但是需要修改代码或者增加配置,把endpoint_url指定为 http://localhost:9444/s3

如果我们不想修改代码,可以通过一些简单的配置把请求导向本地 s3 ninja

s3 virtual hosted-style and path-style access

访问s3 bucket上的文件,有两种方式:

# example bucket名字 johnsmith  文件 homepage.html

# Path Style
http://s3.amazonaws.com/johnsmith/homepage.html

# Virtual HostedStyle
http://johnsmith.s3.amazonaws.com/homepage.html

更多信息参考

http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/VirtualHosting.html

如何配置

我们要达到的目的如下,把原本对亚马逊的HTTP请求指向本地的S3 ninja

mybucket.s3.amazonaws.com -> localhost:9444:s3/mybucket

/etc/hosts

添加一行:

127.0.0.1 mybucket.s3.amazonaws.com

这样可以把亚马逊的域名指向本地,但是端口和访问路径Path的修改需要nginx来实现

nginx

nginx 把127.0.0.1:80 的请求转向 127.0.0.1:9444

配置文件如下:

server {
listen       80;
server_name  localhost;
location / {
    proxy_pass http://127.0.0.1:9444;
    rewrite ^(.*)$ /s3/mybucket$1 break; #例如 /homepage.html => /s3/mybucket/homepage.html
}

配置多个bucket

上面的配置只说了一个bucket的情况,如果有多个bucket需要测试,我们使用nginx virtualhost的功能就可以做到,把server_name 改成 bucket的域名就行

推荐工具

在 Mac 上 gas mask 可以很方便的切换和编辑hosts文件 http://clockwise.ee/

在 Mac 上 安装 nginx,可以使用brew install nginx http://brew.sh/ 启动命令 sudo nginx, sudo nginx -s reload