概要
CloudflareのR2のバケットにCLIを使ってファイルをバケットにアップロードする方法を簡単にまとめる。
なぜCLIなのか
CloudflareのR2はブラウザ経由のドラックアンドドロップのファイルアップロードにも対応している。
しかしながら「一度に100ファイルまで、1ファイルは300MBを超えてはならない」という成約がある。
そのためその上限に抵触するファイルをアップロードするときはCLIを使わないといけない。
前提
-
今回は下記のような内容が記載されたindex.htmlファイルをアップロードを行う
index.html<h1>Hello Cloudflare R2</h1>
-
ローカルPCにで
$ aws
コマンドが実行できること(実行できなかった場合はこちら→ Mac AWS CLIコマンドを実行できるようにする) -
アップロード先のR2のバケットが作成されていること( 筆者はtestというバケットを用意)
方法
嘘のようで本当の話だが、CloudflareのR2のコマンドラインからの操作ではAWSCLIを用いる。
その方法を順を追ってまとめてみる。
APIトークンの用意
-
Cloudflareにログインし、サイドバーでR2をクリック
-
「R2 API トークンの管理」 をクリック
-
「APIトークンを作成する」をクリック
-
下記のように設定、完了後「APIトークンを作成する」をクリック
- トークン名: R2 Token
- 権限: オブジェクト読み取りと書き込み
- バケットの指定: 特定のバケットにのみ適用(testバケットを指定)
- TTL: 無制限
- クライアント IP アドレスフィルタリング: 設定しない
-
「アクセスキーID」「シークレットアクセスキー」「S3クライアントエンドポイント」が出力されるのでそれぞれメモしておく(画面上の案内の通り、それぞれの値はこの画面から遷移してしまうと再表示が未来永劫できないので注意する。忘れてしまったら素直にAPIキーを作り直すしか無い。実は「S3クライアントエンドポイント」だけは部分的に確認する事ができる)
各種キーの割当
前述の作業で取得したAPIキー類をAWSCLIの設定に保存する
-
下記を実行してAWSCLIの設定を実施
aws configure
-
下記のように設定する
AWS Access Key ID [None]: 先ほど生成した「アクセスキーID」の値 AWS Secret Access Key [None]: 先ほど生成した「シークレットアクセスキー」の値 Default region name [None]: us-east-1 Default output format [None]: json
アップロード
いよいよアップロードだ。デスクトップにあるindex.htmlをtestバケット直下にアップロードしたい。
-
アップロードする際のコマンドの例
aws s3 cp ローカルPC側のファイル s3://バケット名/アップロード先のファイル名 --endpoint-url 先ほど生成した「S3クライアントエンドポイント」
-
実際のコマンドは下記(一部一意な情報は伏せる)
aws s3 cp index.html s3://test/index.html --endpoint-url 先ほど生成した「S3クライアントエンドポイント」
-
エラーが出なかったらアップロードはおそらく成功しているはずなので、R2のバケット直下を見てみるとindex.htmlを発見、どうやらアップロードは成功した模様
-
ここまでできれば完了
「S3クライアントエンドポイント」を失念してしまったら
下記で割り出す事ができる。
参考文献