メインコンテンツへスキップ
見出し画像

配信予約処理で盛大にやらかした件

     前回の記事でYouTube Live配信スケジュール作成を自動化してみました。

    で、本日(これ書いてるときは日付またいでますが)5/1 9:00AMに初回の処理が流れたので結果を見てみます。
    ※[]で囲っているところはマスクしてる箇所です。

    悪夢のタイムアウトとリトライ

     まずはCloudWatchのログを確認。

    START RequestId: [RequestId] Version: $LATEST
    2026-05-01T00:02:42.882Z [RequestId] Task timed out after 120.07 seconds
    END RequestId: [RequestId]

    REPORT RequestId: [RequestId] Duration: 120073.39 ms Billed Duration: 120955 ms Memory Size: 128 MB Max Memory Used: 95 MB Init Duration: 954.01 ms

    CloudWatch Logs

    タイムアウトしてますね!しかもこれがAWSの標準リトライ仕様で3発起きています。
    「返事がないから失敗したんだな」とAWSが良かれと思って再実行を繰り返した結果、Live配信スケジュールを見てみると……。

    画像
    3回ジョブが走った結果、同じ枠が重複して作成されている惨状

    作成はされてますね、3回ジョブが走って!

    画像
    恐る恐る確認すると、予約配信がなんと155個!まさに「爆撃」状態です。

    予約配信155個!

    原因の分析:なぜ落ちたのか?

     以前、テストで正常終了したときのログと見比べてみます。

    INIT_START Runtime Version: python:3.14.v39 Runtime Version ARN: arn:aws:lambda:ap-northeast-1::runtime:[xxxxxxxxxxxxx]

    START RequestId: [RequestId] Version: $LATEST

    Created: 2026-04-30T00:00:00Z (ID: [broadcastID])
    END RequestId: [RequestId]

    REPORT RequestId: [RequestId] Duration: 105133.76 ms Billed Duration: 105926 ms Memory Size: 128 MB Max Memory Used: 95 MB Init Duration: 792.10 ms

    CloudWatch

    正常時で105秒。デフォルトの2分(120秒)設定では、ネットワークのちょっとした遅延でアウトになるギリギリのラインだったんですね。メモリもMAX128MBに対して95MB使用と、かなりカツカツでした。

    対策:Lambdaの設定を見直す

     このままでは毎月爆撃機が飛んでしまうので、設定を「鉄壁」モードに変更します。

    とりあえずタイムアウト3分、メモリ512MB、リトライ0回で再設定してみましょう!

    Lambdaコンソールの「設定」タブ>「一般設定」から編集を開始します。

    画像
    現状の設定

    前述のとおりメモリを512MB、タイムアウトを3分にします。

    画像
    メモリを512MB、タイムアウトを3分に引き上げ。
    CPUパワーも上がるので通信処理も速くなるはず。

    一般設定の更新完了。これで「余裕」が生まれました。

    画像
    保存してこうなりました。

    次に、二次被害を防ぐための「再試行回数」の変更です。これをしておかないと、万が一失敗したときにまた連打されます。

    「設定」タブ>「非同期呼び出し」を選択します。

    画像
    現状の設定

    再試行回数を「0」に設定。失敗したときは、勝手に動かず止まっていただきましょう。

    画像
    再試行0回。

    安全装置の設定完了です。

    画像

    リベンジ:テスト実行

     修正した環境で、改めてテストを回してみます。

    コードタブから「Test」を叩きます。

    画像

    キャプション:ステータスコード200!今度はしっかり最後まで走りきりました。

    画像

    最終的な完走ログがこちら。

    INIT_START Runtime Version: python:3.14.v39 Runtime Version ARN: arn:aws:lambda:ap-northeast-1::runtime:xxxxxxxxxxxxx

    START RequestId: [RequestId] Version: $LATEST

    END RequestId: 5[RequestId]

    REPORT RequestId: [RequestId] Duration: 146845.41 ms Billed Duration: 148012 ms Memory Size: 512 MB Max Memory Used: 98 MB Init Duration: 1165.85 ms

    CloudWatch

    実行時間は147秒。以前の120秒設定では絶対に到達できなかった領域です。 メモリ消費量は98MBと大きく変わりませんが、128MBでガベージコレクションが頻発して処理が停滞するよりは、512MBの広大な土地でゆったり動いてもらう方が安定感がありますね。

    まとめ:自動化の先にある「運用の洗礼」と次なる一歩

     今回のトラブルシューティングを経て痛感したのは、「テスト環境の成功は、本番の安定を保証しない」というエンジニアリングの鉄則でした。128MBというリソース制限下での「120秒の壁」は、ネットワークの僅かな揺らぎで牙を剥き、結果として155個の重複予約という「API爆撃」を引き起こしました。

    しかし、メモリを512MBへ増強し、再試行回数を0に設定するという「守り」を固めたことで、147秒という実行時間をかけて確実に完走させる安定性を手に入れることができました。

    さて、これで配信枠の作成は安泰ですが、今回の件で「何が起きているか外から見える化すること」の重要性を再認識しました。次は、お仕事でも馴染みのある Datadog へCloudWatch Logsを転送する設定が必要になりそうです。

    仕組みを一つ作るたびに、やりたいこと(やらねばならぬこと)が次々と溢れ出してくる……。これぞまさに、エンジニアの「終わりのない旅」ですね。

    2026/5/4追記:

     ストリームキーの指定ができていない、自動開始/自動停止がオフになっているで配信枠は用意されてても配信が自動開始されませんでした!
    ダメじゃん!

     
     
    情シス1年生、といいつつ元SIerの下請け。 汎用機からオープン系、NW、MW、DBまで開発、運用、構築、設計、営業、コンサルなんでもやってました。 ドムドムとバーキンが主食。プルャ amazonのリンクはAmazonアソシエイトです。

    あなたへのおすすめ