CLI Commands
Install globally (recommended):
npm install -g @effortless-aws/cliCLI available as effortless or short alias eff:
Quick start
# Deploy everything defined in your projecteff deploy
# Check what's deployedeff status
# Remove a specific handler's resourceseff cleanup --handler createUser --allTypical workflow
- Write handlers using
defineApi,defineTable, etc. - If handlers use
param()for secrets — runeff configto set missing values - Run
eff deploy— creates all AWS resources automatically (warns about missing parameters) - Remove or rename a handler → run
eff deployagain (stale API routes are cleaned up) - To remove orphaned Lambdas/tables, run
eff cleanupto see what’s left, theneff cleanup --allto delete
deploy
Deploy handlers to AWS. See Architecture → Deploy Algorithm for the full flow.
eff deploy [target] [options]Without target, deploys all handlers matching patterns from effortless.config.ts.
With target, deploys a specific handler by name or file path.
# Deploy all handlers from configeff deploy
# Deploy a specific fileeff deploy ./src/api.ts
# Deploy a specific handler by nameeff deploy createUserOptions:
| Flag | Alias | Description | Default |
|---|---|---|---|
--project <name> | -p | Project name (or name in config) | from config |
--stage <name> | -s | Deployment stage | "dev" |
--region <name> | -r | AWS region | "eu-central-1" |
--verbose | -v | Show detailed output |
What happens during deploy:
- Creates or updates Lambda functions, IAM roles, and related resources for each handler
- Creates or updates Lambda Function URLs for API handlers
- Creates or updates DynamoDB tables for table handlers
- Creates or updates SQS queues for FIFO queue handlers
- Uploads static sites to S3 + CloudFront
- Removes stale Lambda Function URLs that no longer have a matching handler
- Creates a shared dependency layer from
dependenciesinpackage.json - Warns about missing SSM parameters declared via
param()(seeconfig)
status
Compare handlers in your code with what’s deployed in AWS. See Architecture → Resource Discovery for how resources are found.
eff status [options]Discovers handlers from your code and queries AWS resources by tags, then shows the diff:
- new — handler exists in code but hasn’t been deployed yet
- deployed — handler is in both code and AWS (shows last deploy time, memory, timeout)
- orphaned — handler exists in AWS but was removed from code
Status for my-app/dev:
new [api] createUser POST /api/users deployed [api] listExpenses GET /api/expenses 3m ago 256MB 30s deployed [table] expenses 1h ago orphaned [api] oldHandler
API: https://xxx.lambda-url.eu-central-1.on.awsTotal: 1 new, 2 deployed, 1 orphanedOptions:
| Flag | Alias | Description | Default |
|---|---|---|---|
--project <name> | -p | Project name (or name in config) | from config |
--stage <name> | -s | Deployment stage | "dev" |
--region <name> | -r | AWS region | "eu-central-1" |
--verbose | -v | Show detailed output |
logs
Stream CloudWatch logs for a handler.
eff logs <handler> [options]Shows recent logs from the handler’s Lambda function. Use --tail to continuously poll for new logs.
# Show recent logs (last 5 minutes)eff logs processOrder
# Tail logs in real timeeff logs processOrder --tail
# Show logs from last houreff logs processOrder --since 1hLambda metadata (request IDs, START/END/REPORT lines) is stripped for readability. Only the actual log output is shown.
Options:
| Flag | Alias | Description | Default |
|---|---|---|---|
--tail | -f | Continuously poll for new logs | |
--since <duration> | How far back to start (5m, 1h, 30s) | "5m" | |
--project <name> | -p | Project name (or name in config) | from config |
--stage <name> | -s | Deployment stage | "dev" |
--region <name> | -r | AWS region | "eu-central-1" |
--verbose | -v | Show detailed output |
cleanup
Delete deployed resources. See Architecture → Resource Discovery for how resources are found by tags.
eff cleanup [options]Lists all resources tagged by Effortless and deletes them. Requires either --all or --handler to actually delete — without them, just shows what would be deleted.
# Preview what would be deletedeff cleanup --dry-run
# Delete all resources for the projecteff cleanup --all
# Delete resources for a specific handlereff cleanup --handler createUser
# Clean up layer versionseff cleanup --layer --dry-runeff cleanup --layer --all
# Clean up orphaned IAM roleseff cleanup --roles --dry-runeff cleanup --roles --allOptions:
| Flag | Alias | Description | Default |
|---|---|---|---|
--handler <name> | -h | Delete only this handler’s resources | |
--layer | Clean up Lambda layer versions | ||
--roles | Clean up orphaned IAM roles | ||
--all | Delete all found resources (required without --handler) | ||
--dry-run | Show what would be deleted without deleting | ||
--project <name> | -p | Project name (or name in config) | from config |
--stage <name> | -s | Deployment stage | "dev" |
--region <name> | -r | AWS region | "eu-central-1" |
--verbose | -v | Show detailed output |
config
Manage SSM Parameter Store values used by your handlers. See Architecture → Three-Phase Pattern for how config params flow from code to runtime.
Handlers declare config parameters via config: { stripeKey: param("stripe/secret-key") }. The CLI discovers all declared parameters from your code and helps you create, list, and update them in AWS.
# Interactive setup — prompts for each missing parametereff config
# List all parameters and their statuseff config list
# Set a specific parametereff config set stripe/secret-keyDefault (interactive setup)
eff config [options]Discovers all param() declarations from your handlers, checks which SSM parameters exist, and interactively prompts for missing ones. Each value is stored as SecureString.
Missing parameters (my-service / dev)
? /my-service/dev/stripe/secret-key (checkout): sk_test_... ✓ created? /my-service/dev/webhook-secret (checkout): whsec_... ✓ created
Created 2 parameter(s) (SecureString)Empty input skips the parameter.
list
eff config list [options]Shows all declared parameters with their status:
Config parameters (my-service / dev)
✓ checkout /my-service/dev/stripe/secret-key set ✗ checkout /my-service/dev/webhook-secret missing
1 missing — run eff config to set themset
eff config set <key> [options]Create or update a specific parameter. The full SSM path is built automatically: /${project}/${stage}/${key}.
eff config set stripe/secret-key --stage prod# prompts for value, stores as SecureString at /my-service/prod/stripe/secret-keyOptions (all subcommands):
| Flag | Alias | Description | Default |
|---|---|---|---|
--project <name> | -p | Project name (or name in config) | from config |
--stage <name> | -s | Deployment stage | "dev" |
--region <name> | -r | AWS region | "eu-central-1" |
--verbose | -v | Show detailed output |
layer
Show or build the dependency layer. See Architecture → Lambda Layer for how layers are built internally.
Effortless automatically creates a shared Lambda layer from your dependencies in package.json. Only rebuilt when dependencies actually change.
# Show layer info (default)eff layer
# Build layer locally for debuggingeff layer --buildOptions:
| Flag | Alias | Description | Default |
|---|---|---|---|
--build | Build layer directory locally | ||
--output <dir> | -o | Output directory (with --build) | ".effortless" |
--verbose | -v | Show all packages |