Terraformのヒアドキュメントは改行コードを含めてそのまま保持します。 ということは、特にGit for Windowsを利用している環境では改行コードがLinux/Macとは異なるために不要な差分として検知されることになります。
ヒアドキュメントでJSONをそのまま書いてしまう
× TerrafromのHCLの中に、いきなりJSONが出てくるのでかっこ悪い
× 改行コードの違いがそのまま反映されてしまう
resource "aws_iam_role_policy" "role_policy_cloudwatch_logs" {
role = "${aws_iam_role.role.id}"
policy = <<EOF
{<CRLF>
"Version": "2012-10-17",<CRLF>
"Statement": [<CRLF>
{<CRLF>
"Action": [<CRLF>
"logs:CreateLogGroup",<CRLF>
"logs:CreateLogStream",<CRLF>
"logs:PutLogEvents",<CRLF>
"logs:DescribeLogGroups",<CRLF>
"logs:DescribeLogStreams"<CRLF>
],<CRLF>
"Effect": "Allow",<CRLF>
"Resource": "*"<CRLF>
}<CRLF>
]<CRLF>
}<CRLF>
EOF
}
Terraformはdataを組み立てることが可能なので、それを用いる。
◎ 記法がHCLで統一される
◎ Terraformが機械的にJSONを組み立てるので不要な差分は排除される
data "aws_iam_policy_document" "policy_document_cloudwatch_logs" {
statement {
actions = [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
]
effect = "Allow"
resources = ["*"]
}
}
resource "aws_iam_role_policy" "policy_cloudwatch_logs" {
role = "${aws_iam_role.role.id}"
name = "policy_cloudwatch_logs"
policy = "${data.aws_iam_policy_document.policy_document_cloudwatch_logs.json}"
}