Introducción
Tu equipo necesita almacenamiento privado para sus informes. En este laboratorio, crearás el primer bucket con Terraform, compararás su configuración con AWS y con el estado de Terraform y, después, revisarás y ejecutarás su eliminación. Un informe de referencia independiente pertenece a otro equipo y debe permanecer sin cambios.
Ya debes conocer los recursos de Terraform, init, plan, apply, el estado y destroy, y desenvolverte con soltura al editar archivos y consultar S3 con la AWS CLI. Terraform, el proveedor de AWS y el acceso mediante la CLI ya están preparados. Usa Terminal para los comandos y AWS View para observar el almacenamiento; no necesitas una cuenta personal de AWS ni claves de acceso. Cada laboratorio comienza de forma independiente.
Relación con las certificaciones
| Certificación | Tarea del examen | Práctica |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Tarea 3.1 | Usar infraestructura como código para un despliegue repetible y consultas de la CLI para inspeccionarlo. |
| Developer – Associate (DVA-C02) | Tarea 3.3, habilidad 3.3.4 | Práctica básica de implementación y despliegue de una definición de recurso mediante IaC. |
| DevOps Engineer – Professional (DOP-C02) | Tarea 2.1 | Práctica básica de definición de un recurso y gestión de su creación y eliminación mediante IaC. |

Crea el bucket de informes
En este paso, vincularás una definición de recurso de Terraform con la cuenta actual de AWS y crearás un bucket privado para informes.
Primero, entra en el directorio raíz preparado y consulta la región y la identidad que realiza las solicitudes. Un directorio raíz contiene una configuración independiente de Terraform con su propio estado. La cuenta de la identidad solicitante indica dónde actúan las solicitudes del proveedor; el ARN identifica a quien las realiza.
cd /home/labex/project/first-aws-resource
aws configure get region
aws sts \
get-caller-identity
terraform version
La región es us-east-1. Terraform muestra la versión 1.17.2. El acceso preparado es independiente de cualquier cuenta personal de AWS.
El archivo provider.tf suministrado selecciona la versión 6.14.0 del proveedor de AWS, configura la conexión preparada y fija Terraform en la versión 1.17.2. El proveedor traduce las operaciones sobre recursos en solicitudes a la API de AWS. Su configuración ya se proporciona para que puedas centrarte en la gestión de recursos.
Crea main.tf con la siguiente configuración. cat y <<'EOF' escriben en el archivo indicado todo lo que aparece hasta el EOF de cierre. aws_s3_bucket es el tipo de recurso de AWS; reports es la etiqueta local de Terraform. Juntos forman la dirección aws_s3_bucket.reports. El atributo bucket es el nombre del bucket en AWS, que es distinto de esa dirección. Las etiquetas registran el propósito del recurso.
cat > main.tf <<'EOF'
resource "aws_s3_bucket" "reports" {
bucket = "terraform-first-reports"
tags = {
Project = "TerraformReports"
}
}
output "report_bucket" {
value = aws_s3_bucket.reports.id
}
EOF
Inicializa este directorio raíz y valida su configuración:
terraform init
terraform validate
init instala el proveedor con la versión fijada desde la caché preparada y escribe .terraform.lock.hcl. Conserva este archivo de bloqueo de dependencias junto con la configuración de un proyecto real: registra el proveedor elegido y las sumas de comprobación de los paquetes. Es distinto del estado de Terraform, que asocia las direcciones de recursos con los ID de los recursos desplegados. Como la caché está preparada para este entorno Linux, init puede advertir que las sumas de comprobación del archivo de bloqueo solo cubren linux_amd64; la inicialización se completa igualmente. Un proyecto que se utilice en otras plataformas también necesita las sumas de comprobación correspondientes a ellas.
Revisa el plan antes de crear nada:
terraform plan
Debes ver Plan: 1 to add, 0 to change, 0 to destroy. Algunos atributos muestran (known after apply) porque AWS los asigna o devuelve durante la creación. Confirma el nombre del bucket y la etiqueta del proyecto. Un plan anticipa las acciones; no crea el bucket.
Aplica la configuración e introduce yes cuando se solicite confirmación:
terraform apply
Debes ver Apply complete! Resources: 1 added, 0 changed, 0 destroyed. El valor de salida report_bucket es terraform-first-reports. En AWS View, el nuevo bucket vacío aparece junto a team-reference-reports. Deja intactos ese bucket de referencia y su objeto keep.txt.

