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.arn
y aws_cloudwatch_log_group.some_lambda.arn
sospecho 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 apply
normalmente 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.