このページでは、GitHub Actionsを使用して、Cloudflare Workersをデプロイする方法を説明します。
前提
このページで紹介する方法は、Cloudflare WorkersのStatic Assets機能を利用したワーカーをデプロイすることを想定します。
デプロイするワーカーの設定ファイルのイメージは次のとおりです。
name = "sample"
compatibility_date = "2024-12-05"
main = "src/index.ts"
[site]
bucket = "./public"
なお、wrangler.toml
は、リポジトリにコミットしているものとします。
事前準備
GitHub ActionsからCloudflareに認証するには、CloudflareのアカウントIDとAPIトークンが必要です。
また、デプロイすると実行ログにワーカーURLが出力されます。
実行ログのURLをマスクしたい場合は、ワーカーURLも確認します。
アカウントIDとワーカーURLの確認
-
Cloudflareのダッシュボードにログインします。
-
左メニューから[Compute (Workers)]>[Workers & Pages]の順でクリックします。
-
右ペインの「Account details」で、次の項目をメモします。
- Account ID:アカウントIDです。
- Subdomain:ワーカーURLのサブドメインです。
APIトークンの生成
次の手順でAPIトークンを生成します。
Cloudflare Workersへのデプロイ用のテンプレートが用意されていますが、不要なスコープを多く含みます。
そのため、ここでは1からスコープを付与する方法で、APIトークンを生成します。
-
右上のプロフィールアイコンから[My Profile]をクリックします。
-
左メニューから[API Tokens]をクリックします。
-
[Create Token]をクリックします。
-
[Create Custom Token]をクリックします。
-
「Token name」にトークン名を入力します(例:「GitHub Actions」)。
-
「Permissions」で次のPermissionを付与します。
- Account
- Workers KV Storage - Edit
- Workers Scripts - Edit
- User
- Memberships - Read
- User Details - Read
- Account
-
[Continue summary]をクリックし、[Create token]をクリックします。
-
生成されたAPIトークンをメモします。
APIトークンは生成時にだけ表示されるため、必ずメモしておきましょう。
GitHub Actionsの設定
GitHub Action Secretの追加
GitHubのリポジトリの設定で、事前設定で確認したアカウントIDやAPIトークン、ワーカーURLを、GitHub Action Secretに追加します。
-
リポジトリを開き、[Settings]タブを選択します。
-
左メニューから[Secret and Variables]>[Actions]の順でクリックします。
-
「Repository secrets」の[New repository secret]をクリックし、それぞれ次のシークレットを追加します。
CF_ACCOUNT_ID
:事前準備でメモしたアカウントIDCF_API_TOKEN
:事前設定でメモしたAPIトークン
-
実行ログのURLをマスクしたい場合は、シークレットに
CF_WORKERS_URL
も追加します。
値は、<ワーカー名>.<事前準備でメモしたワーカーURL>
です。
たとえば、ワーカー名が「sample」で、ワーカーURLが「username.123456789.workers.dev」の場合、「sample.username.123456789.workers.dev」です。
ワークフローの作成
.github/workflows/deploy.yml
に、次のワークフローを作成します。
今回は、任意のタイミングでデプロイしたいため、workflow dispatchを実行トリガーにしています。
name: deploy
on:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
jobs:
deploy:
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@v4
# npm管理ツールにpnpmを使っている場合は記載する
- uses: pnpm/action-setup@v4
with:
version: 9
- name: Install dependencies
run: pnpm install --shamefully-hoist
env:
CI: true
# 実行ログのURLをマスクしたい場合だけ記載する
# 本来、GitHub Actions Secretに登録したシークレットは、自動でマスクされる
# ただ、マスキングされないこともあったので、念の為マスク機能を使う
- name: Mask secrets
run: echo "::add-mask::${{ secrets.CF_WORKERS_URL }}"
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
accountId: ${{ secrets.CF_ACCOUNT_ID }}
apiToken: ${{ secrets.CF_API_TOKEN }}
ワークフローの実行
[Actions]タブからDeployワークフローを開き、[Run workflow]でワークフローを実行します。
デプロイの成功や、ワーカーURLがマスクされたことを確認します。
wrangler.toml
に秘匿情報を含む場合
Cloudflare Workersの設定ファイルには、環境変数やD1のデータベース名など、リポジトリにコミットしたくない情報を含むことがあります。
その場合、wrangler.toml
をリポジトリにコミットせず、設定例としてwrangler.toml.sample
を作ることがあり得ます。
秘匿すべき情報は、wrangler.toml.sample
内で<YOUR_SECRET>
のように仮の値で表現します。
name = "sample"
# ...略...
[vars]
HOST = "<YOUR_SECRET>"
このようなワーカーをGitHub Actionsでデプロイする場合、デプロイの前に次のことを行います。
wrangler.toml.sample
をwrangler.toml
にリネーム- 仮の値を、あらかじめGitHub Actions Secretに追加したシークレットの値に置換
以下の例では、あらかじめCF_ENV_HOST
というシークレットを登録している
したがって、次のステップをワークフローに追記します。
+ - name: Edit wrangler.toml
+ run: |
+ mv ./wrangler.toml.sample ./wrangler.toml
+ sed -i 's|<YOUR_SECRET>|${{ secrets.CF_ENV_HOST }}|' ./wrangler.toml
- name: Deploy
ステップを追記したワークフローを実行すると、環境変数を設定できたことを確認できます。
ワーカーの設定画面でも、GitHub Actions Secretに追加したシークレットが設定されたことを確認できます。