Рубрики
Uncategorized

Как пройти переменные к файлу JSON в террафоре

Допустим, вы создаете политику IAM с террафом, используя отдельный файл JSON, который включает в себя … Помечено террафом, AWS, DEVOPS.

Допустим, вы создаете политику IAM с террафом, используя отдельный файл JSON, который включает в себя заявление для политики.

В типичном заявлении у нас есть 4 значения для удовлетворения. Это сид, эффект, действие и ресурс.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Policy Name",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::mytestbucket"
            ]
        }
    ]
}

Как мы должны динамически изменять значения ресурса и SID в этом утверждении?

Ну, террафом имеет ресурс данных под названием template_file. С этим мы можем легко пройти параметры динамически на наш файл оператора.

Демо время!

Во-первых, нам нужно создать пользователь, политику и ведро. Затем мы будем использовать ведро, арну в нашем заявлении. Я использую переменные для большинства вещей, чтобы иметь чистый код.

resource "aws_iam_user" "iam-user" {
    name = var.iam_user_name
}

resource "aws_s3_bucket" "s3-bucket" {
    bucket = "mytestbucket"
}

resource "aws_iam_user_policy" "iam-policy" {
    name = var.iam_policy_name
    user = aws_iam_user.iam-user.name
}

Обычно мы можем приложить политику JSON следующим;

(«/path/to/policy.json»)

Поскольку мы хотим пройти параметры в файл JSON, мы будем использовать ресурс данных, называемый «Template_file».

Для того, чтобы использовать его, мы должны переименовать наше расширение JSON на тплс . С этим мы отмечаем, что мы хотим использовать этот файл в качестве шаблона.

Теперь мы изменим наш файл шаблона с помощью синтаксиса интерполяции. Мы пройдем параметры как для SID, так и для ресурса.

"Statement": [
    {
        "Sid": "${sid-name}",
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket"
        ],
        "Resource": [
            "${resource-name}"
        ]
    }
]

Вернуться к нашему основным файлам, мы добавим ресурс Template_File.

data "template_file" "iam-policy-template" {
    template = file("/path/to/policy.tpl")

    vars = {
        sid-name = "Policy for S3 Access"
        resource-name = aws_s3_bucket.sample_bucket.arn
    }
}

Здесь мы указали Варс Блок и внутри мы используем переменные из файла шаблона. Теперь мы можем использовать эти данные в нашем ресурсе политики IAM.

Обратите внимание, что мы получаем доступ к представленной версии нашего шаблона.

resource "aws_iam_user_policy" "iam-policy" {
    name = var.iam_policy_name
    user = aws_iam_user.iam-policy.name

    policy = data.template_file.iam-policy-template.rendered
}

Оригинал: «https://dev.to/ustundagsemih/how-to-pass-variables-to-a-json-file-in-terraform-57k1»