Skip to content

ci: dev デプロイを直列化して CloudFormation の競合を防ぐ(#112) - #113

Merged
limit7412 merged 1 commit into
masterfrom
claude/add-policy-to-issues-vdp4s3-112
Aug 9, 2026
Merged

ci: dev デプロイを直列化して CloudFormation の競合を防ぐ(#112)#113
limit7412 merged 1 commit into
masterfrom
claude/add-policy-to-issues-vdp4s3-112

Conversation

@limit7412

Copy link
Copy Markdown
Owner

close #112

課題

serverless-dev.ymlon: pull_request で全 PR に対して走り、いずれも同じ dev ステージ(CloudFormation スタック github-notifications-slack-dev)へデプロイする。複数 PR がほぼ同時に更新されると、先着以外が下記で落ちる。

✖ ServerlessError2: Stack:.../github-notifications-slack-dev/... is in UPDATE_IN_PROGRESS state and can not be updated.

差分の内容とは無関係で、ビルドは成功したうえで deploy 段階だけが失敗する。再実行で復旧するが、複数 PR を並行して進めると必ず踏む。

変更内容

serverless-dev に concurrency group を設定し、リポジトリ全体で 1 本ずつに直列化する。

concurrency:
  group: serverless-dev
  cancel-in-progress: false
  • group に ref を含めない のが要点。PR ごとに分けると「別 PR と同時に走る」という競合の原因そのものが残る。
  • cancel-in-progress: false。実行中のデプロイを打ち切るとスタックが中途半端な状態で残りうるため、待たせる方を選んだ。

案の比較

issue に挙げた3案のうち案1を採った。

案2(PR ごとにステージを分ける)は採らなかった。 serverless.yml の関数は schedule: rate(1 minute) で動くため、ステージを増やすとその数だけ bot が並走して同じ GitHub アカウントの通知をポーリングし、Slack へ重複投稿したうえで互いに既読化し合う。競合は消えても実害が大きい。PR クローズ時の sls remove の後始末が要る点も含めて割に合わない。

案3(PR での dev デプロイをやめる) は deploy が通るかを PR 時点で確認できなくなるため単独では選ばなかった。

既知の制約

同一 group の待機中 run は最新1本しか保持されず、3本目が来ると待機中だったものは GitHub 側でキャンセルされる。その PR は deploy 未検証のままになるので、確認したい場合は再実行が要る。失敗ではなくキャンセル表示になるので区別はつく。

この挙動はワークフロー側のコメントにも残している。

動作確認

  • concurrency が意図した値でパースされることを確認(group: serverless-dev / cancel-in-progress: False
  • 直列化そのものの検証には複数 PR の同時更新が要るため、実際の効果はこの PR のマージ後に確認することになる

補足

serverless-prod.ymlpush: [master] で同じ構造をしており、master への連続マージで同種の競合が起きうる。この PR のスコープ外なので別途 issue を立てた(本文コメント参照)。


Generated by Claude Code

全 PR が同じ dev ステージへデプロイするため、複数 PR がほぼ同時に更新される
とスタックが UPDATE_IN_PROGRESS のままになり、先着以外が deploy 段階だけで
失敗していた。差分の内容とは無関係に落ちるため都度の手動再実行が必要だった。

serverless-dev に concurrency group を設定してリポジトリ全体で 1 本ずつに
直列化する。ref を含めない固定 group にすることで PR 間の競合を無くし、
実行中のデプロイを中途半端に打ち切らないよう cancel-in-progress は false に
する。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MoGxJDiZa8c2E3PVAnxbK8
@limit7412
limit7412 marked this pull request as ready for review August 9, 2026 17:14
@limit7412
limit7412 merged commit 2c64d95 into master Aug 9, 2026
3 checks passed
@limit7412
limit7412 deleted the claude/add-policy-to-issues-vdp4s3-112 branch August 9, 2026 17:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

複数 PR が同時に dev へデプロイして CloudFormation で競合する

2 participants