CLIからCloudflare Pagesへのコンテンツアップロードを試す (Using Wrangler from the command line)¶
「そうだ。自分だけのブログサイトを公開しよう!」17歳の女子高校生が必ず通る道である。 そういう日が必ずある。自分にとってそれは今日だった。
たとえば Cloudflare Pages で静的WEBサイト(当ブログのような)をホスティングしたいと考えたとき、Cloudflareはいくつかのコンテンツアップロード方法を提供してくれている。
Connect to Git
- Direct Upload
Drag and Drop: WEBコンソールからのzipファイルをアップロードする
Wrangler: CLIツール(wrangler)を使ってコマンドラインからzipファイルまたは単一ディレクトリをアップロードする
この投稿は、Direct Upload > Wrangler の実施方法について確認した際のメモにあたる。 なお、実際の運用ではWranglerをGitLab CI上で実行するタスクに組み込んだりするのだが、まず最初に手元で環境を作って試すのは大事だと思う。
参考にした一次情報は以下のとおり。
今回の検証環境の前提情報は以下の通りである。
また、 Cloudflareへのサインアップ、Zoneの作成、Pagesプロジェクトの作成等、Webサイト開設に必要な手続きは事前に完了していることとする。
Wrangler v2の実行環境の構築¶
まず、簡単のためにWrangler v2.4.2を含むDocker imageを作成しておく。 Dockerfileの内容はごく簡単に以下の通り。
$ cat << 'EOF' | tee Dockerfile >/dev/null
From node:19-bullseye-slim
RUN npm install -g wrangler@2.4.2
WORKDIR /home/node
EOF
適当にタグを付けてimageをビルドする。
docker build -t gho4d76g/wrangler:0.1 .
ビルドしたDocker imageで wranglerコマンドのバージョンを確認する。
docker run -it --rm gho4d76g/wrangler:0.1 /usr/local/bin/wrangler --version
意図した通り、2022/11/21時点の最新バージョン (v2.4.2)がインストールされている。
⛅️ wrangler 2.4.2
-------------------
ついでに、v2系のhelpを確認しておく。
docker run -it --rm gho4d76g/wrangler:0.1 /usr/local/bin/wrangler --help
wrangler
Commands:
wrangler init [name] 📥 Create a wrangler.toml configuration file
wrangler dev [script] 👂 Start a local server for developing your worker
wrangler publish [script] 🆙 Publish your Worker to Cloudflare.
wrangler delete [script] 🗑 Delete your Worker from Cloudflare.
wrangler tail [worker] 🦚 Starts a log tailing session for a published Worker.
wrangler secret 🤫 Generate a secret that can be referenced in a Worker
wrangler secret:bulk <json> 🗄️ Bulk upload secrets for a Worker
wrangler kv:namespace 🗂️ Interact with your Workers KV Namespaces
wrangler kv:key 🔑 Individually manage Workers KV key-value pairs
wrangler kv:bulk 💪 Interact with multiple Workers KV key-value pairs at once
wrangler pages ⚡️ Configure Cloudflare Pages
wrangler queues 🇶 Configure Workers Queues
wrangler r2 📦 Interact with an R2 store
wrangler dispatch-namespace 📦 Interact with a dispatch namespace
wrangler d1 🗄 Interact with a D1 database
wrangler pubsub 📮 Interact and manage Pub/Sub Brokers
wrangler login 🔓 Login to Cloudflare
wrangler logout 🚪 Logout from Cloudflare
wrangler whoami 🕵️ Retrieve your user info and test your auth config
wrangler types 📝 Generate types from bindings & module rules in config
wrangler deployments 🚢 Displays the 10 most recent deployments for a worker
Flags:
-c, --config Path to .toml configuration file [string]
-e, --env Environment to use for operations and .env files [string]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
すでにCloudflare Pagesのプロジェクトが作成されているとして、当該プロジェクトに対してコンテンツのDirect Uploadする場合に利用するコマンドは wrangler pages publish
になる。
このコマンドのヘルプも一緒に確認しておく。
docker run -it --rm gho4d76g/wrangler:0.1 /usr/local/bin/wrangler pages publish --help
1wrangler pages publish [directory]
2
3🆙 Publish a directory of static assets as a Pages deployment
4
5Positionals:
6 directory The directory of static files to upload [string]
7
8Flags:
9 -e, --env Environment to use for operations and .env files [string]
10 -h, --help Show help [boolean]
11 -v, --version Show version number [boolean]
12
13Options:
14 --project-name The name of the project you want to deploy to [string]
15 --branch The name of the branch you want to deploy to [string]
16 --commit-hash The SHA to attach to this deployment [string]
17 --commit-message The commit message to attach to this deployment [string]
18 --commit-dirty Whether or not the workspace should be considered dirty for this deployment [boolean]
19
20🚧 'wrangler pages <command>' is a beta command. Please report any issues to https://github.com/cloudflare/wrangler2/issues/new/choose
注釈
ヘルプメッセージよれば、v2.4.2においては、 wrangler pages
以下のサブコマンドはベータ扱いのようである。
CloudflareのAPIトークン取得する¶
Wrangler CLIを利用して Cloudflare Pagesプロジェクトにコンテンツをアップロードするために必要となるAPIトークンを取得する手順を確認する。
Cloudflareコンソールにログインし、User Menuを開き、Account Home を開く。
API Tokens から Create Token を実行し、Cloudflare Pagesコンテンツアップロード専用のAPIトークンを発行してみる。
Cloudflareでは目的に応じてAPIトークンに対する権限の割当を設定できるようになっている。 いくつかの目的に応じたAPIトークンの権限プリセット ( API token templates ) が用意されているが、今回の目的では、Create Custom Token を選択し、必要最小限の権限を付与すれば良いだろう。
具体的には:
- Permissions
Account / Cloudflare Pages / Edit
User / MemberShips / Read
User / User Details / Read
- Account Resoruces
自アカウント名だけ includeすればよい
- Client IP Address Fileterling
今回は特に設定しない
- TTL
今回は特に設定しない
Continue to summary を押下し、権限の概要を確認する。
Create Token を押下するとAPI Tokenが作成されるので、API Tokenをパスワード管理ツールなどに控えておく。
スクリーンショットにあるように、発行されたAPI Tokenをテストするエンドポイント ( https://api.cloudflare.com/client/v4/user/tokens/verify
)が用意されているので、実際に確認してみた。
export CLOUDFLARE_API_TOKEN="9Uy*********"
export CLOUDFLARE_TOKEN_VERIFY_ENDPOINT="https://api.cloudflare.com/client/v4/user/tokens/verify"
curl -s -X GET "${CLOUDFLARE_TOKEN_VERIFY_ENDPOINT=}" \
-H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \
-H "Content-Type:application/json" | jq .
結果は以下のようになった。
1{
2 "result": {
3 "id": "57d*************************",
4 "status": "active"
5 },
6 "success": true,
7 "errors": [],
8 "messages": [
9 {
10 "code": 10000,
11 "message": "This API Token is valid and active",
12 "type": null
13 }
14 ]
15}
Direct Uploadを実行する¶
Wrangler CLIは、環境変数 CLOUDFLARE_API_TOKEN
を読み取ってくれるので、事前に環境変数定義ファイルを作成しておく。
$ cat << 'EOF' | tee ./cloudflare.env >/dev/null
CLOUDFLARE_API_TOKEN=9Uy*********
EOF
試しに、構成済みのCloudflare Pages Projectのリストを問い合わせて見る。
docker run -it --rm \
--env-file cloudflare.env \
gho4d76g/wrangler:0.1 wrangler pages project list
次のような出力になる(どうでもいいけどリッチすぎるTUI出力は個人的にあまり好きではない)。
┌──────────────┬──────────────────────────────────────┬──────────────┬───────────────┐
│ Project Name │ Project Domains │ Git Provider │ Last Modified │
├──────────────┼──────────────────────────────────────┼──────────────┼───────────────┤
│ blog │ ****-***.pages.dev, www.gho4d76g.org │ Yes │ 1 week ago │
└──────────────┴──────────────────────────────────────┴──────────────┴───────────────┘
Would you like to help improve Wrangler by sending usage metrics to Cloudflare? (y/n)
Your choice has been saved in the following file: ../../root/.config/.wrangler/metrics.json.
You can override the user level setting for a project in `wrangler.toml`:
- to disable sending metrics for a project: `send_metrics = false`
- to enable sending metrics for a project: `send_metrics = true`
最後に、Cloudflare Pages Project に対してカレントディレクトリにある _website
ディレクトリをアップロードしてみよう。
docker run -it --rm \
--env-file cloudflare.env \
--volume $(pwd):/home/node \
gho4d76g/wrangler:0.1 wrangler pages publish _website -project-name blog
以下のようなメッセージが出力され、無事Cloudflare Pagesに反映された(どうでもいいけどリッチすぎるTUI出力は個人的にあまり好きではない)。
1🌏 Uploading... (100/100)
2
3 ✨ Success! Uploaded 13 files (87 already uploaded) (2.09 sec)
4
5 ✨ Deployment complete! Take a peek over at https://*****.****.pages.dev
6 Would you like to help improve Wrangler by sending usage metrics to Cloudflare? (y/n)
7 Your choice has been saved in the following file: ../../root/.config/.wrangler/metrics.json.
8
9 You can override the user level setting for a project in `wrangler.toml`:
10 - to disable sending metrics for a project: `send_metrics = false`
11 - to enable sending metrics for a project: `send_metrics = true`
以上のように、Wrangler CLIを使って非常に簡単にCloudflare Pagesプロジェクトにコンテンツをアップロードできることが確認できた。
CI/CDとの組み合わせによる自動化の構築も非常に容易でしょう。
かえる㌠からは以上です。