現象
Serverless Framework (v 1.27.3) で遭遇したバグで、
scheduleを1つのAPIに対して複数定義する場合、追加定義を途中に挿入すると、定義重複とか言われて、エラーで蹴られることがある。(差分更新しようとしてるが、差分維持しようとした配列管理のschedule定義が、挿入により、新しいIndexに新規生成されたscheduleと、内部計算で算出されるARNが衝突する問題)
例:CloudWatchのトリガーをfunctionsにぶら下げて下記のように定義すると思うが、このとき、既存の定義を維持しつつ、新たな定義を間に追加すると、元々一番最後に定義していたやつが、ARN重複で更新できないよ!エラー!!とか言われることがある。
- schedule:
name: Aggregate-A-${opt:stage}
description: 'Aggregate A'
rate: cron(15 * * * ? *)
enabled: true
input:
aggregateNodeMetricsReq:
foo: 'bar'
- schedule:
name: Aggregate-B-${opt:stage}
description: 'Aggregate B'
rate: cron(15 * * * ? *)
enabled: true
input:
aggregateNodeMetricsReq:
foo: 'bar'
対処策
- scheduleを追加するときは常に最後に追加する
- ARN計算する要素にtimestampとかビルド番号的なのを混ぜる(ただし全トリガー再設定が走って時間かかる)
- 一旦clean or trigger全消去してから、再度設定(もっと時間がry)
APIバージョン的な環境変数用意しておいて、nameとかに付与。
普段は最後に追加して、バージョン変えるときに、整理とかいうハイブリッドな方法が現実的かも。
Issue出てる気もするし、そのうち治るかも。なければIssue出したい気もするが、MPが足りない。