ご利用ガイドオブジェクトストレージを使う(S3 API編)

目次

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

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

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": "CustomersName@amazon.com", 
                "ID": "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
            }, 
            "Size": 7
        }
    ]
}
問題は解決できましたか?

ご回答ありがとうございます。

ご回答受け付けました。ご協力ありがとうございました。