Terraform Apply를 실행하기 전에 데이터 리소스의 출력을 렌더링하는 방법이 있습니까?

Terraform Apply를 실행하기 전에 데이터 리소스의 출력을 렌더링하는 방법이 있습니까?

계획에서 데이터 리소스(예: 정책 문서)의 JSON을 볼 수 있도록 하고 싶습니다. 현재 이러한 유형의 리소스는 적용 중에만 "렌더링"됩니다.

실행하기 전에 볼 수 있는 방법이 있는지 알고 싶습니다 terraform apply.

내 코드는 다음과 같습니다.

data "aws_iam_policy_document" "my_policy" {
  statement {
    sid = "S3"
    effect = "Allow"
    actions = ["s3:*"]
    resources = [
      aws_s3_bucket.some-bucket.arn,
      "arn:aws:s3:::another-bucket/*",
      "arn:aws:s3:::another-bucket/"
    ]
  }
  statement {
    sid = "CloudWatch"
    effect = "Allow"
    actions = ["logs:*"]
    resources = [
      aws_cloudwatch_log_group.some_lambda.arn,
      "arn:aws:logs:us-east-1:123456789123:log-group:/some/log/group:*",
      "arn:aws:logs:us-east-1:123456789123:log-group:/some/log/group"
    ]
  }
}

답변1

Terraform은 계획 단계에서 데이터 리소스의 전체 구성이 알려진 경우에만 계획 단계에서 데이터 리소스에서 읽습니다.

귀하의 경우에는 aws_s3_bucket.some-bucket.arn및 에 대한 참조가 모두 aws_cloudwatch_log_group.some_lambda.arn있으며 원격 API가 객체 생성의 일부로 객체에 대한 ARN을 결정하기 때문에 계획 중에 해당 값이 알려지지 않은 것 같습니다.

따라서 계획 중에 이 정책을 볼 수 있는 유일한 방법은 해당 두 객체가 이미 생성되어 해당 ARN이 이전 실행에서 이미 알려진 것입니다.

이를 달성하는 한 가지 방법은 처음에 해당 객체를 생성하기 위해 구성의 일부만 적용하는 것입니다.

terraform apply -target=aws_s3_bucket.some-bucket -target=aws_cloudwatch_log_group.some_lambda

Terraform은 두 개체와 그 개체가 의존하는 다른 항목을 생성하도록 제안해야 하지만 아직 데이터 리소스나 이에 의존하는 다른 항목은 읽지 않습니다. 해당 계획을 수락하고 Terraform이 해당 객체를 생성하도록 허용하면 이후에 terraform apply정상적으로 실행할 수 있으며 Terraform은 두 번째 계획 단계에서 이 데이터 리소스를 읽을 수 있으므로 두 ARN을 사용하여 이 정책의 최종 값을 표시할 수 있습니다. 이미 삽입되었습니다.

관련 정보