Cloudflare Tunnelって何?
TunnelはパブリックIPやポート解放を必要とせず、外部からサービスにアクセスできる便利なサービスです。
これはCloudflare ZeroTrustのサービスで、無料で利用できます。
PagesとTunnelの比較
料金 | リクエスト制限 | サーバーレス | 柔軟性 | 難しさ | |
---|---|---|---|---|---|
Pages | Free ~ | 100,000 /day | ⚪︎ | △ | 低 |
Tunnel | Free | 無制限 | × | ⚪︎ | 高 |
-
Pages
Pagesはサーバーレス重視な代わり柔軟性が低い印象。
大量のリクエストを捌くAPIとかは従量課金のためおすすめできない。 -
Tunnel
Tunnelはサーバーが必要だが、柔軟性が高い印象。
完全無料のため、サーバーさえ確保できていればこちらの方がおすすめ。
ただし、インフラ等のプログラミング以外の知識もある程度必要。
手元でTunnelを起動
以下のスクリプトを任意の場所に設置し、chmod +x
で実行権限をつけます
実行方法は./cftunnel.sh <tunnel name> <domain> <url>
です
例:./cftunnel.sh test test.example.com http://localhost:3000
注意書き:
-
cloudflared
は適宜インストールする必要があります。
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/ - すでにあるtunnelと同じ名前を指定した場合、上書きされます。DNSも同様です。
- 実行終了後、tunnelの削除、DNSの削除はされないので手動でする必要があります。
#!/bin/bash
GREEN='\033[0;32m'
RESET='\033[0m'
PS4="[ ${GREEN}OK${RESET} ] "
set -x
if [ ! -e "$HOME/.cloudflared/cert.pem" ]; then
cloudflared tunnel login
fi
if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
cloudflared tunnel delete "$1" 2> /dev/null
cloudflared tunnel create "$1" 2>&1 \
| sed -nE 's/.*([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}).*/\1/p;q' \
| xargs -I{} mv $HOME/.cloudflared/{}.json "$HOME/.cloudflared/${1}.json"
cloudflared tunnel route dns -f "$1" "$2"
cat <<-EOF | tee $HOME/.cloudflared/${1}-config.yaml
tunnel: ${1}
credentials-file: .cloudflared/${1}.json
no-autoupdate: true
ingress:
- hostname: ${2}
service: ${3}
- service: http_status:404
EOF
fi;
if [ -e "$HOME/.cloudflared/${1}-config.yaml" ]; then
cloudflared tunnel --config $HOME/.cloudflared/${1}-config.yaml run
fi