概要
以下構成を構築してみます。
+-------------------------------------------+
| S3クライアント ( AWS CLI , AWS SDK for Java ) |
+----+--------------------------------------+
|
+----v--------------------------------------+
| プロキシサーバ ( nginx ) 192.168.0.100:10080 |
+----+--------------------------------------+
|
+----v--------------------------------------+
| S3 ( minio ) 192.168.1.100:9000 |
+-------------------------------------------+
S3互換オブジェクトストレージ ( minio )
ワンコマンドで起動。
$ docker run -p 9000:9000 --name minio1 \
-e "MINIO_ACCESS_KEY=minio" \
-e "MINIO_SECRET_KEY=miniotest" \
-v /mnt/data:/data \
minio/minio server /data
AccessKey、SecretAccessKeyは以下となります。
key | value |
---|---|
AccessKey | minio |
SecretAccessKey | miniotest |
nginx
192.168.0.100:10080でlistenし、
minio(192.168.1.100:9000)にproxyする設定例です。
server {
listen 10080;
server_name 192.168.0.100;
ignore_invalid_headers off;
location / {
proxy_pass http://192.168.1.100:9000;
proxy_http_version 1.1;
}
}
S3クライアント
プロキシサーバ経由でS3にアクセスする設定、実装例を紹介します。
AWS CLI
profileを設定しておきます。
$ aws configure --profile minio
AWS Access Key ID [None]: minio
AWS Secret Access Key [None]: miniotest
Default region name [None]:
Default output format [None]:
$
環境変数HTTP_PROXY
でプロキシサーバを指定できます。
参考 : HTTP プロキシを使用する - AWS Command Line Interface
$ HTTP_PROXY=http://192.168.0.100:10080 aws --profile minio --endpoint-url http://192.168.1.100:9000 s3api create-bucket --bucket example
AWS SDK for Java
ClientConfiguration
にプロキシサーバのHost, Portを設定できます。
参考 : クライアント側の設定 - AWS SDK for Java
import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
public class Example {
private static final String endpoint = "http://192.168.1.100:9000";
private static final String region = "ap-northeast-1";
private static final String accessKey = "minio";
private static final String secretAccessKey = "miniotest";
// proxy
private static final String http_proxy = "http://192.168.0.100";
private static final int http_proxy_port = 10080;
public void exemple(){
ClientConfiguration clientConf = new ClientConfiguration();
clientConf.setProxyHost(http_proxy);
clientConf.setProxyPort(http_proxy_port);
AmazonS3 client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new EndpointConfiguration(endpoint, region))
.withClientConfiguration(clientConf)
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretAccessKey)))
.build();
client.createBucket("test");
}
}
まとめ
S3 ( minio ) とプロキシサーバ ( nginx ) を構築しクライアント ( AWS CLI , AWS SDK ) からアクセスする手順を紹介しました。
S3を利用する開発環境の構築などに役立ちましたら幸いです。