/streaming
Use when ライブ配信用 Vultr VPS・動画配信本体を Terraform で構築・運用・トラブルシュートするとき。「ライブ配信」「24/7 配信」「配信止まった」で発動。ライブチャット自動返信は /reply の live mode を使う
何ができるか
Terraform で Vultr VPS を構築し、YouTube ライブ配信を開始・監視・復旧する運用スキルです。初回構築から動画差し替え、帯域確認、障害調査、VPS の破棄までを案内します。既定は 24/7 連続配信で、アーカイブを残したい場合は 11 時間配信 + 1 時間休止へ切り替えられます。
| mode | すること | 主な確認先 |
|---|---|---|
| 初回構築 | VPS、cloud-init、動画転送、配信開始 | terraform plan / terraform output |
| 動画差し替え | VPS を作り直さず動画だけ更新 | deploy resource の replace |
| 監視・復旧 | service、帯域、アーカイブ、配信枠を診断 | systemd / Discord / recovery result |
| 破棄 | VPS を削除して課金を止める | terraform destroy |
24/7 ライブ配信を始めたいとき
/streaming
Terraform、SSH 鍵と ssh-agent、1Password の Vultr API key・stream key・Discord webhook、operator IP の /32 CIDR を確認します。terraform plan でリソースと動画品質を確認し、明示承認後に apply すると配信が始まります。secret は tfvars に書かず TF_VAR_* 環境変数で渡します。
配信動画を差し替えたいとき
swap script で plan を確認してから apply します。動画 hash だけが変わる通常ケースでは deploy resource だけが置き換わり、VPS 自体は残ります。24/7 配信中は数秒から数十秒の中断があるため、必要なら告知や休止時間を調整してください。
配信停止や帯域を調べたいとき
service status と journal を起点に、stream key、動画破損、SSH、通知を切り分けます。24/7 運用は bandwidth check、11 時間 + 1 時間運用は archive check を使います。ingest が動いているのに active 配信枠だけが消えた場合は、broadcast recovery を必ず dry-run してから復旧します。ライブチャット返信は /reply --live の担当です。
長期休止して課金を止めたいとき
Vultr API key を再注入し、terraform destroy の対象を確認して VPS を破棄します。service の停止だけでは VPS の時間課金は続くため、長期休止では destroy まで完了してください。
つまずいたら
Permission denied (publickey)—ssh-add -lを確認し、毎セッション~/.ssh/yt_stream_keyを ssh-agent へ登録してください。手動のssh -i成功だけでは provisioner の確認になりません- plan が動画品質で止まる — キーフレーム間隔、ビットレート、H.264 profile を確認して配信向けに再エンコードしてください
- Discord 通知が来ない — healthcheck の environment と journal を確認してください。secret が trace に出るため
bash -xは使いません - 24/7 なのに archive check が不足を示す — 日次アーカイブ数は 11 時間 + 1 時間運用だけの指標です。24/7 では service、ingest、broadcast recovery を確認してください
- VPS が増えそうな plan になる — workspace とチャンネル別の環境変数を照合し、意図しない instance replace が含まれる場合は apply しないでください
リファレンス
発動フレーズ
- ライブ配信
- 24/7 配信
- 配信止まった
前後工程
前工程:なし後工程:なし委譲先:なし
成果物
書き込む:infra/terraform/streaming/terraform.tfvars,/var/lib/youtube-broadcast-recovery/last-result.json読み込む:infra/terraform/streaming/.terraform/terraform.tfstate,infra/terraform/streaming/README.md
想定 API call 数
| API | call 数 / 実行 | 変動要因 |
|---|---|---|
| Vultr VPS(terraform apply) | API call 数ではなく VPS 存在中は時間課金が継続 | 稼働時間(terraform destroy まで) |
| liveStreams.list(1 unit、yt-fetch-stream-key) | 1 | — |
| search.list + videos.list(≈ 101 units、yt-stream-archive-check) | 各 1 | — |
| search.list(100 units / ページ、yt-stream-bandwidth –report のみ) | ページ数分 | アーカイブ本数(default 実行は Vultr API / ローカルのみで無料) |
| liveBroadcasts.list + liveStreams.list(yt-stream-broadcast-recover) | 1〜3 | active 枠ありは 1、ingest inactive は 2、復旧判定は 3 |
| liveBroadcasts.insert + bind + transition(yt-stream-broadcast-recover) | 0〜3 | --dry-run / no-op は 0、upcoming の再利用状況により 1〜3 |
- 上限 / 承認:
terraform planで apply 前に差分確認し、§5 のterraform destroyで課金を停止する。yt-stream-archive-check は read のみで書き込みなし。yt-stream-broadcast-recover は必ず最初に--dry-runで予定 action を確認し、同じ--titleを再試行時も使う。
前提
最初に Terraform 資産と実行場所の確定 を実行し、上流 AUTOMATION_ROOT・対象 CHANNEL_DIR・TF_DIR を確定する。以下の相対パスとコマンドは上流 root 基準。動画など下流の入力は絶対パスで渡す。
以下を確認し、満たさなければ整備手順(各項目に記載、詳細は README §前提)を案内してから先へ進む:
terraform1.15.x /python3/uv/ 1Password CLI (op)- SSH 鍵
~/.ssh/yt_stream_key{,.pub}(無ければssh-keygen -t ed25519 -f ~/.ssh/yt_stream_key) - ssh-agent に秘密鍵を登録済み(
ssh-add ~/.ssh/yt_stream_key)。null_resource.deploy.connectionはagent = trueで ssh-agent 経由に接続するため、未登録だと apply 時にPermission denied (publickey)で失敗する。ssh-add -lで登録済み鍵を確認できる。OS 再起動・再ログイン時に agent は空に戻る(毎セッション再登録が必要)。ssh -i ~/.ssh/yt_stream_key経由の手動 SSH は agent 状態と独立で検証手段にならない(詳細は README §前提) - 1Password に以下が登録済み:
op://Personal/Vultr/api_keyop://Personal/YouTube/stream_key(未登録ならyt-fetch-stream-key --vault=Personal --item=YouTubeで自動取得)op://Personal/YouTube_Stream_Discord_Webhook/url(死活監視通知)
- operator のグローバル IP を
/32CIDR でallowed_ssh_cidrに渡せること(Vultr ファイアウォールで SSH 22/tcp を operator IP のみに制限する。curl -s ifconfig.meで取得)