Claude Code Plugins

Community-maintained marketplace

Feedback

cloud-native-checklist

@cameronsjo/claude-marketplace
1
0

Generate CNCF/12-Factor compliance checklists and ADRs for cloud-native applications. Use when reviewing application architecture, planning containerization, or documenting cloud-native decisions.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name cloud-native-checklist
description Generate CNCF/12-Factor compliance checklists and ADRs for cloud-native applications. Use when reviewing application architecture, planning containerization, or documenting cloud-native decisions.

Cloud-Native Compliance Checklist

Generate Architecture Decision Records (ADRs) and compliance checklists for CNCF and 12-Factor App principles.

When to Use

  • Reviewing application architecture for cloud-native readiness
  • Planning containerization of existing applications
  • Documenting architectural decisions for cloud deployment
  • Auditing applications against industry standards

Quick Checklist Generation

When asked to generate a checklist, create an ADR at docs/adr/NNNN-cloud-native-compliance.md:

# ADR-NNNN: Cloud-Native Compliance Assessment

## Status

Proposed | Accepted | Implemented

## Context

[Brief description of the application and why this assessment is needed]

## 12-Factor App Compliance

| Factor | Status | Notes |
|--------|--------|-------|
| I. Codebase | | One codebase tracked in VCS, many deploys |
| II. Dependencies | | Explicitly declare and isolate dependencies |
| III. Config | | Store config in environment variables |
| IV. Backing Services | | Treat backing services as attached resources |
| V. Build, Release, Run | | Strictly separate build and run stages |
| VI. Processes | | Execute app as stateless processes |
| VII. Port Binding | | Export services via port binding |
| VIII. Concurrency | | Scale out via process model |
| IX. Disposability | | Fast startup and graceful shutdown |
| X. Dev/Prod Parity | | Keep development, staging, production similar |
| XI. Logs | | Treat logs as event streams |
| XII. Admin Processes | | Run admin/management tasks as one-off processes |

## Container Standards

| Requirement | Status | Notes |
|-------------|--------|-------|
| `/health` endpoint | | Orchestrator health checks |
| `/ready` endpoint | | Startup readiness (if slow init) |
| Graceful SIGTERM | | Drain connections, finish requests |
| Log to stdout | | No file logging |
| Non-root user | | Container security |
| Environment config | | No hardcoded configuration |
| OCI labels | | Image metadata and linking |

## Supply Chain Security

| Requirement | Status | Notes |
|-------------|--------|-------|
| Image signing (Cosign) | | Cryptographic verification |
| SLSA provenance | | Build attestations |
| Dependency scanning | | Vulnerability detection |
| SBOM generation | | Software bill of materials |

## Observability

| Requirement | Status | Notes |
|-------------|--------|-------|
| Structured logging | | JSON log format |
| OpenTelemetry tracing | | Distributed tracing |
| Prometheus metrics | | `/metrics` endpoint |
| Correlation IDs | | Cross-service request tracking |

## Decision

[Summary of compliance status and recommended actions]

## Consequences

[Impact of implementing/not implementing the recommendations]

The 12 Factors Explained

I. Codebase

One codebase tracked in revision control, many deploys.

  • Check: Single repo per deployable unit
  • Anti-pattern: Multiple apps in one repo, or one app across repos

II. Dependencies

Explicitly declare and isolate dependencies.

  • Check: package.json, pyproject.toml, go.mod with lockfiles
  • Anti-pattern: System-wide packages, implicit dependencies

III. Config

Store config in the environment.

  • Check: Environment variables for all config
  • Anti-pattern: Config files checked into repo, hardcoded values

IV. Backing Services

Treat backing services as attached resources.

  • Check: Database URLs from environment, swappable without code changes
  • Anti-pattern: Hardcoded connection strings, local vs remote distinction

V. Build, Release, Run

Strictly separate build and run stages.

  • Check: Immutable releases, CI/CD pipeline
  • Anti-pattern: Modifying code at runtime, FTP deployments

VI. Processes

