Posted at

fakes3+nginxで結合テスト用S3を立てる

More than 3 years have passed since last update.

S3がダウンした場合の結合テストをしたい事はよくある。そんな時はfakes3が便利。以下の感じで簡単にモックを立てられる。

# fakes3 server -r /tmp -p 80

でも、実際に結合テストに使おうとすると課題が出てくる。


1. httpとhttpsの両方サポートしないといけない

ライブラリによっては、httpとhttpsの両方の口を開けておかないといけない。以下でSSL対応できる。

# fakes3 server -r /tmp -p 443 --sslcert=/path/to/cert  --sslkey=/path/to/key

80番ポートと443番ポート両方別々にプロセスを立てて、ディレクトリだけ共有したらいいけどなんかいまいち。


2. nginxのヘッダ転送

fakes3をhttp/httpsの両方対応させるために、fakes3の前段にリバースプロキシとしてnginxを置く。

最初の設定

server {

listen 80;

location / {
proxy_pass http://127.0.0.1:8080;
}
}

server {
listen 443 ssl;
server_name *.example.com;
ssl_certificate /path/to/cert;
ssl_certificate_key /path/to/key;

location / {
proxy_pass http://127.0.0.1:8080;
}
}

この設定では、fakes3までリクエストは通るけど、何故かfake s3上にファイルが作られなかった

ここをみると、fakes3はHostヘッダを見てbucket名を特定するため、nginxでHostヘッダをfakes3に転送する必要がある。

修正後

server {

listen 80;

location / {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
}

server {
listen 443 ssl;
server_name *.example.com;
ssl_certificate /path/to/cert;
ssl_certificate_key /path/to/key;

location / {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
}

これでうまくいった。あとはfakes3をいじれば、s3のダウンとか、変なハングとかをモックできる。