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: $HOME/.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
