# Configure remote state backendremote_state{backend="s3"generate={path="backend.tf"if_exists="overwrite_terragrunt"}config={bucket="my-terraform-state-${get_aws_account_id()}"key="${path_relative_to_include()}/terraform.tfstate"region="us-east-1"encrypt=truedynamodb_table="terraform-locks"}}
# Define dependencies between modulesdependency"vpc"{config_path="../vpc" # Mock outputs for validation without dependencies appliedmock_outputs={vpc_id="vpc-temporary-id"}mock_outputs_allowed_terraform_commands=["validate", "plan"]}# Use dependency outputsinputs={vpc_id=dependency.vpc.outputs.vpc_idsubnet_ids=dependency.vpc.outputs.private_subnet_ids}
# Define local variableslocals{environment="production"region="us-east-1" # Parse environment from pathparsed_path=regex(".*/environments/(?P<env>.*?)/.*",get_terragrunt_dir())env_name=local.parsed_path.env # Common tagscommon_tags={Environment=local.environmentManagedBy="Terragrunt"Project="MyProject"}}# Use locals in inputsinputs=merge(local.common_tags,{region=local.region})
# Override module source to test local changescdenvironments/dev/vpc
terragruntplan--terragrunt-source../../../modules/vpc-local
# Apply with local moduleterragruntapply--terragrunt-source../../../modules/vpc-local
# Reset to remote sourceterragruntplan--terragrunt-source-update
# List all resources in stateterragruntstatelist
# Move resource to new addressterragruntstatemvaws_instance.oldaws_instance.new
# Import existing AWS resourceterragruntimportaws_instance.webi-1234567890abcdef0
# Remove resource from state (keeps actual resource)terragruntstatermaws_instance.temporary
# Pull remote state for inspectionterragruntstatepull>backup.tfstate
Utilizar el principio DRY: Mantener la configuración de backend en root terragrunt.hcl e incluirlo en módulos infantiles usando bloques __INLINE_CODE_68_ para evitar duplicaciones
Version sus módulos: Siempre hay fuentes de módulos para versiones o etiquetas específicas (por ejemplo, ?ref=v1.0.0) para garantizar despliegues reproducibles
** Gestión de la dependencia de la ejecución**: Use dependency bloques para definir explícitamente las relaciones entre módulos en lugar de confiar en el orden de ejecución manual
Los locales y las funciones Usar las funciones incorporadas de Terragrunt como find_in_parent_folders(), get_aws_account_id() y path_relative_to_include() para la configuración dinámica
Use mock outputs: Define mock_outputs en bloques de dependencia para permitir la validación y planificación sin requerir que todas las dependencias se apliquen primero
Organizar por medio ambiente: Dirección de estructuras por medio del medio ambiente (dev/staging/prod) con configuración compartida a nivel raíz para la coherencia
¿Qué? Configure siempre tablas DynamoDB para bloqueo de estado cuando use backend S3 para evitar conflictos de modificación simultánea
¿Por qué? Prueba con run-all plan_ antes run-all apply_ y considera usar --terragrunt-parallelism para controlar las ejecuciones simultáneas
Configuración del proveedor de genes: Utilizar bloques generate para crear configuraciones de proveedores dinámicamente, asegurando la coherencia entre módulos
Los ganchos de implementación para la automatización: Use before_hook y after_hook para automatizar tareas como validación, notificaciones o cheques de cumplimiento