Usa Continue después de completar los comandos. La comprobación consulta AWS y la correspondencia en el estado de forma independiente; que un comando termine correctamente no es suficiente por sí solo.
Compara la configuración, el estado y AWS
En este paso, relacionarás la dirección del recurso de Terraform con el bucket privado que existe y confirmarás que la configuración ha convergido.
El valor de salida lee el ID del bucket mediante una referencia al recurso. state list muestra la dirección gestionada; state show muestra sus atributos registrados. Estos comandos inspeccionan la correspondencia sin modificar AWS.
terraform output report_bucket
terraform state list
terraform state show aws_s3_bucket.reports
Localiza aws_s3_bucket.reports y su ID terraform-first-reports. Tu configuración expresa el recurso deseado, AWS contiene el recurso y el estado conecta ambos. Una entrada en el estado no demuestra por sí sola que el recurso siga existiendo.
Consulta AWS directamente. get-bucket-location devuelve null para la región us-east-1 de S3. La ACL debe conceder acceso únicamente al usuario canónico propietario; no debe haber ninguna concesión a un grupo público. Este laboratorio crea un bucket privado y no añade una política de bucket pública.
aws s3api \
get-bucket-location \
--bucket terraform-first-reports
aws s3api \
get-bucket-acl \
--bucket terraform-first-reports
aws s3api \
get-bucket-tagging \
--bucket terraform-first-reports
Confirma que la etiqueta Project es TerraformReports. Comprueba que el informe ajeno sigue siendo legible. La expresión --query selecciona solo su longitud en bytes y el comando deja intacto el objeto almacenado.
aws s3api \
head-object \
--bucket team-reference-reports \
--key keep.txt \
--query ContentLength
terraform plan
El plan debe indicar No changes. Esto significa que el proveedor no detecta cambios de configuración para los recursos gestionados. No demuestra todas las propiedades de seguridad posibles ni valida los datos del informe; para ello hacen falta comprobaciones específicas. Puedes ampliar la información sobre el estado de Terraform y el control de acceso de S3.
Elimina únicamente el recurso gestionado
En este paso, revisarás y ejecutarás un plan de eliminación y demostrarás que el bucket gestionado y su correspondencia en el estado han desaparecido, mientras se conserva el informe de referencia.
terraform plan -destroy anticipa la eliminación de los recursos del estado de este directorio raíz. No significa «eliminar todos los buckets de la cuenta». Lee la dirección y el ID del bucket antes de continuar:
terraform plan -destroy
Debes ver Plan: 0 to add, 0 to change, 1 to destroy. El bucket de referencia no aparece en el plan porque este directorio raíz no lo gestiona. El bucket de destino está vacío; en laboratorios posteriores se explica por qué los datos almacenados y las versiones requieren decisiones de conservación independientes.
Elimina el bucket gestionado e introduce yes cuando se solicite confirmación:
terraform destroy
Debes ver Destroy complete! Resources: 1 destroyed. Ahora inspecciona el estado y consulta los buckets restantes:
terraform state list
aws s3api \
list-buckets \
--query 'Buckets[].Name'
aws s3api \
head-object \
--bucket team-reference-reports \
--key keep.txt \
--query ContentLength
La lista del estado está vacía. terraform-first-reports no aparece en el listado de buckets obtenido correctamente; team-reference-reports y su informe se conservan. Mantén configurado el acceso a AWS hasta que termine la comprobación final, para que un error de autenticación no pueda confundirse con una eliminación correcta. La configuración y el archivo de bloqueo siguen disponibles si decides volver a crear el recurso.

Resumen
Has creado un bucket privado de S3 con una versión fijada del proveedor de AWS, comparado la configuración y el estado con consultas a AWS, comprobado un plan convergente y eliminado únicamente el recurso gestionado. El informe de referencia independiente ha permanecido intacto. En el siguiente laboratorio, usarás entradas y referencias a recursos para gestionar el contenido de los informes.



