dshimizu/blog/alpha

とりとめのないITブログ

Serverless Framework で定義していた、複数ある Amazon EventBridge のルールの一部のみの削除に失敗する時のワークアラウンド

はじめに

Serverless Framework の serverless.yml で定義していた複数の EventBridge のルールで、一部のルールを削除してデプロイしたところ、エラーが発生してデプロイに失敗しました。 そのことに関して調べたことのメモです。

エラー内容

具体的には、下記のような 5 個あるルール(設定値は適当)のうちの、3つ目を削除するため serverless.yml から削除してデプロイしたところ、元々 4つ目と5つ目に定義されていたルールで、CloudFormation で内部的に定義されているであろう ID が 3, 4 へと繰り上がろうとし、一時的に同名のリソースが出来上がろうとしたと思われる形でエラーとなります。

  • before
functions:
  hello:
    handler: hello
    events:
      - schedule: rate(1 hours)
      - schedule: cron(0 9 * * ? *)
      - schedule: cron(30 0 * * ? *)
      - schedule:
          rate:
            - cron(0 0/4 ? * MON-FRI *)
            - cron(0 2 ? * SAT-SUN *)
      - schedule: cron(0 13 * * ? *)
  • after
functions:
  hello:
    handler: hello
    events:
      - schedule: rate(1 hours)
      - schedule: cron(0 9 * * ? *)
      #- schedule: cron(30 0 * * ? *)  # これを削除した
      - schedule:
          rate:
            - cron(0 0/4 ? * MON-FRI *)
            - cron(0 2 ? * SAT-SUN *)
      - schedule: cron(0 13 * * ? *)

serverless deploy でデプロイすると以下のようなエラーになりました。

:
CloudFormation - UPDATE_IN_PROGRESS - AWS::Events::Rule - helloEventsRuleSchedule3
CloudFormation - UPDATE_IN_PROGRESS - AWS::Events::Rule - helloEventsRuleSchedule4
CloudFormation - UPDATE_FAILED - AWS::Events::Rule - helloEventsRuleSchedule3
CloudFormation - UPDATE_FAILED - AWS::Events::Rule - helloEventsRuleSchedule4
:

ワークアラウンド

Issueやフォーラムを見ると、現状だとそういう動きになってしまうようです。

回避策としては serverless remove で一旦 CloudFormation スタックごと削除して再作成するか、該当の EventBridge のルール以下を全て削除して一度デプロイし、その後必要なルールを定義した状態にしてもう一度デプロイして再作成する形しかないようでした。

まとめ

Serverless Framework で定義していた、複数ある Amazon EventBridge のルールの一部のみの削除に失敗する時のワークアラウンドについてまとめました。 やや面倒ではありますがデプロイのタイミングを見計らって、一度ルールを一度削除して再作成するような形を取るしかなさそうです。

参考