¿Hay alguna manera de representar la salida de un recurso de datos antes de ejecutar la aplicación terraform?

¿Hay alguna manera de representar la salida de un recurso de datos antes de ejecutar la aplicación terraform?

Me gustaría poder ver el JSON de un recurso de datos (como un documento de política) en el plan. Actualmente, este tipo de recursos sólo se "procesan" durante la aplicación.

Quiero saber si hay alguna manera de verlo antes de ejecutar el archivo terraform apply.

Aquí está mi 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"
    ]
  }
}

Respuesta1

Terraform leerá de un recurso de datos durante la fase de planificación si y sólo si se conoce toda la configuración del recurso de datos durante la fase de planificación.

En su caso, tiene referencias a ambos aws_s3_bucket.some-bucket.arny aws_cloudwatch_log_group.some_lambda.arnsospecho que ninguno de esos valores se conoce durante la planificación porque la API remota decide el ARN de un objeto como parte de su creación.

Por lo tanto, la única forma de ver esta política durante la planificación sería que esos dos objetos ya se hubieran creado y que sus ARN ya se conocieran de una ejecución anterior.

Una forma de lograrlo sería aplicar inicialmente solo parte de su configuración solo para crear esos objetos:

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

Terraform debería proponer crear esos dos objetos y cualquier otra cosa de la que dependan, pero aún no leerá el recurso de datos ni nada más que dependa de él. Si acepta ese plan y permite que Terraform cree esos objetos, posteriormente podrá ejecutarlo terraform applynormalmente y Terraform debería poder leer este recurso de datos durante el segundo paso de planificación y así mostrarle el valor final de esta política con los dos ARN. ya insertado.

información relacionada