DEV Community

Alex Spinov
Alex Spinov

Posted on

Pulumi Has a Free API: Infrastructure as Code in Real Programming Languages

Why Pulumi

Pulumi lets you define infrastructure in TypeScript, Python, Go, C#, or Java — real languages with real IDEs, real testing, and real package managers. No HCL, no YAML.

Install

brew install pulumi
Enter fullscreen mode Exit fullscreen mode

Create AWS Resources in TypeScript

import * as pulumi from '@pulumi/pulumi';
import * as aws from '@pulumi/aws';

const bucket = new aws.s3.Bucket('my-bucket', {
  website: {
    indexDocument: 'index.html',
  },
});

const instance = new aws.ec2.Instance('web', {
  instanceType: 't3.micro',
  ami: 'ami-0c55b159cbfafe1f0',
  tags: { Name: 'web-server' },
});

export const bucketUrl = bucket.websiteEndpoint;
export const publicIp = instance.publicIp;
Enter fullscreen mode Exit fullscreen mode
pulumi up       # Deploy
pulumi preview  # Preview changes
pulumi destroy  # Tear down
Enter fullscreen mode Exit fullscreen mode

Kubernetes in Python

import pulumi
import pulumi_kubernetes as k8s

app = k8s.apps.v1.Deployment('myapp',
    spec=k8s.apps.v1.DeploymentSpecArgs(
        replicas=3,
        selector=k8s.meta.v1.LabelSelectorArgs(
            match_labels={'app': 'myapp'},
        ),
        template=k8s.core.v1.PodTemplateSpecArgs(
            metadata=k8s.meta.v1.ObjectMetaArgs(
                labels={'app': 'myapp'},
            ),
            spec=k8s.core.v1.PodSpecArgs(
                containers=[k8s.core.v1.ContainerArgs(
                    name='myapp',
                    image='nginx:latest',
                    ports=[k8s.core.v1.ContainerPortArgs(container_port=80)],
                )],
            ),
        ),
    ),
)
Enter fullscreen mode Exit fullscreen mode

Testing Infrastructure

import { describe, it, expect } from 'vitest';
import * as pulumi from '@pulumi/pulumi';

pulumi.runtime.setMocks({ ... });

describe('Infrastructure', () => {
  it('should create S3 bucket with website config', async () => {
    const { bucket } = await import('./index');
    const website = await bucket.website.promise();
    expect(website?.indexDocument).toBe('index.html');
  });
});
Enter fullscreen mode Exit fullscreen mode

Key Features

  • Real languages — TypeScript, Python, Go, C#, Java
  • IDE support — autocomplete, type checking, refactoring
  • Testing — unit test infrastructure like application code
  • State management — Pulumi Cloud or self-managed backends
  • All providers — AWS, Azure, GCP, K8s, 150+ providers
  • Import — bring existing resources under management

Resources


Need to extract cloud infrastructure data or provider APIs? Check out my Apify tools or email spinov001@gmail.com for custom solutions.

Top comments (0)