Existe uma maneira de renderizar a saída de um recurso de dados antes de executar o terraform apply?

Existe uma maneira de renderizar a saída de um recurso de dados antes de executar o terraform apply?

Gostaria de poder ver o JSON de um recurso de dados (como um documento de política) no plano. Atualmente este tipo de recursos apenas “renderiza” durante a aplicação.

Quero saber se existe uma maneira de ver isso antes de executar o terraform apply.

Aqui está o meu código:

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

Responder1

O Terraform lerá um recurso de dados durante a fase de planejamento se, e somente se, toda a configuração do recurso de dados for conhecida durante a fase de planejamento.

No seu caso, você tem referências a aws_s3_bucket.some-bucket.arnand aws_cloudwatch_log_group.some_lambda.arne suspeito que nenhum desses valores seja conhecido durante o planejamento porque a API remota decide o ARN de um objeto como parte de sua criação.

Portanto, a única maneira de ver essa política durante o planejamento seria se esses dois objetos já tivessem sido criados e seus ARNs já fossem conhecidos de uma execução anterior.

Uma maneira de conseguir isso seria aplicar inicialmente apenas parte da sua configuração apenas para criar esses objetos:

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

O Terraform deve propor a criação desses dois objetos e qualquer outra coisa da qual eles dependam, mas ainda não lerá o recurso de dados ou qualquer outra coisa que dependa dele. Se você aceitar esse plano e permitir que o Terraform crie esses objetos, então você poderá executar terraform applynormalmente e o Terraform deverá ser capaz de ler esse recurso de dados durante a segunda etapa de planejamento e, assim, mostrar o valor final desta política com os dois ARNs já inserido.

informação relacionada