📁
Terraformで外部ファイルを読み込む🪐
前置き
Terraformでfile
、templatefile
を使うと、外部ファイルを読み込むことができます。
今回は特定のs3バケットのみアクセスを許可するIAMポリシーを例にしたいと思います。
policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::test-s3-bucket/*"
}
]
}
外部ファイルを読み込まない(tfファイルにそのまま記載)
ヒアドキュメント内に直接ポリシーをかけます。
main.tf
resource "aws_iam_policy" "sample_policy" {
name = "sample-policy"
description = "Sample IAM policy"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::test-s3-bucket/*"
}
]
}
EOF
}
file
を使用する
policy.json
をfileで参照します。
policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::test-s3-bucket/*"
}
]
}
main.tf
resource "aws_iam_policy" "sample_policy" {
name = "sample-policy"
description = "Sample IAM policy"
policy = file("${path.module}/policy.json")
}
templatefile
を使用する(動的参照)
templatefile
では変数を与えることで、外部ファイル内でその内容が使用出来るようになります。
以下ではpolicy.json
にバケット名(bucket_name
)を与えています。
policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::${bucket_name}/*"
}
]
}
main.tf
resource "aws_iam_policy" "sample_policy" {
name = "sample-policy"
description = "Sample IAM policy"
policy = templatefile("${path.module}/policy.json",
{
bucket_name = "test-s3-bucket"
}
)
}
参考
Discussion