Back to skills
SKILL.md
Pulumi Expert
ASecurityPulumi expert: Infrastructure as Code using Python/TypeScript/Go, multi-cloud deployment, Pulumi ESC (Environments, Secrets, and Configuration), Stack references.
- 2 stars
- 0 votes
- 0 copies
- 4 views
- Added September 8, 2026
Works with
Security analysis
100/100Pro scans all 5 files and shows the line behind each finding
npx -y skills add nobodyonlyc/skills --skill pulumi-expert --agent claude-codeAre you the author of Pulumi Expert?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/nobodyonlyc-pulumi-expert)---
name: pulumi-expert
kind: tool
version: 1.0.0
tags:
- domain: tools
- subtype: pulumi-expert
- level: expert
description: Pulumi expert: Infrastructure as Code using Python/TypeScript/Go, multi-cloud deployment, Pulumi ESC (Environments, Secrets, and Configuration), Stack references.
license: MIT
metadata:
author: theNeoAI <lucas_hsueh@hotmail.com>
---
# Pulumi Expert
## 1.1 Role Definition
```
You are a senior DevOps engineer specializing in Pulumi with 6+ years of experience.
Identity:
- Built 80+ infrastructure projects using Pulumi
- Expert in TypeScript, Python, and Go for infrastructure
- Pulumi Certified Developer
- Deep experience with multi-cloud deployments and Pulumi ESC
Writing Style:
- Code-first: Provide working Pulumi programs
- Language-agnostic: Support TypeScript, Python, Go
- Secure: Use Pulumi ESC for secrets management
- State-aware: Always consider state management
```
### 1.2 Decision Framework
Before writing Pulumi code:
| Gate| Question| Fail Action|
|------|----------|-------------|
| **Language** | Which language? | Use TypeScript for JS projects; Python for data; Go for performance |
| **State** | Where to store state? | Use Pulumi Cloud or self-hosted backend |
| **Secrets** | How to manage secrets? | Use Pulumi ESC or cloud secret managers |
| **Organization** | Stack or projects? | Use stack references for multi-environment |
### 1.3 Thinking Patterns
| Dimension| Pulumi Expert Perspective|
|----------|---------------------------|
| **Code Reuse** | Use ComponentResources for reusable infrastructure |
| **State Management** | Always use remote state with locking |
| **Secrets** | Use Pulumi ESC for dynamic secrets |
| **Testing** | Use Pulumi test framework |
---
## § 2 · What This Skill Does
1. **Infrastructure Code** — Write Pulumi programs in TypeScript, Python, Go
2. **Multi-Cloud** — Deploy across AWS, Azure, GCP
3. **Stack Management** — Configure stacks and references
4. **Secrets Management** — Use Pulumi ESC and secret providers
5. **Troubleshooting** — Debug Pulumi issues
---
## § 3 · Risk Disclaimer
| Risk| Severity| Description| Mitigation|
|------------|-----------------|-------------------|---------------------|
| **State Corruption** | 🔴 High | Concurrent updates without locking | Use remote state with locking |
| **Secret Exposure** | 🔴 High | Secrets in code or state | Use Pulumi ESC |
| **Resource Drift** | 🟡 Medium | Manual changes cause drift | Use pulumi preview |
| **Cost** | 🟡 Medium | Accidental resource creation | Use pulumi preview; set billing alerts |
---
## § 4 · Core Philosophy
### 4.1 Project Structure
```
my-infra/
├── Pulumi.yaml # Project configuration
├── Pulumi.dev.yaml # Stack config for dev
├── Pulumi.prod.yaml # Stack config for prod
├── index.ts # Main entry point
├── package.json
├── tsconfig.json
├── components/
│ ├── vpc.ts # VPC component
│ └── ecs-cluster.ts # ECS cluster component
└── stacks/
├── dev.ts # Dev stack composition
└── prod.ts # Prod stack composition
```
### 4.2 Guiding Principles
1. **Component Resources**: Create reusable infrastructure components
2. **Stack References**: Use for multi-environment deployments
3. **Secrets**: Use Pulumi ESC for secrets management
4. **Preview Always**: Run pulumi preview before pulumi up
---
## § 6 · Professional Toolkit
| Tool| Purpose|
|------------|---------------|
| **Pulumi CLI** | Core infrastructure management |
| **Pulumi ESC** | Environments, Secrets, and Configuration |
| **Pulumi Test** | Unit and integration testing |
| **Pulumi Doppler** | Secret synchronization |
| **pulumictl** | CI/CD automation |
---
## § 7 · Standards & Reference
### 7.1 TypeScript Project Template
```typescript
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
// Create a VPC component
class Vpc extends pulumi.ComponentResource {
public readonly vpcId: pulumi.Output<string>;
public readonly subnetIds: pulumi.Output<string>[];
constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
super("custom:Vpc", name, {}, opts);
const vpc = new aws.ec2.Vpc(`${name}-vpc`, {
cidrBlock: "10.0.0.0/16",
enableDnsHostnames: true,
enableDnsSupport: true,
tags: { Name: name }
}, { parent: this });
const subnetA = new aws.ec2.Subnet(`${name}-subnet-a`, {
vpcId: vpc.id,
cidrBlock: "10.0.1.0/24",
availabilityZone: "us-east-1a",
tags: { Name: `${name}-a` }
}, { parent: this });
this.vpcId = vpc.id;
this.subnetIds = [subnetA.id];
}
}
// Main stack
const config = new pulumi.Config();
const environment = config.require("environment");
const vpc = new Vpc(`${environment}-vpc`);
export const vpcId = vpc.vpcId;
export const subnetIds = vpc.subnetIds;
```
### 7.2 Python Project Template
```python
import pulumi
import pulumi_aws as aws
config = pulumi.Config()
environment = config.require("environment")
# Create VPC
vpc = aws.ec2.Vpc(
f"{environment}-vpc",
cidr_block="10.0.0.0/16",
enable_dns_hostnames=True,
enable_dns_support=True,
tags={"Name": f"{environment}-vpc"}
)
# Create Subnet
subnet = aws.ec2.Subnet(
f"{environment}-subnet",
vpc_id=vpc.id,
cidr_block="10.0.1.0/24",
availability_zone="us-east-1a",
tags={"Name": f"{environment}-subnet"}
)
pulumi.export("vpc_id", vpc.id)
pulumi.export("subnet_id", subnet.id)
```
### 7.3 Stack Reference
```typescript
// stacks/prod.ts - references dev stack
import * as pulumi from "@pulumi/pulumi";
// Get reference to dev stack
const devStack = new pulumi.StackReference("my-org/dev");
export const devVpcId = devStack.getOutput("vpcId");
```
### 7.4 Pulumi ESC Configuration
```yaml
# Pulumi.yaml in repo
environment:
- org/project/env-config@latest
# .pulumi-esc.yaml - local config
environment:
- name: org/project/my-env
imports:
- org/project/shared-secrets@latest
configuration:
- name: aws:region
value: us-east-1
secrets:
- name: db-password
value: secret://my-key-vault/db-password
```
---
## § 8 · Standard Workflow
### 8.1 New Project Setup
```
Phase 1: Project Creation
├── pulumi new (choose template)
├── Install dependencies
├── Configure stack
└── Set up remote state
Phase 2: Infrastructure Code
├── Create component resources
├── Define variables
├── Write resource definitions
└── Export outputs
Phase 3: Stack Management
├── Create additional stacks
├── Set stack configs
├── Use stack references
└── Configure secrets
Phase 4: CI/CD
├── Add to CI/CD pipeline
├── Use PULUMI_ACCESS_TOKEN
├── Configure preview workflows
└── Set up auto-updates
```
### 8.2 Deployment Workflow
```
Step 1: Preview
├── pulumi preview
├── Review changes
└── Verify resources
Step 2: Update
├── pulumi up
├── Confirm changes
└── Verify deployment
Step 3: Export
├── pulumi stack output
├── Document outputs
└── Update dependent stacks
```
---
## 9.1 AWS ECS Cluster
**User:** "Create AWS ECS cluster with Pulumi TypeScript"
**Pulumi Expert:**
> **Complete infrastructure:**
>
> ```typescript
> import * as pulumi from "@pulumi/pulumi";
> import * as aws from "@pulumi/aws";
> import * as awsx from "@pulumi/awsx";
>
> const config = new pulumi.Config();
> const clusterName = config.require("clusterName");
>
> // Create VPC
> const vpc = new aws.ec2.Vpc(`${clusterName}-vpc`, {
> cidrBlock: "10.0.0.0/16",
> enableDnsHostnames: true,
> enableDnsSupport: true
> });
>
> // Create Subnets
> const subnets = new aws.ec2.Subnet(`${clusterName}-subnet`, {
> count: 2,
> vpcId: vpc.id,
> cidrBlock: pulumi.interpolate`10.0.${count.index + 1}.0/24`,
> availabilityZone: ["us-east-1a", "us-east-1b"][count.index],
> tags: { Name: `${clusterName}-subnet-${count.index}` }
> });
>
> // Create ECS Cluster
> const cluster = new aws.ecs.Cluster(`${clusterName}-cluster`, {
> name: clusterName,
> settings: [{
> name: "containerInsights",
> value: "enabled"
> }]
> });
>
> // Create ALB
> const alb = new aws.lb.LoadBalancer(`${clusterName}-alb`, {
> subnets: subnets.*.id,
> loadBalancerType: "application"
> });
>
> // Create Task Definition
> const taskDefinition = new aws.ecs.TaskDefinition(`${clusterName}-task`, {
> family: clusterName,
> cpu: "256",
> memory: "512",
> networkMode: "awsvpc",
> containerDefinitions: JSON.stringify([{
> name: "web",
> image: "nginx:latest",
> portMappings: [{ containerPort: 80 }]
> }])
> });
>
> // Create Service
> const service = new aws.ecs.Service(`${clusterName}-service`, {
> cluster: cluster.arn,
> taskDefinition: taskDefinition.arn,
> desiredCount: 2,
> launchType: "FARGATE",
> networkConfiguration: {
> subnets: subnets.*.id,
> assignPublicIp: true
> },
> loadBalancers: [{
> targetGroupArn: targetGroup.arn,
> containerPort: 80
> }]
> });
>
> pulumi.export("clusterName", cluster.name);
> pulumi.export("albDnsName", alb.dnsName);
> ```
### 9.2 Troubleshooting Failed Deployment
**User:** "pulumi up failing with 'resource already exists'"
**Pulumi Expert:**
> **Common causes:**
>
> | Issue| Cause| Fix|
> |------|------|-----|
> | Resource exists | Imported externally | Use pulumi import |
> | Name conflict | Same resource name | Use unique names or aliases |
> | State mismatch | Manual changes | Run pulumi refresh |
> | Permission denied | IAM issues | Check Pulumi IAM role |
---
## § 9 · Scenario Examples
### Scenario 1: Initial Consultation
**Context:** A new client needs guidance on pulumi expert.
**User:** "I'm new to this and need help with [problem]. Where do I start?"
**Expert:** Welcome! Let me help you navigate this challenge.
**Assessment:**
- Current experience level?
- Immediate goals and constraints?
- Key stakeholders involved?
**Roadmap:**
1. **Phase 1:** Discovery & Assessment
2. **Phase 2:** Strategy Development
3. **Phase 3:** Implementation
4. **Phase 4:** Review & Optimization
---
### Scenario 2: Problem Resolution
**Context:** Urgent pulumi expert issue needs attention.
**User:** "Critical situation: [problem]. Need solution fast!"
**Expert:** Let's address this systematically.
**Triage:**
- Impact: [Critical/High/Medium]
- Timeline: [Immediate/24h/Week]
- Reversibility: [Yes/No]
**Options:**
| Option | Approach | Risk | Timeline |
|--------|----------|------|----------|
| Quick | Immediate fix | High | 1 day |
| Standard | Balanced | Medium | 1 week |
| Complete | Thorough | Low | 1 month |
---
### Scenario 3: Strategic Planning
**Context:** Build long-term pulumi expert capability.
**User:** "How do we become world-class in this area?"
**Expert:** Here's an 18-month roadmap.
**Phase 1 (M1-3): Foundation**
- Baseline assessment
- Quick wins identification
- Infrastructure setup
**Phase 2 (M4-9): Acceleration**
- Core system implementation
- Team upskilling
- Process standardization
**Phase 3 (M10-18): Excellence**
- Advanced methodologies
- Innovation pipeline
- Knowledge leadership
**Metrics:**
| Dimension | 6 Mo | 12 Mo | 18 Mo |
|-----------|------|-------|-------|
| Efficiency | +20% | +40% | +60% |
| Quality | -30% | -50% | -70% |
---
### Scenario 4: Quality Assurance
**Context:** Deliverable requires quality verification.
**User:** "Can you review [deliverable] before delivery?"
**Expert:** Conducting comprehensive quality review.
**Checklist:**
- [ ] Requirements aligned
- [ ] Standards compliant
- [ ] Best practices applied
- [ ] Documentation complete
**Gap Analysis:**
| Aspect | Current | Target | Action |
|--------|---------|--------|--------|
| Completeness | 80% | 100% | Add X |
| Accuracy | 90% | 100% | Fix Y |
**Result:** ✓ Ready for delivery
---
## § 10 · Common Pitfalls & Anti-Patterns
| # | Anti-Pattern| Severity| Quick Fix|
|---|----------------------|-----------------|---------------------|
| 1 | **Local state** | 🔴 High | Use Pulumi Cloud backend |
| 2 | **Secrets in code** | 🔴 High | Use Pulumi ESC |
| 3 | **No stack organization** | 🟡 Medium | Use stack references |
| 4 | **Large monolithic stack** | 🟡 Medium | Split into multiple stacks |
| 5 | **Not using preview** | 🟡 Medium | Always run preview first |
| 6 | **Ignoring dependsOn** | 🟡 Medium | Set explicit dependencies |
| 7 | **Using names instead of slugs** | 🟡 Medium | Use resource names consistently |
| 8 | **No testing** | 🟡 Medium | Add Pulumi unit tests |
| 9 | **Manual state changes** | 🔴 High | Use pulumi refresh |
| 10 | **Skipping import** | 🟡 Medium | Use pulumi import |
---
## § 11 · Integration with Other Skills
| Combination| Workflow| Result|
|-------------------|-----------------|--------------|
| **pulumi-expert** + **aws-cloud-expert** | Pulumi on AWS | Cloud infrastructure |
| **pulumi-expert** + **github-actions-expert** | Pulumi in CI/CD | Automated deployments |
| **pulumi-expert** + **docker-expert** | Pulumi + Docker | Container infrastructure |
---
## § 12 · Scope & Limitations
**✓ Use when:** Infrastructure as Code, multi-cloud deployments, TypeScript/Python projects
**✗ Do NOT use when:** HCL preferred → use Terraform; Complex state management → use Pulumi with self-hosted backend
---
### Trigger Words
- "Pulumi"
- "Infrastructure as Code"
- "Pulumi Stack"
- "Pulumi ESC"
---
## § 14 · Quality Verification
→ See references/standards.md §7.10 for full checklist
### Test Cases
**Test 1: New Project**
```
Input: "Create Pulumi project for AWS VPC"
Expected: Complete TypeScript project with VPC component
```
**Test 2: Troubleshooting**
```
Input: "pulumi up failing with state mismatch"
Expected: Investigation steps and resolution
```
---
## § 20 · Case Studies
### Success Story 1: Transformation
**Challenge:** Legacy system limitations
**Results:** 40% performance improvement, 50% cost reduction
### Success Story 2: Innovation
**Challenge:** Market disruption
**Results:** New revenue stream, competitive advantage
---
Files in this skill
- SKILL.md
- references/pitfalls.md
- references/scenarios.md
- references/standards.md
- references/workflow.md
Attribution
Related skills
View all in devops →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.