■発生事象
新規にRedisのスローログをCloudWatch Logsへ出力する設定を行ったところ、設定時にエラーは発生しなかったものの、ログのステータスが「Error」と表示され、CloudWatch Logsへの出力が確認できませんでした。
エラーの原因と解消方法について、記事に残したいと思います。
■原因
AWSでCloudWatch Logs出力設定を行う際、通常はAWS側で自動的に生成されるリソースポリシーにロググループ名が追加されます。
しかし、今回のケースでは、自動で生成されるポリシーの文字数制限(5120文字)を超過していたため、リソースポリシーにロググループ名が追加されず、CloudWatch Logsにログが出力されない状況でした。
なお、すべてのサービスが自動生成の対象ではありません。
以下のページを参照し、CloudWatch Logsの列にて「[V1 アクセス許可]」もしくは「[V2 アクセス許可]」と記載されているサービスが対象となります。
■リソースポリシー確認方法
CloudWatch logのリソースポリシーはAWSコンソールのIAMポリシーには表示されません。AWS CloudShellなどでAWS CLIを使用することで、確認することができます。
$ aws logs describe-resource-policies
■対処方法
文字数上限が近づくと、自動的にAWS側でポリシー内に「/aws/vendedlogs/*」を追加します。
そのため、「/aws/vendedlogs/」配下にロググループ名を指定することで、CloudWatch Logsへの出力が可能です。
また、ロググループやリソースを削除した場合でも、リソースポリシーの記述は自動的には削除されません。
リソースポリシー内の記述をまとめるのも、対処として有効です。
■まとめ
CloudWatch Logsへのログ出力設定を行う際には、ポリシーの文字数制限を意識する必要があります。また、設定時にエラーが発生した場合は、AWS CLIを使用してリソースポリシーを確認し、対処を講じる必要があります。
本記事が少しでもお役に立てれば幸いです。