目次

ConoHaのオブジェクトストレージをS3のAPIを使って操作する方法をご紹介します。
オブジェクトストレージについての説明は以下のページにございます。

ConoHaのオブジェクトストレージについて(導入編)

S3のAPIと互換性を持たせる事によりバックエンドを気にせずに周辺ツールを使用する事ができます。


今回はS3Proxyを使います。
インストール方法は、Dockerを使う方法と使わない方法の2つを紹介します。

インストール方法

Dockerを使う方法

まずはDockerを使う方法を紹介します。

Docker ENV

$ docker run -itd -p 8081:80 
    -e S3PROXY_AUTHORIZATION=aws-v2-or-v4 
    -e S3PROXY_IDENTITY=access_key 
    -e S3PROXY_CREDENTIAL=secret_access_key 
    -e JCLOUDS_PROVIDER=openstack-swift 
    -e JCLOUDS_ENDPOINT=https://identity.tyo1.conoha.io/v2.0 
    -e JCLOUDS_IDENTITY="tenant_name:api_user_name" 
    -e JCLOUDS_CREDENTIAL="api_user_password" 
    -e JCLOUDS_REGIONS=tyo1 
    -e JCLOUDS_REGION=tyo1 
    --name s3proxy 
    andrewgaul/s3proxy:e7070762

環境変数でどのような設定ができるかは以下の通りです。

ENV 設定する値 説明
S3PROXY_AUTHORIZATION aws-v2-or-v4 or none S3Proxyで認証するかしないか
S3PROXY_IDENTITY access_key 好きなaccess_keyを設定可能
S3PROXY_CREDENTIAL secret_access_key 好きなsecret_access_keyを設定可能
JCLOUDS_PROVIDER openstack-swift バックエンドに何を使うか
JCLOUDS_ENDPOINT identityのURL
JCLOUDS_IDENTITY テナント名:APIユーザー名
JCLOUDS_CREDENTIAL APIパスワード
JCLOUDS_REGIONS tyo1 or tyo2 リージョン
JCLOUDS_REGION tyo1 or tyo2 上と同じ値を設定


$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                  NAMES
d5721e4d26b1        andrewgaul/s3proxy   "/opt/s3proxy/run-do…"   27 seconds ago      Up 26 seconds       0.0.0.0:8081->80/tcp   s3proxy

Dockerを使わない方法

Dockerを使わない場合はJavaのインストールが必要になります。
yumでもrpmで入れても可能です。

$ rpm -ivh http://javadl.oracle.com/webapps/download/AutoDL?BundleId=235716_2787e4a523244c269598db4e85c51e0c

※値はダブルクォーテーションで囲いません。

$ wget https://github.com/gaul/s3proxy/releases/download/s3proxy-1.6.0/s3proxy
$ mv s3proxy /usr/bin/s3proxy
$ chmod +x /usr/bin/s3proxy
$ cat << EOF > /etc/s3proxy.conf
s3proxy.endpoint=http://localhost:8081
s3proxy.authorization=aws-v2-or-v4
s3proxy.identity=access_key
s3proxy.credential=secret_access_key
jclouds.provider=openstack-swift
jclouds.endpoint=https://identity.tyo1.conoha.io/v2.0
jclouds.identity=tenant_name:api_user_name
jclouds.credential=api_user_password
jclouds.regions=tyo1
jclouds.region=tyo1
EOF
$ s3proxy --properties /etc/s3proxy.conf

AWS CLIのインストール

使えるかどうかの確認にAWS CLIを使用しようと思います。

$ easy_install pip
$ pip install awscli

使い方

$ curl localhost:8081
AccessDeniedForbidden4442587FB7D0A2F9
$ aws s3 ls --endpoint-url http://localhost:8081
Unable to locate credentials. You can configure credentials by running "aws configure".
$ aws configure
AWS Access Key ID [None]: access_key
AWS Secret Access Key [None]: secret_access_key
Default region name [None]: 
Default output format [None]:
$ aws s3 ls --endpoint-url http://localhost:8081
1970-01-01 09:00:00 conoha_container
1970-01-01 09:00:00 conoha_container_segments
$ aws s3 mb s3://conoha_container_2 --endpoint-url http://localhost:8081
make_bucket: conoha_container_2
$ aws s3 ls --endpoint-url http://localhost:8081
1970-01-01 09:00:00 conoha_container
1970-01-01 09:00:00 conoha_container_2
1970-01-01 09:00:00 conoha_container_segments

STEP1

下記のようにListObjectsV2を使ってコンテナ内を見る事はまだサポートされておりません。

$ aws s3 ls s3://conoha_container --endpoint-url http://localhost:8081

An error occurred (NotImplemented) when calling the ListObjectsV2 operation: A header you provided implies functionality that is not implemented.

S3APIを使う事でコンテナ内のオブジェクトを見る事が可能です。

$ aws s3api list-objects --bucket conoha_container --endpoint-url http://localhost:8081
{
    "Contents": [
        {
            "LastModified": "2018-10-19T11:56:13Z", 
            "ETag": ""380fe17da6a09827da0e722f0dbc3e6b"", 
            "StorageClass": "STANDARD", 
            "Key": "seisokawaii", 
            "Owner": {
                "DisplayName": "[email protected]", 
                "ID": "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
            }, 
            "Size": 7
        }
    ]
}
問題は解決できましたか?

お役立ち情報

ConoHaではサポートコンテンツの他にも以下のようなお役立ち情報をご用意しております。ぜひご活用ください。