Terraform에서 JSON 파일에 변수를 전달하는 방법

2783 단어 awsterraformdevops
정책에 대한 설명이 포함된 별도의 json 파일을 사용하여 Terraform으로 IAM 정책을 생성한다고 가정해 보겠습니다.

일반적인 명령문에는 4개의 값을 만족해야 합니다. 이들은 Sid, Effect, Action 및 Resource입니다.

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

이 문에서 Resource 및 Sid 값을 어떻게 동적으로 변경해야 합니까?

Terraform에는 template_file.이라는 데이터 리소스가 있습니다. 이를 통해 매개변수를 명령문 파일에 동적으로 쉽게 전달할 수 있습니다.

데모 타임!



먼저 사용자, 정책 및 버킷을 생성해야 합니다. 그런 다음 명령문에서 버킷 ARN을 사용합니다. 깨끗한 코드를 만들기 위해 대부분의 일에 변수를 사용하고 있습니다.

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 정책을 연결할 수 있습니다.

policy = file("/path/to/policy.json")

json 파일에 매개변수를 전달하고 싶기 때문에 "template_file"이라는 데이터 리소스를 사용합니다.

그것을 사용하려면 json 확장자의 이름을 tpl로 바꿔야 합니다. 이것으로 우리는 이 파일을 템플릿으로 사용하고 싶다고 말합니다.

이제 보간 구문을 사용하여 템플릿 파일을 수정합니다. Sid와 Resource 모두에 대한 매개변수를 전달합니다.

"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
    }
}

여기에서 vars 블록을 지정하고 내부에서 템플릿 파일의 변수를 사용합니다. 이제 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
}

좋은 웹페이지 즐겨찾기