Execute the app as one or more stateless processes.

  • Check: No sticky sessions, external state storage
  • Anti-pattern: In-memory session state, local file uploads

VII. Port Binding

Export services via port binding.

  • Check: Self-contained HTTP server, configurable port
  • Anti-pattern: Depends on external webserver injection

VIII. Concurrency

Scale out via the process model.

  • Check: Horizontal scaling, process-per-workload-type
  • Anti-pattern: Single multi-threaded process, vertical-only scaling

IX. Disposability

Maximize robustness with fast startup and graceful shutdown.

  • Check: Seconds to start, SIGTERM handling, idempotent operations
  • Anti-pattern: Long warmup, dropped requests on shutdown

X. Dev/Prod Parity

Keep development, staging, and production as similar as possible.

  • Check: Same backing services, containers everywhere
  • Anti-pattern: SQLite dev / PostgreSQL prod, mock services

XI. Logs

Treat logs as event streams.

  • Check: Write to stdout, structured JSON
  • Anti-pattern: Log files, log rotation in app

XII. Admin Processes

Run admin/management tasks as one-off processes.

  • Check: Same codebase, run in identical environment
  • Anti-pattern: SSH and run scripts, separate admin tools

Container Runtime Standards

Health Endpoints

# FastAPI example
@app.get("/health")
async def health():
    return {"status": "healthy"}

@app.get("/ready")
async def ready():
    # Check database, cache, etc.
    if await database.is_connected():
        return {"status": "ready"}
    raise HTTPException(503, "Not ready")

Graceful Shutdown

import signal
import asyncio

async def shutdown(signal, loop):
    logging.info(f"Received {signal.name}, shutting down...")
    # Stop accepting new requests
    # Wait for in-flight requests
    # Close connections
    tasks = [t for t in asyncio.all_tasks() if t is not asyncio.current_task()]
    await asyncio.gather(*tasks, return_exceptions=True)
    loop.stop()

loop = asyncio.get_event_loop()
for sig in (signal.SIGTERM, signal.SIGINT):
    loop.add_signal_handler(sig, lambda s=sig: asyncio.create_task(shutdown(s, loop)))

Non-Root User

# Create non-root user
RUN useradd --create-home --shell /bin/bash appuser
USER appuser
WORKDIR /home/appuser/app

CNCF Landscape Categories

When assessing cloud-native readiness, consider:

  • Container Runtime: Docker, containerd, CRI-O
  • Orchestration: Kubernetes, Nomad
  • Service Mesh: Istio, Linkerd, Cilium
  • Observability: Prometheus, Grafana, Jaeger, OpenTelemetry
  • CI/CD: Argo, Flux, Tekton
  • Security: Falco, OPA, Trivy, Cosign

ADR Template

Store in docs/adr/ with numeric prefix:

docs/adr/
├── 0001-use-postgresql.md
├── 0002-adopt-kubernetes.md
├── 0003-cloud-native-compliance.md
└── template.md

Quick Assessment Script

#!/bin/bash
# Quick cloud-native assessment

echo "=== Cloud-Native Readiness Check ==="

# Check for Dockerfile
[ -f Dockerfile ] && echo "✓ Dockerfile found" || echo "✗ No Dockerfile"

# Check for health endpoint in code
grep -r "/health" --include="*.py" --include="*.ts" --include="*.go" . >/dev/null && \
  echo "✓ Health endpoint found" || echo "✗ No health endpoint"

# Check for environment config
grep -r "os.environ\|process.env\|os.Getenv" --include="*.py" --include="*.ts" --include="*.go" . >/dev/null && \
  echo "✓ Environment config found" || echo "? Check config handling"

# Check for structured logging
grep -r "structlog\|pino\|zap\|slog" --include="*.py" --include="*.ts" --include="*.go" . >/dev/null && \
  echo "✓ Structured logging found" || echo "? Check logging setup"

# Check for non-root in Dockerfile
grep -i "USER" Dockerfile >/dev/null 2>&1 && \
  echo "✓ Non-root user in Dockerfile" || echo "✗ No USER directive"

echo "=== Assessment Complete ==="

References