Build and deploy serverless applications using EasySAM. Use when the user wants to scaffold a new project, add AWS resources (Lambda, DynamoDB, S3, etc.), or set up CI/CD for an EasySAM project.
80
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
This skill helps you build and deploy serverless applications using the EasySAM YAML-to-SAM generator.
EasySAM encourages a modular "Module Pattern" for organizing AWS resources. The baseline hierarchy follows this structure:
my-project/
├── resources.yaml # Global settings (prefix, tags) and module imports
├── sam/
│ └── thirdparty/
│ └── requirements.txt # Runtime dependencies (FastAPI, Prismarine, etc.)
├── pyproject.toml # Dev dependencies (pytest, ruff, easysam)
├── backend/ # Main module (imported by resources.yaml)
│ ├── database/ # Data resources (DynamoDB, RDS)
│ │ └── easysam.yaml
│ └── function/ # Compute resources (Lambdas)
│ └── my-function/
│ ├── easysam.yaml # Local resource definition
│ └── index.py # Lambda handler code
├── common/ # Shared logic (referenced by multiple modules)
│ └── utils.py
└── tests/ # Project-level tests (pytest)
└── test_myapp.pysam/thirdparty/requirements.txt. These are packaged into the Lambda deployment artifact.pyproject.toml with [dependency-groups] dev.pyproject.toml [project].dependencies empty (dependencies = []).To prevent local symlinks or copied code from being tracked, add **/common/ to the .gitignore file within the directory containing your Lambda code (usually backend/).
uv run easysam init.backend/ or by feature (e.g., orders/, users/).common/ directory.resources.yaml imports your top-level modules (e.g., import: [backend]).common/.backend/database/ or backend/function/myfunc/).easysam.yaml.uv run easysam --environment dev inspect schema ..easysam.yaml.tests/.uv run easysam --environment dev --aws-profile <profile> inspect cloud . to verify.uv run easysam --environment dev generate ..uv run easysam --environment dev --aws-profile <profile> deploy ..Use bare names for table and bucket references. Do NOT use !Ref.
resources:
tables:
- MyTable # Correct
buckets:
- my-bucket # Correctenvvars must be a child of resources:, NOT a sibling of it under lambda:.
{{resolve:ssm:/path/to/param}}. Do NOT use !Param.lambda:
resources:
envvars:
TABLE_NAME: MyTable
BUCKET_NAME: my-bucket
API_KEY: "{{resolve:ssm:/myapp/api-key}}"Use integration: (not api:). Each Lambda needs a unique path prefix.
lambda:
integration:
path: /my-service
open: trueb2bd8e2
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.