opencode-skills-collection 4.0.68 → 4.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +266 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +6943 -323
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cloudformation
|
|
3
|
+
description: Deploy AWS resources with CloudFormation templates. Create stacks, use
|
|
4
|
+
nested stacks, and implement drift detection. Use when deploying AWS-native IaC.
|
|
5
|
+
category: devops
|
|
6
|
+
risk: critical
|
|
7
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
8
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
9
|
+
source_type: community
|
|
10
|
+
date_added: '2026-09-20'
|
|
11
|
+
license: MIT
|
|
12
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
13
|
+
compatibility: Requires the relevant OS/platform tooling and privileged access where
|
|
14
|
+
noted. Docs-only; helper scripts and templates not bundled.
|
|
15
|
+
metadata:
|
|
16
|
+
author: devops-skills
|
|
17
|
+
version: '1.0'
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# CloudFormation
|
|
21
|
+
|
|
22
|
+
Deploy AWS infrastructure with native CloudFormation templates, change sets, nested stacks, and drift detection.
|
|
23
|
+
|
|
24
|
+
## When to Use This Skill
|
|
25
|
+
|
|
26
|
+
- Deploying AWS resources using AWS-native Infrastructure as Code
|
|
27
|
+
- Creating repeatable, parameterized infrastructure templates
|
|
28
|
+
- Managing multi-environment deployments (dev, staging, prod) with the same template
|
|
29
|
+
- Implementing safe deployments with change sets and rollback protection
|
|
30
|
+
- Detecting and remediating configuration drift
|
|
31
|
+
- Organizing large infrastructure into nested stacks
|
|
32
|
+
- Exporting/importing values between stacks
|
|
33
|
+
|
|
34
|
+
## Prerequisites
|
|
35
|
+
|
|
36
|
+
- AWS CLI v2 installed and configured
|
|
37
|
+
- IAM permissions: `cloudformation:*`, plus permissions for all resources in the template
|
|
38
|
+
- (Optional) `cfn-lint` installed for template validation (`pip install cfn-lint`)
|
|
39
|
+
- S3 bucket for storing templates larger than 51,200 bytes
|
|
40
|
+
|
|
41
|
+
## Template Structure
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
AWSTemplateFormatVersion: '2010-09-09'
|
|
45
|
+
Description: Production web application infrastructure
|
|
46
|
+
|
|
47
|
+
Metadata:
|
|
48
|
+
AWS::CloudFormation::Interface:
|
|
49
|
+
ParameterGroups:
|
|
50
|
+
- Label: { default: "Environment" }
|
|
51
|
+
Parameters: [Environment, InstanceType]
|
|
52
|
+
- Label: { default: "Network" }
|
|
53
|
+
Parameters: [VpcId, SubnetIds]
|
|
54
|
+
|
|
55
|
+
Parameters:
|
|
56
|
+
Environment:
|
|
57
|
+
Type: String
|
|
58
|
+
AllowedValues: [dev, staging, prod]
|
|
59
|
+
Default: dev
|
|
60
|
+
|
|
61
|
+
InstanceType:
|
|
62
|
+
Type: String
|
|
63
|
+
Default: t3.micro
|
|
64
|
+
AllowedValues: [t3.micro, t3.small, t3.medium, t3.large]
|
|
65
|
+
|
|
66
|
+
VpcId:
|
|
67
|
+
Type: AWS::EC2::VPC::Id
|
|
68
|
+
Description: VPC to deploy into
|
|
69
|
+
|
|
70
|
+
SubnetIds:
|
|
71
|
+
Type: List<AWS::EC2::Subnet::Id>
|
|
72
|
+
Description: Subnets for the application
|
|
73
|
+
|
|
74
|
+
Conditions:
|
|
75
|
+
IsProd: !Equals [!Ref Environment, prod]
|
|
76
|
+
CreateReadReplica: !Equals [!Ref Environment, prod]
|
|
77
|
+
|
|
78
|
+
Mappings:
|
|
79
|
+
RegionAMI:
|
|
80
|
+
us-east-1:
|
|
81
|
+
AL2023: ami-0abcdef1234567890
|
|
82
|
+
us-west-2:
|
|
83
|
+
AL2023: ami-0fedcba9876543210
|
|
84
|
+
|
|
85
|
+
Resources:
|
|
86
|
+
SecurityGroup:
|
|
87
|
+
Type: AWS::EC2::SecurityGroup
|
|
88
|
+
Properties:
|
|
89
|
+
GroupDescription: !Sub '${Environment}-web-sg'
|
|
90
|
+
VpcId: !Ref VpcId
|
|
91
|
+
SecurityGroupIngress:
|
|
92
|
+
- IpProtocol: tcp
|
|
93
|
+
FromPort: 443
|
|
94
|
+
ToPort: 443
|
|
95
|
+
CidrIp: 0.0.0.0/0
|
|
96
|
+
Tags:
|
|
97
|
+
- Key: Name
|
|
98
|
+
Value: !Sub '${Environment}-web-sg'
|
|
99
|
+
|
|
100
|
+
LaunchTemplate:
|
|
101
|
+
Type: AWS::EC2::LaunchTemplate
|
|
102
|
+
Properties:
|
|
103
|
+
LaunchTemplateName: !Sub '${Environment}-web'
|
|
104
|
+
LaunchTemplateData:
|
|
105
|
+
ImageId: !FindInMap [RegionAMI, !Ref 'AWS::Region', AL2023]
|
|
106
|
+
InstanceType: !If [IsProd, t3.large, !Ref InstanceType]
|
|
107
|
+
MetadataOptions:
|
|
108
|
+
HttpTokens: required
|
|
109
|
+
SecurityGroupIds:
|
|
110
|
+
- !Ref SecurityGroup
|
|
111
|
+
|
|
112
|
+
AutoScalingGroup:
|
|
113
|
+
Type: AWS::AutoScaling::AutoScalingGroup
|
|
114
|
+
Properties:
|
|
115
|
+
AutoScalingGroupName: !Sub '${Environment}-web-asg'
|
|
116
|
+
LaunchTemplate:
|
|
117
|
+
LaunchTemplateId: !Ref LaunchTemplate
|
|
118
|
+
Version: !GetAtt LaunchTemplate.LatestVersionNumber
|
|
119
|
+
MinSize: !If [IsProd, 2, 1]
|
|
120
|
+
MaxSize: !If [IsProd, 10, 3]
|
|
121
|
+
DesiredCapacity: !If [IsProd, 4, 1]
|
|
122
|
+
VPCZoneIdentifier: !Ref SubnetIds
|
|
123
|
+
TargetGroupARNs:
|
|
124
|
+
- !Ref TargetGroup
|
|
125
|
+
HealthCheckType: ELB
|
|
126
|
+
HealthCheckGracePeriod: 300
|
|
127
|
+
Tags:
|
|
128
|
+
- Key: Name
|
|
129
|
+
Value: !Sub '${Environment}-web'
|
|
130
|
+
PropagateAtLaunch: true
|
|
131
|
+
UpdatePolicy:
|
|
132
|
+
AutoScalingRollingUpdate:
|
|
133
|
+
MinInstancesInService: !If [IsProd, 2, 0]
|
|
134
|
+
MaxBatchSize: 1
|
|
135
|
+
PauseTime: PT5M
|
|
136
|
+
WaitOnResourceSignals: true
|
|
137
|
+
SuspendProcesses:
|
|
138
|
+
- HealthCheck
|
|
139
|
+
- ReplaceUnhealthy
|
|
140
|
+
- AZRebalance
|
|
141
|
+
- AlarmNotification
|
|
142
|
+
- ScheduledActions
|
|
143
|
+
|
|
144
|
+
TargetGroup:
|
|
145
|
+
Type: AWS::ElasticLoadBalancingV2::TargetGroup
|
|
146
|
+
Properties:
|
|
147
|
+
Name: !Sub '${Environment}-web-tg'
|
|
148
|
+
Port: 8080
|
|
149
|
+
Protocol: HTTP
|
|
150
|
+
VpcId: !Ref VpcId
|
|
151
|
+
TargetType: instance
|
|
152
|
+
HealthCheckPath: /health
|
|
153
|
+
HealthCheckIntervalSeconds: 30
|
|
154
|
+
HealthyThresholdCount: 2
|
|
155
|
+
UnhealthyThresholdCount: 3
|
|
156
|
+
|
|
157
|
+
Outputs:
|
|
158
|
+
SecurityGroupId:
|
|
159
|
+
Description: Web security group ID
|
|
160
|
+
Value: !Ref SecurityGroup
|
|
161
|
+
Export:
|
|
162
|
+
Name: !Sub '${Environment}-WebSecurityGroup'
|
|
163
|
+
|
|
164
|
+
AutoScalingGroupName:
|
|
165
|
+
Description: ASG name
|
|
166
|
+
Value: !Ref AutoScalingGroup
|
|
167
|
+
Export:
|
|
168
|
+
Name: !Sub '${Environment}-WebASG'
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Stack Operations
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Validate a template
|
|
175
|
+
aws cloudformation validate-template --template-body file://template.yaml
|
|
176
|
+
|
|
177
|
+
# Lint with cfn-lint (catches more issues)
|
|
178
|
+
cfn-lint template.yaml
|
|
179
|
+
|
|
180
|
+
# Create a stack
|
|
181
|
+
aws cloudformation create-stack \
|
|
182
|
+
--stack-name production-web \
|
|
183
|
+
--template-body file://template.yaml \
|
|
184
|
+
--parameters \
|
|
185
|
+
ParameterKey=Environment,ParameterValue=prod \
|
|
186
|
+
ParameterKey=VpcId,ParameterValue=vpc-abc123 \
|
|
187
|
+
ParameterKey=SubnetIds,ParameterValue="subnet-aaa\\,subnet-bbb" \
|
|
188
|
+
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM \
|
|
189
|
+
--tags Key=Environment,Value=production Key=Team,Value=platform \
|
|
190
|
+
--enable-termination-protection \
|
|
191
|
+
--on-failure ROLLBACK
|
|
192
|
+
|
|
193
|
+
# Wait for stack creation
|
|
194
|
+
aws cloudformation wait stack-create-complete --stack-name production-web
|
|
195
|
+
|
|
196
|
+
# Describe stack status and outputs
|
|
197
|
+
aws cloudformation describe-stacks \
|
|
198
|
+
--stack-name production-web \
|
|
199
|
+
--query "Stacks[0].{Status:StackStatus,Outputs:Outputs}" \
|
|
200
|
+
--output table
|
|
201
|
+
|
|
202
|
+
# List stack resources
|
|
203
|
+
aws cloudformation list-stack-resources --stack-name production-web \
|
|
204
|
+
--query "StackResourceSummaries[].{Logical:LogicalResourceId,Physical:PhysicalResourceId,Type:ResourceType,Status:ResourceStatus}" \
|
|
205
|
+
--output table
|
|
206
|
+
|
|
207
|
+
# Delete a stack
|
|
208
|
+
aws cloudformation delete-stack --stack-name dev-web
|
|
209
|
+
aws cloudformation wait stack-delete-complete --stack-name dev-web
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Change Sets (Safe Updates)
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Create a change set to preview changes before applying
|
|
216
|
+
aws cloudformation create-change-set \
|
|
217
|
+
--stack-name production-web \
|
|
218
|
+
--change-set-name update-instance-type \
|
|
219
|
+
--template-body file://template.yaml \
|
|
220
|
+
--parameters \
|
|
221
|
+
ParameterKey=Environment,ParameterValue=prod \
|
|
222
|
+
ParameterKey=InstanceType,ParameterValue=t3.large \
|
|
223
|
+
ParameterKey=VpcId,UsePreviousValue=true \
|
|
224
|
+
ParameterKey=SubnetIds,UsePreviousValue=true \
|
|
225
|
+
--capabilities CAPABILITY_IAM
|
|
226
|
+
|
|
227
|
+
# Describe the change set to review planned changes
|
|
228
|
+
aws cloudformation describe-change-set \
|
|
229
|
+
--stack-name production-web \
|
|
230
|
+
--change-set-name update-instance-type \
|
|
231
|
+
--query "Changes[].{Action:ResourceChange.Action,Resource:ResourceChange.LogicalResourceId,Type:ResourceChange.ResourceType,Replacement:ResourceChange.Replacement}" \
|
|
232
|
+
--output table
|
|
233
|
+
|
|
234
|
+
# Execute the change set (apply changes)
|
|
235
|
+
aws cloudformation execute-change-set \
|
|
236
|
+
--stack-name production-web \
|
|
237
|
+
--change-set-name update-instance-type
|
|
238
|
+
|
|
239
|
+
# Wait for update
|
|
240
|
+
aws cloudformation wait stack-update-complete --stack-name production-web
|
|
241
|
+
|
|
242
|
+
# Delete a change set without applying
|
|
243
|
+
aws cloudformation delete-change-set \
|
|
244
|
+
--stack-name production-web \
|
|
245
|
+
--change-set-name update-instance-type
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Drift Detection
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Start drift detection
|
|
252
|
+
DRIFT_ID=$(aws cloudformation detect-stack-drift \
|
|
253
|
+
--stack-name production-web \
|
|
254
|
+
--query 'StackDriftDetectionId' --output text)
|
|
255
|
+
|
|
256
|
+
# Check drift detection status
|
|
257
|
+
aws cloudformation describe-stack-drift-detection-status \
|
|
258
|
+
--stack-drift-detection-id $DRIFT_ID
|
|
259
|
+
|
|
260
|
+
# View drifted resources
|
|
261
|
+
aws cloudformation describe-stack-resource-drifts \
|
|
262
|
+
--stack-name production-web \
|
|
263
|
+
--stack-resource-drift-status-filters MODIFIED DELETED \
|
|
264
|
+
--query "StackResourceDrifts[].{Resource:LogicalResourceId,Status:StackResourceDriftStatus,Differences:PropertyDifferences}" \
|
|
265
|
+
--output table
|
|
266
|
+
|
|
267
|
+
# Detect drift on a specific resource
|
|
268
|
+
aws cloudformation detect-stack-resource-drift \
|
|
269
|
+
--stack-name production-web \
|
|
270
|
+
--logical-resource-id SecurityGroup
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Nested Stacks
|
|
274
|
+
|
|
275
|
+
Parent template:
|
|
276
|
+
|
|
277
|
+
```yaml
|
|
278
|
+
AWSTemplateFormatVersion: '2010-09-09'
|
|
279
|
+
Description: Parent stack - full application
|
|
280
|
+
|
|
281
|
+
Parameters:
|
|
282
|
+
Environment:
|
|
283
|
+
Type: String
|
|
284
|
+
AllowedValues: [dev, staging, prod]
|
|
285
|
+
|
|
286
|
+
Resources:
|
|
287
|
+
NetworkStack:
|
|
288
|
+
Type: AWS::CloudFormation::Stack
|
|
289
|
+
Properties:
|
|
290
|
+
TemplateURL: https://s3.amazonaws.com/my-cfn-templates/network.yaml
|
|
291
|
+
Parameters:
|
|
292
|
+
Environment: !Ref Environment
|
|
293
|
+
VpcCidr: "10.0.0.0/16"
|
|
294
|
+
Tags:
|
|
295
|
+
- Key: Environment
|
|
296
|
+
Value: !Ref Environment
|
|
297
|
+
|
|
298
|
+
DatabaseStack:
|
|
299
|
+
Type: AWS::CloudFormation::Stack
|
|
300
|
+
DependsOn: NetworkStack
|
|
301
|
+
Properties:
|
|
302
|
+
TemplateURL: https://s3.amazonaws.com/my-cfn-templates/database.yaml
|
|
303
|
+
Parameters:
|
|
304
|
+
Environment: !Ref Environment
|
|
305
|
+
VpcId: !GetAtt NetworkStack.Outputs.VpcId
|
|
306
|
+
SubnetIds: !GetAtt NetworkStack.Outputs.PrivateSubnetIds
|
|
307
|
+
|
|
308
|
+
AppStack:
|
|
309
|
+
Type: AWS::CloudFormation::Stack
|
|
310
|
+
DependsOn: [NetworkStack, DatabaseStack]
|
|
311
|
+
Properties:
|
|
312
|
+
TemplateURL: https://s3.amazonaws.com/my-cfn-templates/app.yaml
|
|
313
|
+
Parameters:
|
|
314
|
+
Environment: !Ref Environment
|
|
315
|
+
VpcId: !GetAtt NetworkStack.Outputs.VpcId
|
|
316
|
+
SubnetIds: !GetAtt NetworkStack.Outputs.PrivateSubnetIds
|
|
317
|
+
DbEndpoint: !GetAtt DatabaseStack.Outputs.Endpoint
|
|
318
|
+
|
|
319
|
+
Outputs:
|
|
320
|
+
VpcId:
|
|
321
|
+
Value: !GetAtt NetworkStack.Outputs.VpcId
|
|
322
|
+
AppUrl:
|
|
323
|
+
Value: !GetAtt AppStack.Outputs.LoadBalancerDNS
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
# Package nested templates (uploads local references to S3)
|
|
328
|
+
aws cloudformation package \
|
|
329
|
+
--template-file parent.yaml \
|
|
330
|
+
--s3-bucket my-cfn-templates \
|
|
331
|
+
--output-template-file packaged.yaml
|
|
332
|
+
|
|
333
|
+
# Deploy the packaged template
|
|
334
|
+
aws cloudformation deploy \
|
|
335
|
+
--template-file packaged.yaml \
|
|
336
|
+
--stack-name production-app \
|
|
337
|
+
--parameter-overrides Environment=prod \
|
|
338
|
+
--capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND \
|
|
339
|
+
--tags Environment=production
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## Intrinsic Functions Reference
|
|
343
|
+
|
|
344
|
+
```yaml
|
|
345
|
+
# Ref - reference a parameter or resource
|
|
346
|
+
SecurityGroupId: !Ref SecurityGroup
|
|
347
|
+
|
|
348
|
+
# GetAtt - get an attribute of a resource
|
|
349
|
+
SecurityGroupArn: !GetAtt SecurityGroup.GroupId
|
|
350
|
+
|
|
351
|
+
# Sub - string substitution
|
|
352
|
+
BucketName: !Sub '${Environment}-${AWS::AccountId}-data'
|
|
353
|
+
|
|
354
|
+
# Join - concatenate strings
|
|
355
|
+
PolicyArn: !Join ['', ['arn:aws:iam::', !Ref 'AWS::AccountId', ':policy/MyPolicy']]
|
|
356
|
+
|
|
357
|
+
# Select - pick from a list
|
|
358
|
+
FirstSubnet: !Select [0, !Ref SubnetIds]
|
|
359
|
+
|
|
360
|
+
# Split - split a string
|
|
361
|
+
FirstPart: !Select [0, !Split ['-', !Ref 'AWS::StackName']]
|
|
362
|
+
|
|
363
|
+
# If - conditional value
|
|
364
|
+
InstanceSize: !If [IsProd, t3.large, t3.micro]
|
|
365
|
+
|
|
366
|
+
# Equals - condition definition
|
|
367
|
+
Conditions:
|
|
368
|
+
IsProd: !Equals [!Ref Environment, prod]
|
|
369
|
+
|
|
370
|
+
# ImportValue - cross-stack reference
|
|
371
|
+
VpcId: !ImportValue production-VpcId
|
|
372
|
+
|
|
373
|
+
# Cidr - generate CIDR blocks
|
|
374
|
+
Subnets: !Cidr [!GetAtt VPC.CidrBlock, 6, 8]
|
|
375
|
+
|
|
376
|
+
# GetAZs - list availability zones
|
|
377
|
+
AZ: !Select [0, !GetAZs '']
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## Stack Policy (Prevent Accidental Replacements)
|
|
381
|
+
|
|
382
|
+
```bash
|
|
383
|
+
# Apply a stack policy that prevents replacement of the database
|
|
384
|
+
aws cloudformation set-stack-policy \
|
|
385
|
+
--stack-name production-web \
|
|
386
|
+
--stack-policy-body '{
|
|
387
|
+
"Statement": [
|
|
388
|
+
{
|
|
389
|
+
"Effect": "Allow",
|
|
390
|
+
"Action": "Update:*",
|
|
391
|
+
"Principal": "*",
|
|
392
|
+
"Resource": "*"
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"Effect": "Deny",
|
|
396
|
+
"Action": "Update:Replace",
|
|
397
|
+
"Principal": "*",
|
|
398
|
+
"Resource": "LogicalResourceId/Database"
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"Effect": "Deny",
|
|
402
|
+
"Action": "Update:Delete",
|
|
403
|
+
"Principal": "*",
|
|
404
|
+
"Resource": "LogicalResourceId/Database"
|
|
405
|
+
}
|
|
406
|
+
]
|
|
407
|
+
}'
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
## Stack Events and Debugging
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
# View stack events (most recent first)
|
|
414
|
+
aws cloudformation describe-stack-events \
|
|
415
|
+
--stack-name production-web \
|
|
416
|
+
--query "StackEvents[?ResourceStatus=='CREATE_FAILED' || ResourceStatus=='UPDATE_FAILED'].{Time:Timestamp,Resource:LogicalResourceId,Status:ResourceStatus,Reason:ResourceStatusReason}" \
|
|
417
|
+
--output table
|
|
418
|
+
|
|
419
|
+
# Continue a rollback that is stuck
|
|
420
|
+
aws cloudformation continue-update-rollback \
|
|
421
|
+
--stack-name production-web \
|
|
422
|
+
--resources-to-skip SecurityGroup
|
|
423
|
+
|
|
424
|
+
# Cancel an in-progress update
|
|
425
|
+
aws cloudformation cancel-update-stack --stack-name production-web
|
|
426
|
+
|
|
427
|
+
# Get template from an existing stack
|
|
428
|
+
aws cloudformation get-template \
|
|
429
|
+
--stack-name production-web \
|
|
430
|
+
--template-stage Processed \
|
|
431
|
+
--query TemplateBody \
|
|
432
|
+
--output text > current-template.yaml
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
## Troubleshooting
|
|
436
|
+
|
|
437
|
+
| Problem | Cause | Fix |
|
|
438
|
+
|---|---|---|
|
|
439
|
+
| CREATE_FAILED on IAM resource | Missing CAPABILITY_IAM | Add `--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM` |
|
|
440
|
+
| Stack stuck in UPDATE_ROLLBACK_FAILED | Resource cannot be rolled back | Use `continue-update-rollback` with `--resources-to-skip` |
|
|
441
|
+
| Nested stack fails | Template URL wrong or S3 access denied | Use `aws cloudformation package` to upload; check bucket policy |
|
|
442
|
+
| Circular dependency error | Two resources reference each other | Break the cycle with a third resource or use `DependsOn` |
|
|
443
|
+
| Drift detected | Manual changes made outside CloudFormation | Re-apply the template or update template to match current state |
|
|
444
|
+
| Change set shows no changes | Template and parameters identical | Verify the diff; check if the change is parameter-only |
|
|
445
|
+
| Template validation error | YAML syntax or invalid resource property | Run `cfn-lint`; check property names against docs |
|
|
446
|
+
| Export name already exists | Another stack uses the same export name | Use unique export names with `!Sub '${AWS::StackName}-Name'` |
|
|
447
|
+
| Delete fails - resource in use | Dependent resource outside the stack | Remove the dependency first; check for SG references |
|
|
448
|
+
|
|
449
|
+
## Related Skills
|
|
450
|
+
|
|
451
|
+
- terraform-aws (`terraform-aws`) - Alternative IaC with Terraform
|
|
452
|
+
- aws-iam (`aws-iam`) - IAM resources in templates
|
|
453
|
+
- aws-vpc (`aws-vpc`) - Network infrastructure templates
|
|
454
|
+
- aws-ec2 (`aws-ec2`) - Compute resources in templates
|
|
455
|
+
- aws-s3 (`aws-s3`) - Storage resources in templates
|
|
456
|
+
|
|
457
|
+
## Limitations
|
|
458
|
+
|
|
459
|
+
- Infrastructure commands can disrupt services: confirm target host/scope and have backups/snapshots before mutating state.
|
|
460
|
+
- Docs-only import: upstream scripts and templates not bundled.
|
|
461
|
+
|