aws-sst-development
О программе
Этот навык предоставляет экспертные консультации по работе с SST v4 (Ion) — фреймворком на базе Pulumi для управления инфраструктурой AWS через код. Он помогает разработчикам писать и отлаживать `sst.config.ts`, строить инфраструктуру с помощью конструкций `sst.aws.*` и ресурсов Pulumi, а также выполнять команды SST, такие как `deploy` или `dev`. Используйте его при работе с проектами, содержащими конфигурацию или зависимости SST, но не для задач, связанных с AWS CDK, Terraform или чистым CloudFormation.
Быстрая установка
Claude Code
Рекомендуетсяnpx skills add zxkane/aws-skills -a claude-code/plugin add https://github.com/zxkane/aws-skillsgit clone https://github.com/zxkane/aws-skills.git ~/.claude/skills/aws-sst-developmentСкопируйте и вставьте эту команду в Claude Code для установки этого навыка
Документация
SST v4 for AWS
SST v4 (the "Ion" engine) is a Pulumi-backed IaC framework: you describe AWS
resources in TypeScript and SST/Pulumi reconciles them into your account. It
gives you high-level sst.aws.* components (Function, Bucket, Dynamo, Cron,
Service, …) that expand into many underlying resources, plus an escape hatch to
any raw Pulumi aws.* resource for the long tail. This skill encodes a
production-proven way to author, link, test, deploy, and troubleshoot SST
stacks on AWS — distilled from real multi-stack projects that have paid for
each lesson with a prod incident.
SST and Pulumi are third-party — verify current syntax with Context7
(resolve-library-id → query-docs for sst or pulumi-aws) when you're
unsure about a component's options. Verify AWS-side facts (service limits,
model IDs, IAM action names, region availability) with the AWS docs MCP, never
from memory. The patterns here are the how; the docs are the what.
When you're invoked
Figure out which mode you're in and jump to the right reference:
| Situation | Go to |
|---|---|
| New project, or adding a resource/module to an existing SST app | Author → references/authoring.md |
| Wiring one module's output into another (links, SSM, IAM scope) | Author → references/authoring.md § Sharing |
| Writing tests for infra so changes don't silently break | Test → references/testing.md |
| Running a deploy, or a deploy just failed | Deploy/Operate → references/deploy-and-troubleshoot.md |
| Migrating a resource between Pulumi types, renaming a physical name | Deploy/Operate → references/deploy-and-troubleshoot.md § Migrations |
Always read the relevant reference before editing — they carry the why behind each rule, which matters more than the rule itself.
Orientation: read the repo before you touch it
SST projects are conventional but not identical. Before editing, build a quick map so your change matches the house style instead of fighting it:
sst.config.ts— the app name,home, providers/region,defaultTags, any global$transform(Node runtime pin, bundle fixups), and the order in whichrun()importsinfra/modules. The import order is the dependency order; respect it.infra/— one file per domain (storage, functions, api, observability…). This is where resources are declared. Check for aninfra/CLAUDE.md— these projects keep IaC-specific rules there, and it's the single most valuable file to read first.infra/tests/— source-level Vitest assertions that pin resource invariants. If they exist, your change must keep them green and probably needs a new assertion.package.json/.nvmrc— package manager (npm vs pnpm), Node version, and thesst/pulumiversions actually installed.
Run npx sst version to confirm you're on v4/Ion (the $config + .sst/platform/
signature). v2/v3 ("SST Classic", CDK-based) is a different framework — these
patterns don't apply there.
The conventions, and which are universal vs tunable
The projects this skill is built from share a deliberate house style. Some of it is universal (true for any SST v4 + AWS project — apply it everywhere); some is project-specific (a sensible default these projects chose — adopt it for consistency, but recognize a project may differ).
Universal — these principles hold for any SST v4 + AWS project:
- Control the Node runtime deliberately, in one place. Don't leave it to
whatever the installed SST happens to default to. The idiom is a single global
$transform(sst.aws.Function, (args) => { args.runtime ??= "nodejs24.x" })inrun()—??=is correct here (the transform runs before the component applies its own default, so it fills in only when the user didn't set one). Recent SST already defaults to a current Node runtime, so check the installed default first (Context7); the transform is then version-independence insurance so a future SST downgrade can't silently move your fleet. Seereferences/authoring.md. - Never interpolate a Pulumi
Output<T>into a plain JS template literal. Use$interpolate(orpulumi.interpolate). A bare top-level`${bucket.arn}/*`stringifies theOutputto a[Output<T>]placeholder and produces a broken ARN that only fails at deploy time (it type-checks andsst devruns fine). The fix is$interpolate`${bucket.arn}/*`. This has caused prod deploy outages. Seereferences/authoring.md§ Outputs. - Migrating a resource between Pulumi types should default to two PRs —
Pulumi creates-before-destroys, so for a uniqueness-constrained AWS name
(bucket, IAM role, gateway) the old resource still owns it and the create
fails with
ConflictException. Two sequential deploys (teardown, then recreate) is the conservative default;aliases:/pulumi import/ state surgery can bridge identity in some cases but only with a reviewed plan. Seereferences/deploy-and-troubleshoot.md§ Migrations. - Prefer typed
sst.aws.*/aws.*resources over theaws.cloudcontrol.Resourceescape hatch. CloudControl outputs are stringly-typed andoneOffields don't patch cleanly. Use it only when no typed resource exists yet, and migrate off it when one ships.
Project-specific defaults — adopt for consistency, but confirm per repo:
- Region
ap-northeast-1,home: "aws", anddefaultTagscarryingProject/Stage/ManagedBy: "sst". - Stage-gated lifecycle:
removal: stage === "prod" ? "retain" : "remove"andprotect: stage === "prod"so prod resources survive a stack tear-down and non-prod previews clean up. - SSM Parameter Store as the out-of-graph contract under a
/{app}/{stage}/{domain}/...prefix — for consumers that aren't in the Pulumi graph (CI scripts, sibling apps, operators). For same-app Lambdas, prefer SSTlink:(it wires a real dependency edge and grants IAM); don't route same-app sharing through SSM. Seereferences/authoring.md§ Sharing. - Lazy
await import("./infra/<module>")insiderun()sosst devhot-reload stays light. (For testing, a module export still runs its top-levelnew sst.aws.*unless it's wrapped in a factory function — seereferences/testing.mdfor how to test infra.) - Source-level Vitest tests on every infra module — a lightweight,
house-style regression net asserting on the source text (resource names,
index shapes, IAM scopes). It's a deliberate choice, not an SST limit: Pulumi
does support runtime mocks (
@pulumi/pulumi/runtime) for behavioral graph tests when a module has real logic. Source assertions don't replace a preview-deploy + smoke test. Seereferences/testing.md. - An observability gate: every new Lambda/queue/schedule gets an alarm and
structured logging before merge. Whether you enforce this depends on the
project, but it's cheap insurance. See
references/deploy-and-troubleshoot.md§ Observability.
When you introduce a convention, say which bucket it's in ("this is universal" vs "matching this repo's house style") so the user can override the project-specific ones deliberately.
Working rhythm
- Orient (above) — map config, modules, tests, tooling.
- Verify syntax with Context7 / AWS docs MCP if anything is non-obvious. Don't guess at a component's option name.
- Author the resource/module following
references/authoring.md. Match the surrounding file's commenting density and naming — these projects comment the why heavily, and a terse one-liner in a heavily-annotated file reads as a regression. - Test — add or update source-level assertions (
references/testing.md) and runnpx vitest(or the repo'stestscript). Runnpx sst diffand/ortsc --noEmitto catch type and plan errors before deploying. - Deploy/operate per
references/deploy-and-troubleshoot.md. Confirm the target account withaws sts get-caller-identitybefore anysst deploy. - Clean up any exported state files — they contain account IDs and ARNs and
must not linger in
/tmpor chat history.
What good looks like
- The change is the smallest diff that satisfies the requirement, in the right
infra/module, wired intorun()in dependency order. - Every Lambda gets the right runtime via the global transform (you didn't
hand-set
runtimeunless intentionally diverging — e.g. a Python function). - Cross-resource references use
link:(in-graph) and/or$interpolate-scoped IAM; outputs other tools consume are published to SSM under the stage prefix. - New infra has a matching source-level test, and the existing suite stays green.
- You confirmed AWS-side facts via the docs MCP and SST/Pulumi syntax via Context7 rather than relying on recall.
- Anything irreversible (deploy,
sst remove, a resource-type migration) was flagged to the user with the account it targets, and migrations were planned as two PRs, not one.
GitHub репозиторий
Frequently asked questions
What is the aws-sst-development skill?
aws-sst-development is a Claude Skill by zxkane. Skills package instructions and resources that Claude loads on demand, so Claude can perform aws-sst-development-related tasks without extra prompting.
How do I install aws-sst-development?
Use the install commands on this page: add aws-sst-development to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.
What category does aws-sst-development belong to?
aws-sst-development is in the Meta category, tagged word, ai and design.
Is aws-sst-development free to use?
Yes. aws-sst-development is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.
Похожие навыки
Этот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.
Этот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.
Этот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.
SGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.
