Linode Object Storage のファイルを検索する方法

この記事では Linode のオブジェクトストレージ内のファイルを検索する方法を紹介します。
ユースケースとしてはファイルの有無や最終更新日時の確認です。

## Object Storage の GUI で不便なところ
Object Storage のポータルにはファイルの一覧を確認できる機能があります。
しかし、ここでは Path やファイル名での検索ができません。
ファイル数が多い場合は探しているファイルが出てくるまでスクロールし続ける必要があります。

![linode-portal-objectstorage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/e5d8faea-df3e-b152-d7bf-fc3be535f756.jpeg)

これではいくら時間があっても足りません。
そこで今回は API を利用して対象のファイルの情報を取得していきます。

## API Token の発行
以下の記事をもとに API Token を取得してください
[Linode ポータルからトークンを取得する](https://qiita.com/110hideki/items/91491d684cd794632652#linode-%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB%E3%81%8B%E3%82%89%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B)

## API を呼び出す

以下の API ドキュメントをもとに API を呼び出します。

[List Object Storage bucket contents](https://techdocs.akamai.com/linode-api/reference/get-object-storage-bucket-content)

まずは API で対象の Bucket のファイル情報を取得できるか確認してみましょう。

慣れていない方は上記のドキュメント内で自身の Bucket 情報や Credential （API Token）を入力することで、リクエストに利用する curl コマンドを生成してくれます。

:::note info
`regionId` は以下のページでも確認できます。
[Supported endpoint types by region](https://techdocs.akamai.com/cloud-computing/docs/object-storage-product-limits#supported-endpoint-types-by-region)
:::

![objectstorage-path-params.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/f6798d5f-ca39-9cbd-eec1-9459f8ba213f.png)

![objectstorage-credential-curl-request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/7ed8fa8d-405c-b48a-7196-2c8d603de4c8.png)

```bash
curl --request GET \
     --url 'https://api.linode.com/v4/object-storage/buckets/jp-osa-1/example-bucket/object-list?page_size=100' \
     --header 'accept: application/json' \
     --header "authorization: Bearer 3c21934ef3fefd4jkf04e79174c3352370633d7aa4c78635d4d3647d6e7c2xg" \
| jq

{
  "data": [
    {
      "name": "path/to/example_1.jpg",
      "size": 1022382,
      "last_modified": "2023-10-02T05:39:25.243Z",
      "etag": "d105471fe628c27771782b0c4b21fcwd",
      "owner": "08e3ff2c-7654-4457-848d-cb9d733tdssw"
    },
    {
      "name": "path/to/example_2.jpg",
      "size": 325302,
      "last_modified": "2023-07-20T02:37:36.741Z",
      "etag": "d41d8cd98f00b204e9800998ecfedcgd",
      "owner": "08e3ff2c-7654-4457-848d-cb9d733tdssw"
    },

[output omitted]

  ],
  "next_marker": null,
  "is_truncated": false
}
```
:::note info
今回は JSON の出力を見やすくするためにコマンドの末尾に jq をつけています。
:::

情報が取得できることを確認したら次は Path で検索していきます。

## Path でフィルターする
API リクエストに `prefix` というパラメータを付与することで、Bucket 内の特定ファイルの情報のみを取得できます。

:::note info
`prefix` での検索は前方一致のため、path を含めて入力する必要があります。
前方一致のため、`path/to/example_1.jpg` というファイルを検索する場合は `path/to/example_` のような形式でも検索できます。
:::

API ドキュメントの `QUERY PARAMS` という項目に `prefix` がありますので、そこに検索したいファイルを Path を含めて記載してください。


![objectstorage-query-params.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/ab5f8edb-64a6-9f2b-9f80-9c63a2ec5f94.png)

:::note info
Path の最初の `/` は不要です
:::

入力すると `prefix` がクエリパラメータに含まれた curl コマンドが生成されます。

```bash
curl --request GET \
     --url 'https://api.linode.com/v4/object-storage/buckets/jp-osa-1/example-bucket/object-list?prefix=path%2Fto%2Fexample_1.jpg&page_size=100' \
     --header 'accept: application/json' \
     --header "authorization: Bearer 3c21934ef3fefd4jkf04e79174c3352370633d7aa4c78635d4d3647d6e7c2xg" \
| jq

{
  "data": [
    {
      "name": "path/to/example_1.jpg",
      "size": 1022382,
      "last_modified": "2023-10-02T05:39:25.243Z",
      "etag": "d105471fe628c27771782b0c4b21fcwd",
      "owner": "08e3ff2c-7654-4457-848d-cb9d733tdssw"
    }
  ],
  "next_marker": null,
  "is_truncated": false
}
```

この方法で特定のファイルの情報のみを取得できます。

## まとめ

Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください。
- [Akamai 営業担当者へのお問い合わせ](https://www.akamai.com/ja/why-akamai/contact-us/contact-sales)

# 関連記事

アカマイ・テクノロジーズ合同会社の Qiita では、 Akamai Connected Cloud 関連などの開発者向けの記事を掲載しております。

https://qiita.com/xenbase/items/52e2956a64cedc772bd9