# Terraform × CloudWatch構成でつまずいた話と対処法【AccessDeniedException】
TerraformでCloudWatch Log GroupをIaC化しようとした際に、
**「AccessDeniedException」** に詰まったので、原因と対処法を記録としてまとめます。
初心者にも起こりがちなミスなので、構成の参考や学びの一助になれば嬉しいです。
---
## 🔥 発生したエラー
```bash
Error: setting CloudWatch Logs Log Group retention policy:
AccessDeniedException: User is not authorized to perform: logs:PutRetentionPolicy
CloudWatch Log Groupにログの保持期間(retention)を設定しようとした際に出たエラーです。
🧠 原因
以下の2点が原因でした:
- IAMポリシーに
logs:PutRetentionPolicyが含まれていなかった - Terraformのリソース依存関係を制御する
depends_onを設定していなかった
✅ 対応したこと
IAMポリシーにアクション追加
{
"Effect": "Allow",
"Action": [
"logs:PutRetentionPolicy"
],
"Resource": "*"
}
CloudWatchログの保持期間を設定するには、
このアクションが明示的に許可されていないとTerraformから操作できません。
Terraformに depends_on を追加
IAMロールが作成されてからCloudWatch Log Groupが適用されるように、以下のように追記:
resource "aws_cloudwatch_log_group" "main" {
name = "/aws/ec2/high_cpu_alarm"
retention_in_days = 7
depends_on = [aws_iam_role.cloudwatch_logs] # ロール名に応じて変更
}
これにより、IAMが未反映の状態でLog Groupが先に作られるといったタイミングバグを防げます。
✍️ 学び・気づき
-
PutRetentionPolicyはあまり目立たないが、明示的に許可しないと操作できない - Terraformでは「順序制御」が明示されない限り、並列実行になる点に注意
-
depends_onの活用は本番環境でも重要なIaC設計の要
💻 構成リポジトリ(GitHub公開中)
この構成のコード・設計図はすべてGitHubにて公開しています。
🔗 terraform-aws-portfolio
🙌 最後に
Terraform初心者だった自分でも、エラーにぶつかりながら学びを積み上げることで、
IaCとしての構成力を高めることができました。
同じような構成で悩んでいる方の参考になれば幸いです!
📦 Terraform構成テンプレ(解説付き)販売中!
👉 ココナラで購入する(1,000円)
📦 Terraformテンプレを販売しています!
本記事の構成をベースに、再利用可能な構成テンプレートをBoothで販売しています👇
👉 Terraform × AWS構成テンプレ(Booth)
- 初学者向けでも使いやすい設計
- モジュール分離済み、保守性・可搬性を意識
- 初月は購入者特典で「コードレビュー」付き
※ぜひ導入・改善のベースにご活用ください!