Build and deploy modular serverless applications using the EasySAM YAML-to-SAM generator. Always use this skill whenever the user asks to scaffold a serverless project, configure AWS resources (Lambda, DynamoDB, S3, SQS, SNS, EventBridge poller, OpenSearch Serverless, Kinesis, Function URLs), define resources.yaml or easysam.yaml, inspect schema or cloud settings, generate SAM templates, or set up GitHub Actions CI/CD pipelines for serverless applications, even if they don't explicitly mention 'EasySAM'.
73
90%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Critical
Do not install without reviewing
This skill provides opinionated workflows and syntax rules for building, validating, and deploying serverless applications using the EasySAM YAML-to-SAM generator.
template.yml Directly:
template.yml (and template.yaml) is an ephemeral build artifact automatically generated by easysam generate and easysam deploy. Do NOT edit template.yml manually under any circumstances. All configuration changes must be made in resources.yaml, module-level easysam.yaml, or deploy-context.yaml.greedy: true under integration:. FastAPI manages internal sub-path routing (/api/v1/items); non-greedy routes will cause API Gateway to return 404 for sub-routes.easysam deploy or CloudFormation stack update gets stuck, fails, or enters a rollback loop 2 or more times: STOP attempting retries immediately. Do not run command loops. Output the exact failure details from CloudFormation logs and inform the user so they can intervene (e.g. manual console rollback, easysam delete --force, or fixing CloudFormation resource locks).prismarine generate-client:
When using Prismarine in EasySAM, client code generation (prismarine_client.py) is automatically performed as an integrated step of easysam generate . and easysam deploy .. Do NOT execute separate prismarine generate-client shell commands.EasySAM strictly enforces a modular "Module Pattern" for organizing AWS resources. Divide applications into feature or resource modules:
my-project/
├── resources.yaml # Global configuration (prefix, tags, python, envvars) and module imports
├── deploy-context.yaml # Environment overrides (dev, prod ARNs/VPCs)
├── .gitignore # Excludes **/common/ and **/prismarine_clients/
├── sam/
│ └── thirdparty/
│ └── requirements.txt # Runtime dependencies packaged into Lambda artifacts
├── pyproject.toml # Dev dependencies (pytest, ruff, easysam)
├── backend/ # Main module (imported by resources.yaml)
│ ├── database/ # Database resources module (DynamoDB or Prismarine schema)
│ │ ├── easysam.yaml
│ │ └── schema.prisma # Prismarine schema (if using Prismarine ORM)
│ └── function/ # Compute resources module
│ └── my-function/
│ ├── easysam.yaml # Local resource definition
│ └── index.py # Lambda handler code
├── common/ # Shared application logic & custom DynamoAccess helpers
│ ├── utils.py
│ └── dynamo_access.py # Custom DynamoAccess helper (if not using Prismarine)
└── tests/ # Unit & integration test suite (pytest)
└── test_myapp.pyresources.yaml must list sub-modules under import: (e.g., import: [backend])..gitignore (or root .gitignore) must exclude:
**/common/ (synced shared code modules)**/prismarine_clients/ (auto-generated Prismarine ORM clients)sam/thirdparty/requirements.txt.pyproject.toml ([project] dependencies = []) and place development tools under [dependency-groups] dev.DynamoAccessWhen building DynamoDB-backed applications in EasySAM, choose one of two supported data access patterns:
common/<package>/models.py and configure prismarine: in resources.yaml. EasySAM automatically generates prismarine_client.py during easysam generate . or easysam deploy ..DynamoAccess (boto3 Helper):
boto3 queries.DynamoAccess class in common/dynamo_access.py wrapping boto3.resource('dynamodb') table operations (get_item, put_item, query, update_item).uv run easysam init to initialize project baseline.backend/database/, backend/orders/).resources.yaml (set prefix, tags, python, import)..gitignore ignores **/common/ and **/prismarine_clients/.easysam.yaml.uv run easysam --environment dev inspect schema . to validate YAML schema.easysam.yaml.tests/ using pytest.uv run easysam --environment dev --aws-profile <profile> inspect cloud . to verify external ARNs and roles.uv run easysam --environment dev generate . to inspect generated templates and generate Prismarine clients automatically. (Do NOT edit template.yml directly or run standalone prismarine generate-client).uv run easysam --environment dev --aws-profile <profile> deploy ..MyTable, my-bucket). Do NOT use !Ref.envvars MUST be defined under resources:, NOT as a sibling of resources: under lambda:.{{resolve:ssm:/path/to/param}}. Do NOT use !Param.integration: (not api:). Ensure each HTTP Lambda has a unique path prefix.greedy: true.lambda:
name: api-handler
integration:
path: /api/v1
greedy: true # Mandatory for FastAPI to handle sub-paths
open: trueexample/ in the easysam repository.6c052f2
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.