name: infrastructure-iac
description: Infrastructure as Code best practices for Terraform, Docker, Ansible, and CloudFormation. Covers secure-by-default configurations, multi-stage builds, state management, and modular patterns. Use when working with .tf, Dockerfile, docker-compose.yml, .yaml/.yml Ansible files, CloudFormation templates, or when asking about IaC, containers, or infrastructure automation.
Infrastructure as Code
Guiding Principles
- Security First: Non-root users, minimal images, secret management
- Reproducibility: Pin versions, deterministic builds, locked dependencies
- Modularity: Reusable modules, DRY patterns, clear interfaces
- State Management: Remote state, locking, backup strategies
Tool Selection
| Use Case |
Tool |
| Cloud infrastructure |
Terraform |
| Containers |
Docker |
| Configuration management |
Ansible |
| AWS-native IaC |
CloudFormation |
Terraform Quick Reference
Essential Commands
terraform init # Initialize working directory
terraform plan # Preview changes
terraform plan -out=tfplan # Save plan for apply
terraform apply tfplan # Apply saved plan
terraform fmt -recursive # Format all files
terraform validate # Validate configuration
Critical Patterns
# 1. Pin provider versions
terraform {
required_version = ">= 1.6.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
# 2. Use for_each for stability
resource "aws_subnet" "private" {
for_each = var.private_subnets # NOT: count
}
# 3. Validate inputs
variable "environment" {
type = string
validation {
condition = can(regex("^(dev|staging|prod)$", var.environment))
error_message = "Must be: dev, staging, prod."
}
}
# 4. Mark sensitive data
variable "db_password" {
type = string
sensitive = true
}
# 5. Lifecycle protection
resource "aws_s3_bucket" "state" {
lifecycle {
prevent_destroy = true
}
}
Docker Quick Reference
Multi-Stage Build
# Build stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# Production stage
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
Best Practices
# Pin versions
FROM python:3.12.1-slim-bookworm
# Run as non-root
RUN useradd -m appuser
USER appuser
# Layer optimization
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
# Health check
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8080/health || exit 1
Naming Conventions
| Tool |
Convention |
Example |
| Terraform |
snake_case |
aws_vpc.main |
| Docker |
lowercase, hyphens |
my-app:1.0.0 |
| Ansible |
snake_case |
install_packages |
| CloudFormation |
Hungarian |
pEnvironment, rVpc |
Security Checklist
Detailed References
- Terraform: See references/terraform.md
- Docker: See references/docker.md
- Ansible: See references/ansible.md
- Configuration: See references/configuration.md
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: kiraneswaran-engineering-skills-infrastructure-iac3description: ---4---5---6name: infrastructure-iac7description: Infrastructure as Code best practices for Terraform, Docker, Ansible, and CloudFormation. Covers secure-by-default configurations, multi-stage builds, state management, and modular patterns. Use when working with .tf, Dockerfile, docker-compose.yml, .yaml/.yml Ansible files, CloudFormation templates, or when asking about IaC, containers, or infrastructure automation.8---910# Infrastructure as Code1112## Guiding Principles13141. **Security First**: Non-root users, minimal images, secret management152. **Reproducibility**: Pin versions, deterministic builds, locked dependencies163. **Modularity**: Reusable modules, DRY patterns, clear interfaces174. **State Management**: Remote state, locking, backup strategies1819## Tool Selection2021| Use Case | Tool |22|----------|------|23| Cloud infrastructure | Terraform |24| Containers | Docker |25| Configuration management | Ansible |26| AWS-native IaC | CloudFormation |2728## Terraform Quick Reference2930### Essential Commands31```bash32terraform init # Initialize working directory33terraform plan # Preview changes34terraform plan -out=tfplan # Save plan for apply35terraform apply tfplan # Apply saved plan36terraform fmt -recursive # Format all files37terraform validate # Validate configuration38```3940### Critical Patterns41```hcl42# 1. Pin provider versions43terraform {44 required_version = ">= 1.6.0"45 required_providers {46 aws = {47 source = "hashicorp/aws"48 version = "~> 5.60"49 }50 }51}5253# 2. Use for_each for stability54resource "aws_subnet" "private" {55 for_each = var.private_subnets # NOT: count56}5758# 3. Validate inputs59variable "environment" {60 type = string61 validation {62 condition = can(regex("^(dev|staging|prod)$", var.environment))63 error_message = "Must be: dev, staging, prod."64 }65}6667# 4. Mark sensitive data68variable "db_password" {69 type = string70 sensitive = true71}7273# 5. Lifecycle protection74resource "aws_s3_bucket" "state" {75 lifecycle {76 prevent_destroy = true77 }78}79```8081## Docker Quick Reference8283### Multi-Stage Build84```dockerfile85# Build stage86FROM node:20-alpine AS builder87WORKDIR /app88COPY package*.json ./89RUN npm ci --only=production90COPY . .91RUN npm run build9293# Production stage94FROM node:20-alpine95WORKDIR /app96COPY --from=builder /app/dist ./dist97COPY --from=builder /app/node_modules ./node_modules9899USER node100EXPOSE 3000101CMD ["node", "dist/index.js"]102```103104### Best Practices105```dockerfile106# Pin versions107FROM python:3.12.1-slim-bookworm108109# Run as non-root110RUN useradd -m appuser111USER appuser112113# Layer optimization114COPY requirements.txt .115RUN pip install -r requirements.txt116COPY . .117118# Health check119HEALTHCHECK --interval=30s --timeout=3s \120 CMD curl -f http://localhost:8080/health || exit 1121```122123## Naming Conventions124125| Tool | Convention | Example |126|------|------------|---------|127| Terraform | snake_case | `aws_vpc.main` |128| Docker | lowercase, hyphens | `my-app:1.0.0` |129| Ansible | snake_case | `install_packages` |130| CloudFormation | Hungarian | `pEnvironment`, `rVpc` |131132## Security Checklist133134- [ ] No secrets in code (use vaults/secret managers)135- [ ] Non-root containers136- [ ] Minimal base images137- [ ] Version pinning138- [ ] Vulnerability scanning139- [ ] State encryption (Terraform)140- [ ] Network segmentation141142## Detailed References143144- **Terraform**: See [references/terraform.md](references/terraform.md)145- **Docker**: See [references/docker.md](references/docker.md)146- **Ansible**: See [references/ansible.md](references/ansible.md)147- **Configuration**: See [references/configuration.md](references/configuration.md)148149150---151> Converted and distributed by [TomeVault](https://tomevault.io/claim/kiraneswaran) — claim your Tome and manage your conversions.152<!-- tomevault:4.0:skill_md:2026-04-11 -->