Skip to content
Agentmart
Submit a tool

cloudformation

Author, validate, and deploy AWS CloudFormation templates using this repo's IaC conventions — ProjectPrefix/Environment parameters, the cloudformation/ folder…

Skill by tforster

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/tforster-cloudformation

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Author, validate, and deploy AWS CloudFormation templates using this repo's IaC conventions — ProjectPrefix/Environment parameters, the cloudformation/ folder layout, provision.sh deployment, and cfn-lint validation. Use when asked to create, review, or deploy CloudFormation templates, set up an AWS IaC folder, or write a provisioning script for CFN stacks.

Use cases: devops, cloud, writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/cloudformation

What's inside

Skill name
cloudformation
Description
Author, validate, and deploy AWS CloudFormation templates using this repo's IaC conventions — ProjectPrefix/Environment parameters, the cloudformation/ folder layout, provision.sh deployment, and cfn-lint validation. Use when asked to create, review, or deploy CloudFormation templates, set up an AWS IaC folder, or write a provisioning script for CFN stacks.
License
MIT
Instructions
136 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# CloudFormation

## Required parameters

Every template accepts these two parameters, even if a given stack doesn't strictly need both:

```yaml
Parameters:
  ProjectPrefix:
    Type: String
    Description: Domain/project prefix (e.g. ecommerce, store, auth)
    AllowedPattern: "^[a-z0-9-]+$"
    ConstraintDescription: Must contain only lowercase letters, numbers, and hyphens

  Environment:
    Type: String
    AllowedValues: [dev, int, stage, prod]
    Description: Target environment
```

Use them to name and scope resources predictably rather than hardcoding names:

```yaml
BucketName: !Sub "${ProjectPrefix}-${Environment}-assets"
```

## Folder layout

```
cloudformation/
  network.yml
  database.yml
  api.yml
provision.sh
```

- All templates live in `cloudformation/`, one stack concern per file.
- `provision.sh` sits adjacent to the folder (not inside it) and is the only sanctioned way to deploy — don't run `aws cloudformation deploy` by hand against a tracked template.

## Cross-stack outputs

When one template produces a value another needs, export it as a CloudFormation `Output` and mirror it to SSM Parameter Store — don't invent a bespoke config-sharing mechanism per stack.

```yaml
Resources:
  ThingIdParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Name: !Sub "/${ProjectPrefix}/${Environment}/ThingId"
      Type: String
      Value: !Ref Thing

Outputs:
  ThingId:
    Description: ID of the thing other stacks depend on
    Value: !Ref Thing
    Export:
      Name: !Sub "${ProjectPrefix}-${Environment}-ThingId"

  ThingIdParameterName:
    Description: SSM Parameter name mirroring ThingId
    Value: !Ref ThingIdParameter
```

Consumers within the same account/region resolve the export directly:

```yaml
SomeProperty: !ImportValue
  Fn::Sub: "${ProjectPrefix}-${Environment}-ThingId"
```

Consumers outside CloudFormation (deploy scripts, Lambdas) or across an account/region boundary where `!ImportValue` can't reach read the SSM mirror instead:

```bash
aws ssm get-parameter --name "/${PROJECT_PREFIX}/${ENVIRONMENT}/ThingId" --query "Parameter.Value" --output text
```

Before deploying a stack that imports another stack's export, guard the lookup in `provision.sh` rather than letting `!ImportValue` fail with a cryptic CloudFormation error:

```bash
value=$(aws cloudformation list-exports \
  --query "Exports[?Name=='${PROJECT_PREFIX}-${ENVIRONMENT}-ThingId'].Value" \
  --output text)

if [[ -z "$value" || "$value" == "None" ]]; then
  echo "Deploy the producing stack first: provision.sh --thing" >&2
  exit 1
fi
```

Some outputs deliberately aren't auto-wired — e.g. an ID that a human must hand-carry into an application manifest or config file consumed outside IaC entirely. Print those clearly at the end of the deploy step rather than silently expecting the operator to know to go look.

## provision.sh contract

Give each deployable stack its own boolean flag rather than a generic `<template-name>` positional — stacks in a folder are rarely interchangeable enough for one argument shape, and named flags document what's deployable directly in `--help`. Reserve a positional/`--all` shape for a folder of genuinely homogeneous, safe-to-batch stacks.

```bash
./provision.sh --environment <env> --<stack-flag> [--<stack-flag> ...]
```

- `--environment` (`-e`) is required and validated against an explicit allow-list (e.g. `int`, `stage`, `prod`, plus any account-level aliases you use); default to the least-risky environment, never `prod`.
- Each stack gets its own flag (e.g. `--network`, `--database`, `--api`). Running with zero stack flags fails with a usage message — it never silently no-ops.
- `ProjectPrefix` is usually hardcoded per deploy function rather than accepted as a flag — a given `provision.sh` typically belongs to one project already, so there's rarely a need to parameterize it at the CLI.
- Guard cross-stack dependencies with an export lookup and a clear error before deploying (see Cross-stack outputs above) — don't let a missing dependency surface as a raw CloudFormation failure.
- Run `cfn-lint` against the target template(s) before invoking `aws cloudformation deploy` — fail closed on lint errors.

## Validation — cfn-lint

Every template must pass `cfn-lint` before being considered done:

```bash
cfn-lint cloudformation/*.yml
```

Install with `pip install cfn-lint` (or `brew install cfn-lint`).

Treat these as blocking, not advisory:

- Broad IAM `Resource: "*"` — scope to a specific ARN, or use `!Ref`/`!GetAtt` for dynamic references.

From tforster/agents0, MIT.

More from tforster/agents0

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 18, 2026 (10 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from tforster

Cite this page

cloudformation skill. Agent Mart. https://agentmart.dev/skills/tforster-cloudformation (last updated 2026-10-24)