🧧

AWS Copilot CLI で環境構築中に生じた CloudWatchLogs エラーについて【対応策・原因】

2024/03/08に公開

AWS Copilot CLI で ECS 立ち上げから CI/CD デプロイまで自動化しようと検証した時に起きたエラー。

その時のエラー対応をご紹介したいと思います。

エラー内容

今回起きたエラー内容は以下の通りです。

Resource handler returned message: "Resource limit exceeded. (Service: CloudWatchLogs, Status Code: 400, Request ID: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)" (RequestToken: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX, HandlerErrorCode: ServiceLimitExceeded) 

調べると、Copilot CLI 関連ではないですが、AWS CDK の GitHub 上でも同様のエラー内容が見受けられますね! 結構議論も白熱しているような印象でした。
https://github.com/aws/aws-cdk/issues/20313

エラー対応策

対応策は 「CloudWatchLogs のリソースポリシーの枠を空ける」 ことで処理が通りました!

以下、CloudWatchLogs のリソースポリシーを確認し、その後削除するコマンドです。

$ aws logs describe-resource-policies --region ap-northeast-1

# 上記で確認したポリシーの中で不要なポリシー「AAA」を削除する
$ aws logs delete-resource-policy --policy-name "AAA" --region ap-northeast-1 

各コマンドの詳細はこちらからどうぞ ↓↓

なぜエラーが生じた原因・理由

ではなぜ AWS Copilot CLI で構築中にエラーが起きたのか?

その原因は、 「CloudWatchLogs のリソースポリシーは最大10個までと決められているから」 ということになります。

AWS が公開しているドキュメントにも記載されていますね!
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html

リソース デフォルトのクォータ
リソースポリシー アカウントあたり、リージョンごとに最大 10 CloudWatch Logs リソースポリシー。このクォータは変更できません。

また、この表で記載されているように、このリソースポリシーは、リージョン毎に 10個まで と決められています。(2024年3月現在)

つまり、WAF で WCU の上限緩和や、Elastic IP の上限値変更のように、 何かしらの申請で増加させていくこともできない ということですね。

なので、他のリソース作成時に自動でリソースポリシーが付与されてしまい上限数に達した場合は、整理が必要になります。

リソースポリシーの整理方法

先ほどリソースポリシーは最大10個までとお伝えしました。

しかしながら、色々とリソースを確認したところどのポリシーも必要だった、という場合があるかもしれません。例えば、AWS アカウントが1つしかなく、その中に本番・ステージング・検証環境が混ざってしまっているようなパターンでしょうか。

その時は、describe-resource-policies でポリシーの中身を見た後、サービスやアクションが同じで、リソースが 「*」 でまとめられそうであれば、ポリシーをまとめてあげましょう!

例えば、OpenSearch のログ出力によるポリシーで多く埋まってしまっていたら、

{
    "policyName": "OpenSearchService-logs",
    "policyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"es.amazonaws.com\"},\"Action\":[\"logs:PutLogEvents\",\"logs:CreateLogStream\"],\"Resource\":\"arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/*:*\"}]}",
    "lastUpdatedTime": 9999999999
}

上記のように1つにまとめられたら良いですよね!

その上で、もしまとめられるポリシーがなかったら、他のリージョンで作成したり、AWS Control Tower などを使って新しいアカウントを使ったりすることを検討していきましょう!

まとめ

今回は、AWS Copilot CLI でリソース作成中に、 CloudWatchLogs のリソースポリシー(最大10個まで)に引っ掛かり、CloudFormation でエラーが起きた時の対応策と理由をご紹介しました!

AWS Copilot CLI は環境作成から CI/CD デプロイも含めて、構築を手助けしてくれる便利なサービスです! 是非とも有効活用していきましょう!

今回の記事でエラーが解決し、次のステップに進められたら幸いです!

Discussion