はじめに
Cloudflare WorkersにReactアプリをデプロイしていたとき、APIキーなどのシークレットをどこに書けばいいか迷いました。
wrangler.toml に直書きすれば動くんですが、当然ながらGitにコミットすると漏洩リスクがある。じゃあどうするか?ということで、Cloudflare Workersでのシークレット登録方法を調べたら3種類あったのでまとめます。
方法1: Cloudflare DashboardのGUIで登録する
一番わかりやすい方法です。
Cloudflare Dashboard の該当プロジェクト > Settings を開くと、「Variables and Secrets」というセクションがあります。ここの「Add」ボタンから登録するだけ。
コマンドラインが苦手な方や、とりあえず試してみたい場合はこれが一番手っ取り早いです。
方法2: wrangler secret put コマンドで登録する
npmのwranglerパッケージに含まれているCLIコマンドで登録する方法です。
$ wrangler secret put <KEY_NAME>
⛅️ wrangler 4.79.0
─────────────────────────────────────────────
✔ Enter a secret value: … ************ # 対話プロンプトが出るので、ここでシークレットを入力
🌀 Creating the secret for the Worker "worker-name"
✨ Success! Uploaded secret <KEY_NAME>
ここでハマりポイントがあります。
シークレットの値はコマンドライン引数ではなく、対話プロンプトで入力する仕様になっています。
GitHub CLIだと gh secret set KEY_NAME --body "foo" のように引数で値を渡せるので、同じノリで wrangler secret put KEY_NAME --value "foo" みたいに書いてしまいがちですが、それはできません(自分はここで混乱しました)。
コマンドを実行するとプロンプトが出るので、そこで入力する形です。
方法3: GitHub Actions の cloudflare/wrangler-action で設定する
自動デプロイを組んでいる場合はこれが便利です。
Cloudflare公式が提供している cloudflare/wrangler-action に secrets パラメータがあり、そこにシークレットの名前を列挙するだけで設定できます。
jobs:
deploy:
steps:
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
environment: production
secrets: |
SECRET1
SECRET2
env:
SECRET1: ${{ secrets.SECRET1 }}
SECRET2: ${{ secrets.SECRET2 }}
仕組みとしては、GitHub Actions の env に値を渡しておいて、secrets で名前を指定すると wrangler-action 側がよしなにCloudflareへ登録してくれる感じです。
CI/CDと組み合わせるなら、この方法が管理しやすくておすすめです。
まとめ・学んだこと
- シークレットは
wrangler.tomlに書かず、3つの方法のどれかで登録する - ちょっと試すだけならDashboardのGUI、開発中はCLI、本番CIならGitHub Actionsが使いやすい
-
wrangler secret putは対話入力なので注意(引数で渡せない) - GitHub Actions連携は
cloudflare/wrangler-actionのsecretsパラメータが便利
