Claude Skills Guide

Claude Code Pulumi Python Infrastructure Guide

Infrastructure as Code has become essential for modern cloud deployments, and combining Claude Code with Pulumi Python creates a powerful automation workflow. This guide shows developers and power users how to use Claude Code’s capabilities alongside Pulumi’s infrastructure management to build, test, and deploy cloud resources efficiently.

Setting Up Your Pulumi Python Project

Before integrating Claude Code, initialize a Pulumi Python project:

mkdir my-infra && cd my-infra
pulumi new python --name my-stack

Install your cloud provider packages. For AWS, add @pulumi/aws:

pip install pulumi-aws

Configure your cloud credentials using environment variables or the Pulumi CLI. Claude Code can handle the setup using its Bash tool to run commands and read_file configuration files.

How Claude Code Enhances Pulumi Workflows

Claude Code brings intelligent assistance to infrastructure projects through natural language interaction. When working with Pulumi Python, you can use several capabilities that accelerate development.

Code Generation: Describe the infrastructure you need, and Claude Code helps generate the Python code. For example, “Create an S3 bucket with versioning enabled” produces the appropriate Pulumi code:

import pulumi
import pulumi_aws as aws

# Create an S3 bucket with versioning enabled
bucket = aws.s3.BucketV2(
    "my-bucket",
    bucket="my-unique-bucket-name",
)

bucket_versioning = aws.s3.BucketVersioningV1(
    "my-bucket-versioning",
    bucket=bucket.id,
    versioning_configuration=aws.s3.BucketVersioningV1VersioningConfigurationArgs(
        status="Enabled",
    ),
)

Error Resolution: When Pulumi stacks fail during preview or update, Claude Code can analyze error messages and suggest fixes. This is particularly useful for permission errors, missing dependencies, or incorrect resource configurations.

Documentation Generation: Use the doc skill to automatically generate documentation for your infrastructure code. This helps teams understand the purpose and configuration of each resource.

Creating Reusable Infrastructure Components

One of Pulumi’s strengths is creating reusable components. Claude Code can help you design and implement component resources that encapsulate common infrastructure patterns.

Example: Web Server Component

Here’s a reusable component that provisions a web server with security groups:

import pulumi
import pulumi_aws as aws
from pulumi import ComponentResource, ComponentResourceOptions

class WebServerArgs:
    def __init__(
        self,
        vpc_id: str,
        instance_type: str = "t3.micro",
        ami_id: str = "ami-0c55b159cbfafe1f0",
    ):
        self.vpc_id = vpc_id
        self.instance_type = instance_type
        self.ami_id = ami_id

class WebServer(ComponentResource):
    def __init__(self, name: str, args: WebServerArgs, opts: ComponentResourceOptions = None):
        super().__init__("custom:WebServer", name, {}, opts)

        # Security group for the web server
        self.security_group = aws.ec2.SecurityGroup(
            f"{name}-sg",
            vpc_id=args.vpc_id,
            description="Security group for web server",
            ingress=[
                {"protocol": "tcp", "from_port": 80, "to_port": 80, "cidr_blocks": ["0.0.0.0/0"]},
                {"protocol": "tcp", "from_port": 443, "to_port": 443, "cidr_blocks": ["0.0.0.0/0"]},
                {"protocol": "tcp", "from_port": 22, "to_port": 22, "cidr_blocks": ["0.0.0.0/0"]},
            ],
            opts=opts,
        )

        # EC2 instance
        self.instance = aws.ec2.Instance(
            f"{name}-instance",
            instance_type=args.instance_type,
            ami=args.ami_id,
            vpc_security_group_ids=[self.security_group.id],
            opts=opts,
        )

        self.register_outputs({"public_ip": self.instance.public_ip})

This component can then be instantiated multiple times across your infrastructure:

web_server = WebServer(
    "production-web",
    WebServerArgs(
        vpc_id=vpc.id,
        instance_type="t3.medium",
    ),
)

Testing Infrastructure with the TDD Skill

The tdd skill works well with infrastructure code to implement test-driven development patterns. Before deploying resources, write tests that verify expected behavior:

import pytest
from pulumi import Output
from pulumi.testing import Mocks

class MockPulumi(Mocks):
    def call(self, args):
        return {}

    def new_resource(self, args):
        return [args.id + "-mocked", {}]

# Use with pytest
def test_web_server_creates_security_group():
    # Test that security group is created with correct rules
    pass

This approach catches configuration errors before they reach production.

Managing Multi-Environment Deployments

For teams managing multiple environments, Claude Code helps create consistent deployment patterns across staging, production, and development environments.

Create a stack configuration that uses Pulumi’s stack references:

import pulumi

# Reference shared infrastructure from another stack
shared_stack = pulumi.StackReference("organization/shared-infra/prod")
vpc_id = shared_stack.require_output("vpc_id")

# Use the referenced VPC
web_server = WebServer(
    "prod-web",
    WebServerArgs(vpc_id=vpc_id),
)

The supermemory skill can help track environment-specific configurations and maintain context across deployments.

CI/CD Integration Patterns

Integrating Pulumi Python with CI/CD pipelines requires careful handling of secrets and state. Claude Code can assist with setting up GitHub Actions workflows:

name: Infrastructure Update
on:
  push:
    paths:
      - 'infra/**'
jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - run: pip install pulumi
      - run: pulumi login
      - run: pulumi preview
        env:
          PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}

The frontend-design skill can also help if you’re building infrastructure dashboards or UIs for managing deployments.

Best Practices for Claude Code + Pulumi

Follow these practices for effective infrastructure development:

Use descriptive resource names: Name resources clearly so their purpose is obvious in the Pulumi console and cloud provider interfaces.

Implement proper tagging: Add tags to all resources for cost tracking and organization:

tags = {
    "Environment": pulumi.get_stack(),
    "ManagedBy": "Pulumi",
    "Project": "my-infrastructure",
}

bucket = aws.s3.BucketV2(
    "my-bucket",
    tags=tags,
)

Store state securely: Use Pulumi’s managed service or set up a backend with proper encryption.

Review previews carefully: Always run pulumi preview before pulumi up to catch unintended changes.

Conclusion

Combining Claude Code with Pulumi Python creates a powerful workflow for infrastructure automation. Claude Code handles code generation, error resolution, and documentation while Pulumi manages the actual resource provisioning. This combination reduces manual work and helps teams maintain consistent, testable infrastructure code.

For teams working with complex deployments, consider integrating additional skills like the tdd skill for testing infrastructure or supermemory for maintaining deployment context across sessions.

Built by theluckystrike — More at zovo.one