CloudWatch Event のルール修正時に出るエラー 'statementId' failed to satisfy constraint の回避策

記事タイトルとURLをコピーする

SRE部 佐竹です。
今回は AWS マネジメントコンソールにおいて CloudWatch Event の Rule 修正時に発生するエラーについて記載します。

はじめに

先日ブログで紹介しました、Amazon WorkSpaces Cost Optimizer の実装時にエラーに見舞われましたので、解決策をご紹介します。

ちなみに、このエラーは EventBridge では発生しません。

blog.serverworks.co.jp

発生するエラー

f:id:swx-satake:20200916174318p:plain

Error
There was an error while saving rule AmazonWorkSpacesCostOptim-CostOptimizerScheduleRul-KKZGYKZGYKZGY.
Details: 1 validation error detected: Value 'AWSEvents_AmazonWorkSpacesCostOptim-CostOptimizerScheduleRul-KKZGYKZGYKZGY_666d0bd7-ccb5-455a-5bca-bcafa29a1222' at 'statementId' failed to satisfy constraint: Member must have length less than or equal to 100.

上記のエラーは、Amazon WorkSpaces Cost Optimizer の CloudFormation によってデプロイされた CloudWatch Event の Rule において、Cron を修正するときに発生しました。

Amazon WorkSpaces Cost Optimizer の 日次の実行時間は、毎日23:55 GMT(UTC)となっています。
※画像は設定変更後

f:id:swx-satake:20200916173745p:plain

これを任意の値に変更したい、というシーンはあるかと思いますが、マネジメントコンソールから修正を行うとエラーになってしまいます。

回避策

エラーの回避策ですが、 CLI 等から実行すれば回避可能です。一例として、CloudWatch Event における Rule の Cron 書式を変更するコマンドを紹介します。

  • 設定確認コマンド
aws events describe-rule --name [変更対象のルール名]
  • 変更コマンド
aws events put-rule --name [変更対象のルール名] --schedule-expression "cron(00 03 * * ? *)"

原因

原因は以下の通りです。

CloudWatch Events のマネジメントコンソールからルールの新規作成または設定変更を行う場合には、ターゲットに Lambda 関数が設定されている場合、変更対象のルールが Lambda 関数を呼び出せるよう CloudWatch 側が自動的にリソースベースのポリシー を Lambda 関数に追加する動作となります。
この際、ポリシーのステートメント ID (StatementId) をサービス側で自動的に設定しますが、その時に利用される「命名規則」が以下の通りとなります。

AWSEvents<ルール名><ターゲットID>

このステートメント ID の上限文字数は 100 文字となっているため、今回自動作成された CloudWatch Event の Rule 名が長すぎて上限を超えてしまうためエラーとなります。ちなみに数えたところ、Rule 名だけで64文字でした。一部を書き換えていますが、先に紹介した SatementId AWSEvents_AmazonWorkSpacesCostOptim-CostOptimizerScheduleRul-KKZGYKZGYKZGY_666d0bd7-ccb5-455a-5bca-bcafa29a1222 は「111文字」でした。

以下は公式ドキュメントからの引用です。

A statement identifier that differentiates the statement from others in the same policy.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 100.

docs.aws.amazon.com

まとめ

f:id:swx-satake:20200917103121p:plain:w200

今回は CloudWatch Event の Rule 修正時にマネジメントコンソールで発生するエラーとその回避策について記載しました。

'statementId' failed to satisfy constraint: Member must have length less than or equal to 100.

上記エラーが発生して悩んだときは参考にしてみてください。

ではまた、お会いしましょう。

佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ

マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023 Japan AWS Top Engineers/2020-2023 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。