Что происходит при визуализации шаблона terraform - PullRequest
0 голосов
/ 06 февраля 2020

Я наткнулся на пример кода terraform относительно шаблона_файла в приведенной ниже ссылке

https://blog.james-carr.org/using-templates-in-terraform-17bb8f4a0aac

policy / s3_bucket_readonly. json .tpl

{
"Version": "2012-10-17",
"Statement": [
{
  "Action": [
    "s3:GetObject",
    "s3:ListBucket"
  ],
  "Resource": [
    "arn:aws:s3:::${bucket_name}",
    "arn:aws:s3:::${bucket_name}/${key_prefix}"
  ],
  "Effect": "Allow"
}
]
}

Сценарий Terraform

data "template_file" "cloud-trail-logs-s3-readonly" {
template = "${file("policies/s3_bucket_readonly.json.tpl")}"
vars {
    bucket_name = "${aws_s3_bucket.cloudtrail-logs.bucket}"
    key_prefix = "AWSLogs/*" 
}
}
resource "aws_s3_bucket" "cloudtrail-logs" {
bucket = "cloudtrail-logs"
acl = "private"
lifecycle_rule {
enabled = true
noncurrent_version_expiration {
  days = 30
}
}
}
resource "aws_iam_policy" "cloudtrail-logs-readonly" {
name = "prod-cloudtrail-logs-s3-readonly"
path = "/production/"
description = "Readonly access to cloudtrail-logs bucket"
policy = "${data.template_file.cloud-trail-logs-s3-readonly.rendered}"
}

Может кто-нибудь объяснить, что на самом деле делает $ {data.template_file.cloud-trail-logs-s3-readonly.rendered} ?? Применяет ли он просто значения переменных шаблона к policy / s3_bucket_readonly. json .tpl и добавляет то же самое, что и политика ?? Если да, то, что означает ".rendered" или означает ??

1 Ответ

1 голос
/ 06 февраля 2020

Да, вы правы, даже если ваша формулировка неточна. Это результат шаблона policy / s3_bucket_readonly. json .tpl после применения переменных.

Посмотрите документы (ссылка на атрибуты) https://www.terraform.io/docs/providers/template/d/file.html#attributes -reference

rendered - Последний обработанный шаблон.

Значением политики будет содержимое шаблона после его рендеринга terraform.

После интерпретации HCL (язык terraform называется HCL - язык конфигурации Hashicorp), " $ {bucket_name} " будет эквивалентно " $ {aws_s3_bucket.cloudtrail-logs.bucket}"как передано в ресурсе шаблона в блоке vars и" $ {key_prefix}"до AWSLogs / *

Я думаю" $ {aws_s3_bucket.cloudtrail-logs.bucket}"будет ссылаться на строку" cloudtrail-logs"(значение атрибута bucket в ресурсе aws_s3_bucket)

Таким образом, значение политики должно быть:

{
"Version": "2012-10-17",
"Statement": [
{
  "Action": [
    "s3:GetObject",
    "s3:ListBucket"
  ],
  "Resource": [
    "arn:aws:s3:::cloudtrail-logs",
    "arn:aws:s3:::cloudtrail-logs/AWSLogs/*"
  ],
  "Effect": "Allow"
}
]
}
...