Oracle Cloud オブジェクトストレージでディレクトリとして疑似アクセス (cli)

# はじめに

Oracle Cloud の Object Storage サービスには、ディレクトリという概念はありません。ただ、ディレクトリとして疑似的に扱うことが出来るため、その方法をやってみた内容の記事です。

ちなみに、AWSのS3にもディレクトリは存在していませんが、マネージメントコンソールでS3バケットを開いた時の「見た目」だけディレクトリが見えるような仕組みになっています。

Oracle Cloud では、oci cli を使用すると疑似的にディレクトリ構造としてObject Storage を扱うことができます。

# Object Storageで Bucket 作成

```
oci os bucket create --name sugi-bucket --public-access-type NoPublicAccess --storage-tier Standard
```



# 疑似ディレクトリ環境を構築

bucket へ ファイルをアップロードする際に、名前にディレクトリ名を付与することで、疑似的にディレクトリを扱うことが出来ます。
以下のような構成を作成していきましょう

- guitar
  - gibson
        - stratocaster
        - telecaster
  - fender
        - lespaul
        - jazzmaster
        - mustang
- base
    - fujigen
        - precisionbase
        - jazzbase
  - lakland
        - precisionbase
        - jazzbase


例えば、guitar/gibson/storatocaster の場合は、以下のように `--name` にディレクトリとしたい名前を含めてアップロードします

```
oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name guitar/gibson/storatocaster
```



以下コマンドを打って、すべてのファイルをアップロードします

```
oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name guitar/gibson/storatocaster
oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name guitar/gibson/telecaster

oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name guitar/fender/lespaul
oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name guitar/fender/jazzmaster
oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name guitar/fender/mustang

oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name base/fujigen/precisionbase
oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name base/fujigen/jazzbase

oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name base/lakland/precisionbase
oci os object put --bucket-name sugi-bucket --file '/home/sugi/test2/test.txt' --name base/lakland/jazzbase
```



# cliを使用して疑似的にディレクトリとして扱う

以下のコマンドで、最も親のディレクトリのlistを取得します。response に prefixes として最も親のディレクトリの一覧が返ってきます。 

```
> oci os object list --bucket-name sugi-bucket --delimiter '/'
{
  "prefixes": [
    "base/",
    "guitar/"
  ]
}
```



次に、 guitar ディレクトリ以下の list を取得します

```
> oci os object list --bucket-name sugi-bucket --delimiter '/' --prefix 'guitar/'
{
  "prefixes": [
    "guitar/fender/",
    "guitar/gibson/"
  ]
}
```



次に、guitar/fender 以下の list を取得します

```
> oci os object list --bucket-name sugi-bucket --delimiter '/' --prefix 'guitar/fender/'                                           2406ms{
  "data": [
    {
      "md5": "2Oj8otwPiW/Xy0ywAxuiSQ==",
      "name": "guitar/fender/jazzmaster",
      "size": 5,
      "time-created": "2019-02-05T01:28:30.516000+00:00"
    },
    {
      "md5": "2Oj8otwPiW/Xy0ywAxuiSQ==",
      "name": "guitar/fender/lespaul",
      "size": 5,
      "time-created": "2019-02-05T01:28:27.895000+00:00"
    },
    {
      "md5": "2Oj8otwPiW/Xy0ywAxuiSQ==",
      "name": "guitar/fender/mustang",
      "size": 5,
      "time-created": "2019-02-05T01:28:33.158000+00:00"
    }
  ],
  "prefixes": []
}
```



get も可能です

```
oci os object get --bucket-name sugi-bucket --name guitar/fender/mustang --file mustang
```







# 参考URL

https://docs.cloud.oracle.com/iaas/Content/Object/Tasks/managingobjects.htm#ObjectNamingUsingPrefixesandHierarchies