Open7
Terraformでヒアドキュメントを使用し、HTMLをシンプルに記述する
参考
きっかけ
以下のようにHTMLをTerraformで使用するさい、
複数行になっても対応できるようにしたい。
resource "aws_wafv2_web_acl" "web_acl" {
// 略
custom_response_body {
content = "<h1>maintenance</h1>"
}
いまは1行だから普通に読めるが、複数行のHTMLになったらしんどい
進め方
- HTMLをlocalsで管理する
- HTMLをヒアドキュメントで見やすく記述する
- <<-EOFを使用してインデントを整理する
サンプルHTML
<html>
<head>
<title>Maintenance</title>
</head>
<body>
<h1>Maintenance</h1>
<p>We're currently undergoing scheduled maintenance.</p>
</body>
</html>
①HTMLをlocalsで管理する
aws_wafv2_web_acl
の中で管理してもいいのですが、
見やすくなると思うのでlocalsでhtml_content
変数に格納します。
locals {
html_content = "<html>\n <head>\n <title>Maintenance</title>\n </head>\n <body>\n <h1>Maintenance</h1>\n <p>We're currently undergoing scheduled maintenance.</p>\n </body>\n</html>"
}
resource "aws_wafv2_web_acl" "web_acl" {
// 略
content = local.html_content
}
ヒアドキュメントを使わないとこのように見づらいです。
見やすく修正しましょう
②HTMLをヒアドキュメントで見やすく記述する
ヒアドキュメントを使用するとこのように表現できる
locals {
html_content = <<EOF
<html>
<head>
<title>Maintenance</title>
</head>
<body>
<h1>Maintenance</h1>
<p>We're currently undergoing scheduled maintenance.</p>
</body>
</html>
EOF
}
resource "aws_wafv2_web_acl" "web_acl" {
// 略
content = local.html_content
}
こちらのほうが見やすいですね
しかし出力を確認すると、スペース(もしくはタブ)がはいっています。事故防止のためにスペースをなくしたいです。
<html>
<head>
<title>Maintenance</title>
</head>
<body>
<h1>Maintenance</h1>
<p>We're currently undergoing scheduled maintenance.</p>
</body>
</html>
<<-EOF
を使用してインデントを整理する
③<<-EOF
とハイフンをつけることで、各行がスペースから開始しなくなります
locals {
html_content = <<-EOF
<html>
<head>
<title>Maintenance</title>
</head>
<body>
<h1>Maintenance</h1>
<p>We're currently undergoing scheduled maintenance.</p>
</body>
</html>
EOF
}
resource "aws_wafv2_web_acl" "web_acl" {
// 略
content = local.html_content
}
出力を確認しても問題なさそうです
<html>
<head>
<title>Maintenance</title>
</head>
<body>
<h1>Maintenance</h1>
<p>We're currently undergoing scheduled maintenance.</p>
</body>
</html>