Cloudflare R2 で 10GB まで無料のストレージを使おう！しかも Amazon S3 と同じツールで操作可能！

## はじめに

Cloudflare R2 はオブジェクトストレージのクラウドサービスです

https://www.cloudflare.com/ja-jp/developer-platform/r2/

ざっくり言うと、ファイルをクラウドに保管できます

10 GB までは無料で利用可能です

https://developers.cloudflare.com/r2/pricing

そして嬉しいのが Amazon S3 と互換性があると言うこと

AWS CLI はもちろん、 Cyberduck 等の S3 対応ツールであれば R2 でも同じように使えます

本記事では、 Cloudflare R2 の使い方を紹介します

:::note info
Cloudflare Pages や CLoudflare Workers の場合、クレジットカード登録なしで使用できますが、 R2 はクレジットカードが必要です
:::

Cloudflare Pages についてはこちら

https://qiita.com/RyoWakabayashi/items/2d40b6e8ae7ddee092db

Cloudflare Workers についてはこちら

https://qiita.com/RyoWakabayashi/items/97fdc2036ad154d11fea

## R2 の利用開始

Cloudflare アカウントを持っていない場合、まずはアカウントを作成してください

https://qiita.com/RyoWakabayashi/items/bd9a96290758e11883e8

アカウント作成後、ホーム画面の左メニュー「R2」をクリックします
R2 を初めて使う場合、クレジットカードの登録を求められます
必要な情報を登録してください

![スクリーンショット 2024-02-07 9.23.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/6260b716-23cc-b8b8-7a96-cffc52d4ec44.png)

クレジットカード登録後、以下のような画面が表示されます

![スクリーンショット 2024-02-07 9.23.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/90a203ef-f615-6e7b-a0a7-ec3f90f98712.png)

## ブラウザからの操作

### ブラウザからのバケット作成

まずはバケット（=バケツ=データの入れ物）を作ります
青い「バケットを作成する」ボタンをクリックしてください

![スクリーンショット 2024-02-07 9.23.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/90a203ef-f615-6e7b-a0a7-ec3f90f98712.png)

バケット名を適当な名前（他と重複しない名前）に変更し、「バケットを作成する」をクリックします

![スクリーンショット 2024-02-07 9.24.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f9de819e-66c1-8077-0dcc-b2676c7e2f3d.png)

空のバケットが作成されました

### ブラウザからのオブジェクト操作

「ドラッグアンドドロップするか...」と書かれているエリアにファイルをドロップすると、アップロードできます

![スクリーンショット 2024-02-07 9.24.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/31c84360-82eb-c590-5ecf-ac9314305857.png)

アップロードしたファイルが一覧表示され、個別にダウンロードや削除が可能です

![スクリーンショット 2024-02-07 9.28.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/779e7006-3d11-c2c6-1466-cd3a610b18de.png)

## AWS CLI からの操作

Cloudflare R2 は Amazon S3 互換なので、 AWS CLI からも操作可能です

https://aws.amazon.com/jp/cli/

### AWS CLI 用の認証情報作成

AWS CLI から操作するため、認証情報（「アクセスキー ID」と「シークレットアクセスキー」）を作成します

R2 の概要ページ右メニューの「R2 API トークンの管理」をクリックしてください

![スクリーンショット 2024-02-07 9.23.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/90a203ef-f615-6e7b-a0a7-ec3f90f98712.png)

API トークンの管理画面が表示されるので、「API トークンを作成する」をクリックします

![スクリーンショット 2024-02-07 9.29.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/daf3c0aa-4b5e-8ab8-ba3a-9689ebd438a0.png)

適当なトークン名を入力し、権限は「管理者読み取りと書き込み」を選択します
「API トークンを作成する」をクリックしてください

![スクリーンショット 2024-02-07 9.30.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/e721141c-cd89-ffc4-0c80-f74204a847c6.png)

R2 にアクセス可能な API トークンが作成されました

下段に表示されている「アクセスキー ID」と「シークレットアクセスキー」、エンドポイントの URL （デフォルト）を使うことになります

![スクリーンショット 2024-02-07 9.32.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/85eb5c37-2027-d349-0b57-62fffd23a41b.png)

### AWS CLI への認証情報の登録

以下のコマンドを実行し、取得した認証情報を AWS CLI に登録します

```sh
aws configure --profile <任意のプロファイル名>
```

プロファイル名を環境変数に設定しておきます

:::note warn
以下、 macOS 、 Linux の場合のコマンドになっています
:::

```sh
export R2_PROFILE='<設定したプロファイル名>'
```

エンドポイントの URL を環境変数に設定しておきます

```sh
export R2_ENDPOINT='<エンドポイントの URL>'
```

### AWS CLI からのバケット作成

バケット名を環境変数に設定しておきます

```sh
export R2_BUCKET='<バケット名>'
```

以下のコマンドを実行して空のバケットを作成します

```sh
aws s3 mb "s3://${R2_BUCKET}" \
  --region auto \
  --profile $R2_PROFILE \
  --endpoint-url $R2_ENDPOINT
```

結果が `make_bucket: <バケット名>` と返ってきます

ブラウザから R2 の概要ページを読み込むと、新しいバケットが作成できていることが分かります

### AWS CLI からのファイルアップロード

適当なファイルを作成します

```sh
echo 'hello' > hello.txt
```

ファイルを R2 にアップロードします

```sh
aws s3 cp ./hello.txt "s3://${R2_BUCKET}/" \
  --profile $R2_PROFILE \
  --endpoint-url $R2_ENDPOINT
```

結果が `upload: ./hello.txt to s3://<バケット名>/hello.txt` と返ってきます

ブラウザから当該バケットの内容を確認すると、 hello.txt が追加されています

### AWS CLI からのファイル一覧取得

以下のコマンドで R2 のファイル一覧が取得できます

```sh
aws s3 ls "s3://${R2_BUCKET}/" \
  --profile $R2_PROFILE \
  --endpoint-url $R2_ENDPOINT
```

以下のように結果が返ってきます

```sh
2024-02-08 09:19:30          6 hello.txt
```

ダウンロードや削除についても AWS CLI と同様に操作可能です

## S3 API との互換性について

以下のページに S3 API との互換性について詳細に説明されています

https://developers.cloudflare.com/r2/api/s3/api/

R2 API で実装していないものについては操作ができません

## Cyberduck からの操作

AWS S3 の GUI ツールとしてよく使っている Cyberduck でも R2 に接続可能です

https://cyberduck.io/

新しい接続を作る際、以下のように入力することで R2 バケットに接続できます

- 「Amazon S3」を選択
- 「サーバ」にエンドポイントのホスト名を入力
- 「アクセスキーID」と「シークレットアクセスキー」を入力

![スクリーンショット 2024-02-08 9.29.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/3f6c486a-697d-6b58-569e-bdef5d56629c.png)

接続すると、 GUI からバケットの一覧、バケットの内容確認、ファイル操作ができます

![スクリーンショット 2024-02-08 11.26.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/ea30705a-3a32-6ece-2749-a1d1d3afa424.png)

## まとめ

Cloudflare R2 にバケットを作成し、ファイル操作することができました

AWS CLI や Cyberduck から S3 と同じように操作でき、 AWS ユーザーなら違和感なくすぐ使い始められます

使い方いよっては S3 よりも安価に使えるため、マルチクラウドも検討してみましょう