webiny-infrastructure-extensions
Modifying AWS infrastructure using Pulumi handlers and declarative Infra components. Use this skill when the developer wants to customize AWS infrastructure, add Pulumi handlers, configure OpenSearch, VPC, resource tags, regions, custom domains, blue-green deployments, environment-conditional config, or manage production vs development infrastructure modes. Covers CorePulumi.Interface, all <Infra.*> declarative components, and <Infra.Env.Is>.
Best use case
webiny-infrastructure-extensions is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Modifying AWS infrastructure using Pulumi handlers and declarative Infra components. Use this skill when the developer wants to customize AWS infrastructure, add Pulumi handlers, configure OpenSearch, VPC, resource tags, regions, custom domains, blue-green deployments, environment-conditional config, or manage production vs development infrastructure modes. Covers CorePulumi.Interface, all <Infra.*> declarative components, and <Infra.Env.Is>.
Teams using webiny-infrastructure-extensions should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/infrastructure-extensions/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How webiny-infrastructure-extensions Compares
| Feature / Agent | webiny-infrastructure-extensions | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Modifying AWS infrastructure using Pulumi handlers and declarative Infra components. Use this skill when the developer wants to customize AWS infrastructure, add Pulumi handlers, configure OpenSearch, VPC, resource tags, regions, custom domains, blue-green deployments, environment-conditional config, or manage production vs development infrastructure modes. Covers CorePulumi.Interface, all <Infra.*> declarative components, and <Infra.Env.Is>.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agents for Startups
Explore AI agent skills for startup validation, product research, growth experiments, documentation, and fast execution with small teams.
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
AI Agent for Product Research
Browse AI agent skills for product research, competitive analysis, customer discovery, and structured product decision support.
SKILL.md Source
# Infrastructure Extensions
## TL;DR
Infrastructure extensions modify your AWS infrastructure using Pulumi handlers and declarative `<Infra.*>` components in `webiny.config.tsx`. Pulumi handlers implement `CorePulumi.Interface` and are registered via `<Infra.Core.Pulumi>`. Declarative components configure OpenSearch, VPC, tags, regions, custom domains, blue-green deployments, and environment-specific settings.
## Pulumi Handler Pattern
Write custom Pulumi code that runs during infrastructure deployment:
```typescript
// extensions/MyCorePulumiHandler.ts
import { Ui } from "webiny/infra";
import { CorePulumi } from "webiny/infra/core";
class MyCorePulumiHandlerImpl implements CorePulumi.Interface {
constructor(private ui: Ui.Interface) {}
execute(app: any) {
this.ui.info("Executing MyCorePulumiHandler with environment:", app.env);
// Access and modify Pulumi resources here
// app.resources gives you access to all provisioned resources
}
}
export default CorePulumi.createImplementation({
implementation: MyCorePulumiHandlerImpl,
dependencies: [Ui]
});
```
Register (**YOU MUST include the `.ts` file extension in the `src` prop** — omitting it will cause a build failure):
```tsx
<Infra.Core.Pulumi src={"/extensions/MyCorePulumiHandler.ts"} />
```
### Use Cases for Pulumi Handlers
- Add custom AWS resources (CloudWatch alarms, extra S3 buckets, Lambda functions)
- Modify existing resource properties (Lambda memory, timeouts, environment variables)
- Add conditional infrastructure based on environment
- Integrate with third-party infrastructure providers
## Declarative Infrastructure Components
These components go directly in `webiny.config.tsx` -- no separate extension file needed:
### AWS Configuration
```tsx
{/* Set the AWS region */}
<Infra.Aws.DefaultRegion name={"us-east-1"} />
{/* Apply tags to all AWS resources -- multiple calls are merged */}
<Infra.Aws.Tags tags={{ OWNER: "me", PROJECT: "my-project" }} />
<Infra.Aws.Tags tags={{ COST_CENTER: "engineering" }} />
```
### Search & Networking
```tsx
{
/* Enable/disable OpenSearch */
}
<Infra.OpenSearch enabled={true} />;
{
/* Enable/disable VPC deployment */
}
<Infra.Vpc enabled={false} />;
```
### Resource Naming
```tsx
{
/* Prefix all Pulumi resource names */
}
<Infra.PulumiResourceNamePrefix prefix={"myproj-"} />;
{
/* Define which environments use production-grade infrastructure */
}
<Infra.ProductionEnvironments environments={["prod", "staging"]} />;
```
### Custom Domains
```tsx
<Infra.Admin.CustomDomains
domains={["admin.example.com"]}
sslMethod="sni-only"
certificateArn="arn:aws:acm:us-east-1:123456789:certificate/abc-123"
/>
```
### Blue-Green Deployments
```tsx
<Infra.BlueGreenDeployments
enabled={true}
domains={{
acmCertificateArn: "arn:aws:acm:us-east-1:123456789:certificate/abc-123",
sslSupportMethod: "sni-only",
domains: {
api: ["api.example.com"],
admin: ["admin.example.com"],
website: ["website.example.com"],
preview: ["preview.example.com"]
}
}}
deployments={[
{ name: "green", env: "dev", variant: "green" },
{ name: "blue", env: "dev", variant: "blue" }
]}
/>
```
## Environment-Conditional Configuration
Use `<Infra.Env.Is>` to apply settings only in specific environments:
```tsx
{
/* Production only */
}
<Infra.Env.Is env="prod">
<Infra.Aws.Tags tags={{ ENV: "production" }} />
<Infra.OpenSearch enabled={true} />
</Infra.Env.Is>;
{
/* Non-production (accepts array) */
}
<Infra.Env.Is env={["dev", "staging"]}>
<Infra.Aws.Tags tags={{ ENV: "non-production" }} />
<Infra.OpenSearch enabled={false} />
</Infra.Env.Is>;
```
## Project-Level Settings
```tsx
{
/* Disable telemetry */
}
<Project.Telemetry enabled={false} />;
{
/* Auto-install for CI/CD (skip the installation wizard) */
}
{
process.env.WEBINY_CLI_AUTO_INSTALL && (
<Project.AutoInstall
adminUser={{
firstName: "Ad",
lastName: "Min",
email: "admin@webiny.com",
password: "12345678"
}}
/>
);
}
```
## All Infrastructure Components Reference
| Component | Purpose |
| ------------------------------------------------------- | ------------------------------------ |
| `<Infra.Aws.DefaultRegion name="..." />` | Set the AWS region |
| `<Infra.Aws.Tags tags={{ ... }} />` | Tag all AWS resources |
| `<Infra.OpenSearch enabled={bool} />` | Enable/disable OpenSearch cluster |
| `<Infra.Vpc enabled={bool} />` | Enable/disable VPC deployment |
| `<Infra.PulumiResourceNamePrefix prefix="..." />` | Prefix Pulumi resource names |
| `<Infra.ProductionEnvironments environments={[...]} />` | Define production-grade environments |
| `<Infra.Admin.CustomDomains ... />` | Custom domains for Admin app |
| `<Infra.BlueGreenDeployments ... />` | Blue-green deployment configuration |
| `<Infra.Env.Is env="..." />` | Conditional config per environment |
| `<Infra.Core.Pulumi src="..." />` | Register a custom Pulumi handler |
| `<Project.Telemetry enabled={bool} />` | Enable/disable telemetry |
| `<Project.AutoInstall adminUser={{ ... }} />` | Auto-install for CI/CD |
## Quick Reference
```
Pulumi import: import { CorePulumi } from "webiny/infra/core";
Ui import: import { Ui } from "webiny/infra";
Interface: CorePulumi.Interface
Export: CorePulumi.createImplementation({ implementation, dependencies })
Register: <Infra.Core.Pulumi src={"/extensions/MyHandler.ts"} />
Deploy: yarn webiny deploy core (infrastructure changes)
```
## Related Skills
- `webiny-project-structure` -- Full `webiny.config.tsx` anatomy
- `webiny-local-development` -- Deployment commands and environment management
- `webiny-full-stack-architect` -- Full-stack extensions that may require custom infrastructureRelated Skills
webiny-v5-to-v6-migration
Migration patterns for converting v5 Webiny code to v6 architecture. Use this skill when migrating existing v5 plugins to v6 features, converting context plugins to DI services, adapting v5 event subscriptions to v6 EventHandlers, or understanding how v5 patterns translate to v6. Targeted at AI agents performing migrations.
webiny-api-permissions
Schema-based permission system for API features. Use this skill when implementing authorization in use cases, defining permission schemas with createPermissionSchema, creating injectable permissions via createPermissionsAbstraction/createPermissionsFeature, checking read/write/delete/publish permissions, handling own-record scoping, or testing permission scenarios. Covers the full pattern from schema definition to use case integration to test matrices.
webiny-admin-permissions
Admin-side permission UI registration and DI-backed permission checking. Use this skill when adding permission controls to the admin UI — schema-based auto-generated forms, injectable permissions via createPermissionsAbstraction/ createPermissionsFeature, typed hooks (createUsePermissions), the HasPermission component (createHasPermission), and the Security.Permissions component props. Covers both simple apps and complex multi-entity permission schemas.
webiny-sdk
Using @webiny/sdk to read and write CMS data from external applications. Use this skill when the developer is building a Next.js, Vue, Node.js, or any external app that needs to fetch or write content to Webiny, set up the SDK, use the Result pattern, list/get/create/update/publish entries, filter and sort queries, use TypeScript generics for type safety, work with the File Manager, or create API keys programmatically. Covers read vs preview mode, the `values` wrapper requirement, correct method names, and the `fields` required parameter.
webiny-project-structure
Webiny project layout, webiny.config.tsx anatomy, and extension registration. Use this skill when the developer asks about folder structure, where custom code goes, how to register extensions, what webiny.config.tsx does, or how the project is organized. Also use when they need to understand the relationship between extensions/, webiny.config.tsx, and the different extension types (Api, Admin, Infra, CLI).
webiny-local-development
Deploying, developing locally, managing environments, and debugging Webiny projects. Use this skill when the developer asks about deployment commands (deploy, destroy, info), local development with watch mode (API or Admin), the Local Lambda Development system, environment management (long-lived vs short-lived, production vs dev modes), build parameters, state files, debugging API/Admin/Infrastructure errors, or the redeploy-after-watch requirement.
webiny-infra-catalog
Infrastructure — 33 abstractions. Infrastructure extensions.
webiny-extensions-catalog
extensions — 5 abstractions.
webiny-cli-command-catalog
cli/command — 1 abstractions.
webiny-cli-catalog
cli — 2 abstractions.
webiny-api-tenant-manager-catalog
API — Tenant Manager — 2 abstractions. Tenant management event handlers and use cases.
webiny-api-tasks-catalog
api/tasks — 2 abstractions.