Remote Pulumi Engineer Jobs

Typical Software Engineering salary: $191k–$278k · 401 listings with salary data

Pulumi engineers design and operate cloud infrastructure using general-purpose programming languages — writing TypeScript, Python, Go, or C# programs that provision and manage AWS, GCP, Azure, and Kubernetes resources through the Pulumi SDK, implementing reusable component resources that encapsulate infrastructure patterns for consistent use across multiple stacks, managing state and secrets through Pulumi Cloud or self-managed backends, and building CI/CD pipelines that deploy infrastructure changes through automated preview and update workflows. At remote-first technology companies, they serve as the infrastructure-as-code specialists who bring software engineering practices — unit testing, abstraction, loops, conditionals, and type safety — to cloud infrastructure definition, enabling distributed engineering teams to provision and manage cloud resources with the same rigor and tooling they apply to application code.

What Pulumi engineers do

Pulumi engineers write infrastructure programs — defining cloud resources using Pulumi's resource model in TypeScript, Python, Go, or C#; using the pulumi new templates for project scaffolding; and running pulumi up for preview and deployment; design stack architecture — organizing infrastructure into stacks (dev, staging, production) with stack configuration and stack references for cross-stack resource sharing; implement component resources — writing Pulumi ComponentResource classes that package multiple resources into reusable, composable abstractions with outputs that consumers reference; manage secrets — using pulumi config set --secret for encrypted configuration values, integrating with AWS Secrets Manager, HashiCorp Vault, or Pulumi ESC for secrets management; implement state management — configuring Pulumi Cloud or S3/GCS/Azure Blob backends for state storage; managing stack locking for concurrent deploy safety; implement automation API — using Pulumi's Automation API for programmatic stack operations in custom deployment tooling, CLIs, and web portals that provision infrastructure on demand; build multi-cloud programs — combining AWS, GCP, Azure, and Kubernetes resources in a single program where the hosting topology requires multiple providers; implement testing — writing unit tests with mocked Pulumi resource providers, integration tests that deploy real resources to test environments; design GitOps workflows — integrating Pulumi with GitHub Actions, GitLab CI, or Jenkins via pulumi preview on PRs and pulumi up on merge; manage drift — using pulumi refresh to detect resource drift from out-of-band changes and pulumi import to bring existing resources under Pulumi management; and implement policy as code — using Pulumi CrossGuard (PAC) to enforce infrastructure compliance policies that block non-compliant resource deployments.

Key skills for Pulumi engineers

  • Pulumi SDK: resource model, inputs/outputs, apply(), interpolation, resource options (dependsOn, parent, provider)
  • Languages: TypeScript (primary), Python, Go, or C# for Pulumi programs; type safety and IDE support
  • Component resources: ComponentResource, registerOutputs, custom component design and packaging
  • Stack management: stack configuration, stack references, stack outputs, environment-specific values
  • Pulumi Cloud: state backend, secrets encryption, team access controls, audit logs
  • Automation API: LocalWorkspace, Stack.upAsync, programmatic preview/deploy for custom tooling
  • Multi-cloud: AWS (aws, aws-native), GCP (gcp), Azure (azure-native), Kubernetes providers
  • Testing: @pulumi/pulumi mocking, unit tests for resource graphs, policy testing with CrossGuard
  • GitOps: Pulumi GitHub Actions (pulumi/actions), PR preview comments, automated deployments
  • Policy as code: Pulumi CrossGuard (PAC), PolicyPack, enforcement levels, mandatory policies

Salary expectations for remote Pulumi engineers

Remote Pulumi engineers earn $120,000–$195,000 total compensation. Base salaries range from $100,000–$160,000, with equity at technology companies where cloud infrastructure quality, provisioning velocity, and cost efficiency directly affect product reliability and engineering team productivity. Pulumi engineers with Pulumi Automation API expertise for building internal developer platforms, CrossGuard policy library depth for enterprise compliance enforcement, multi-cloud architecture experience provisioning complex topologies across AWS and GCP simultaneously, and demonstrated ability to build reusable component libraries used across large engineering organizations command the strongest premiums. Those with experience migrating Terraform codebases to Pulumi and with platform engineering backgrounds building Pulumi-based self-service infrastructure portals earn toward the top of the range.

Career progression for Pulumi engineers

The path from Pulumi engineer leads to senior cloud infrastructure engineer (broader scope across Pulumi, Terraform, and cloud-native infrastructure patterns), platform engineer (building the infrastructure platform that application teams provision resources through), or cloud architect (designing the multi-cloud topology and governance model for the organization). Some Pulumi engineers specialize into platform engineering product development, where Pulumi's Automation API enables building internal developer portals that abstract cloud provisioning into self-service workflows for application teams. Others expand into FinOps engineering, where Pulumi's programmatic infrastructure model enables cost optimization through automated right-sizing, scheduled scaling, and policy-enforced resource tagging. Pulumi engineers with strong software development backgrounds are particularly well-positioned for developer tooling roles, where their combination of infrastructure knowledge and software engineering practices enables building the next generation of infrastructure automation products.

Remote work considerations for Pulumi engineers

Building and operating Pulumi infrastructure at a remote company requires code organization, documentation, and automation practices that allow distributed engineering teams to provision resources, understand infrastructure decisions, and operate cloud environments safely without synchronous access to the infrastructure engineer. Pulumi engineers at remote companies implement structured stack reference patterns and document the cross-stack dependency graph — so distributed teams understand which stacks they depend on and what outputs they consume before creating new stacks; write component resource README documentation that describes the inputs, outputs, and operational characteristics of every shared component, enabling distributed contributors to use infrastructure abstractions correctly without reading implementation code; implement pulumi preview in CI on every pull request with automated PR comments showing the planned resource changes — giving distributed reviewers the infrastructure change impact alongside code changes; and configure CrossGuard policy packs that enforce cost, security, and compliance rules automatically, reducing the review burden on infrastructure specialists when distributed teams provision resources through self-service tooling.

Top industries hiring remote Pulumi engineers

  • Cloud-native technology companies that have adopted Pulumi as their infrastructure-as-code platform for its general-purpose language benefits — type safety, IDE support, unit testing, and code reuse through standard language package managers — and where platform engineering teams build reusable component libraries and Automation API-based self-service portals for application teams
  • Developer platform and tooling companies where Pulumi's Automation API powers programmatic infrastructure provisioning in SaaS products that spin up cloud resources on behalf of customers — where infrastructure provisioning is a product capability rather than an internal operations function
  • Financial services and fintech companies where Pulumi CrossGuard policy enforcement, audit logging, and the version-controlled infrastructure program model satisfy change management and compliance requirements, and where TypeScript or Python expertise in engineering teams enables faster adoption than HCL-based Terraform
  • AI and ML companies where Pulumi programs provision GPU-accelerated compute, managed ML platforms (SageMaker, Vertex AI), and the data infrastructure (S3, BigQuery, data pipelines) that ML workflows require — where the programmatic infrastructure model handles the dynamic, experiment-driven resource provisioning that ML workloads demand
  • High-growth technology scale-ups where Pulumi's Automation API powers engineering team self-service — new microservices, databases, and networking components provisioned through an internal portal backed by Pulumi stacks — reducing infrastructure team toil while maintaining governance through policy as code

Interview preparation for Pulumi engineer roles

Expect architecture questions: design a Pulumi program that provisions a production-ready AWS EKS cluster with VPC, private subnets, node groups, IAM roles, and Kubernetes RBAC — what the resource structure looks like, how you'd organize it into reusable ComponentResources, and how you'd manage the different configurations (cluster size, node instance type) between dev and production stacks. Component resource questions ask you to design a ComponentResource for a "managed PostgreSQL database" that creates an RDS instance, security group, parameter group, and subnet group, and exposes connection string and endpoint as outputs — what the ComponentResource class looks like and how consuming stacks reference its outputs. Testing questions ask how you'd write a unit test that verifies a Pulumi S3 bucket resource has server-side encryption enabled and versioning turned on — what the mock setup looks like and how you'd assert on the resource properties. Automation API questions ask how you'd build a CLI tool that lets developers provision a new microservice environment (ECS service, ALB target group, Route 53 record) by running a single command — what the Automation API code looks like. Be ready to walk through the most complex Pulumi program you've written — the stack architecture, the component abstractions, and the most challenging resource dependency problem you resolved.

Tools and technologies for Pulumi engineers

Core: Pulumi CLI 3.x; Pulumi Cloud (app.pulumi.com) for state and secrets; Pulumi ESC (Environments, Secrets, and Configuration) for centralized configuration. Language SDKs: @pulumi/pulumi (TypeScript/JavaScript); pulumi (Python); github.com/pulumi/pulumi/sdk/v3 (Go); Pulumi.Core (C#/.NET). Cloud providers: @pulumi/aws and @pulumi/aws-native; @pulumi/gcp; @pulumi/azure-native; @pulumi/kubernetes; @pulumi/cloudflare; @pulumi/datadog. State backends: Pulumi Cloud; S3 with DynamoDB locking; GCS; Azure Blob Storage. Policy as code: Pulumi CrossGuard; @pulumi/policy SDK; AWSGuard policy library. Automation API: @pulumi/pulumi/automation (TypeScript); pulumi.automation (Python); for CLI tools and self-service portals. Testing: @pulumi/pulumi/testing/mocks (TypeScript unit tests); pytest-pulumi (Python); Pulumi Deployments for drift detection. CI/CD: pulumi/actions (GitHub Actions); Pulumi GitLab CI integration; atlantis-compatible PR automation. Comparison: Terraform (HCL-based IaC alternative); AWS CDK (AWS-only programmatic IaC); OpenTofu (open-source Terraform fork).

Global remote opportunities for Pulumi engineers

Pulumi expertise is in growing global demand, with organizations adopting general-purpose language IaC as an alternative to Terraform for the software engineering benefits it enables — particularly as engineering teams scaled in TypeScript and Python find HCL's limitations in testing and abstraction increasingly constraining. US-based Pulumi engineers are in demand at cloud-native technology companies, developer platforms, AI companies, and fintech organizations where TypeScript or Python-first engineering cultures and the need for sophisticated infrastructure automation make Pulumi a natural choice over domain-specific language alternatives. EMEA-based Pulumi engineers are well-positioned given the growing European cloud-native engineering community — Pulumi adoption is accelerating in the UK, Germany, and Nordic markets where TypeScript-fluent engineering teams are evaluating infrastructure-as-code tooling, and where compliance requirements benefit from Pulumi's policy enforcement capabilities. The infrastructure-as-code market's continued growth and Pulumi's expanding ecosystem (Pulumi ESC, Pulumi Deployments, Pulumi Insights) ensure sustained demand for engineers with deep Pulumi expertise.

Frequently asked questions

How do Pulumi engineers manage secrets and sensitive configuration across stacks? Pulumi provides multiple layers of secrets management for different security requirements. Built-in encryption: pulumi config set --secret database_password <value> encrypts the value with the stack's encryption key (default: Pulumi Cloud-managed, or a custom KMS key); encrypted secrets are stored in Pulumi.stackname.yaml and decrypted only during pulumi up/preview. Pulumi ESC: Environments, Secrets, and Configuration centralizes secrets management across stacks — define a Pulumi ESC environment that pulls secrets from AWS Secrets Manager, HashiCorp Vault, or 1Password; compose multiple ESC environments per stack; secrets are resolved at deploy time without storing them in stack config files. In-program secrets: use pulumi.secret(value) to mark any computed value as secret — it will be encrypted in state and masked in pulumi up output. External secrets: use the AWS Secrets Manager, GCP Secret Manager, or HashiCorp Vault providers to read secrets from external stores within the Pulumi program and pass them as resource inputs. Secret propagation: Pulumi automatically tracks secret taint — any Output that depends on a secret input is automatically marked as secret and masked in logs, preventing accidental plaintext leakage through output chains.

What is the Pulumi Automation API and how do engineers use it? The Automation API provides a programmatic interface to Pulumi operations — stack creation, configuration, preview, up, refresh, and destroy — from within application code, enabling infrastructure orchestration beyond what the CLI supports. Use cases: internal developer portal that lets engineers provision new environments through a web UI; CI/CD pipeline tooling that selects the correct stack based on branch name and runs targeted updates; automated testing infrastructure that creates ephemeral stacks per test run and destroys them on completion. TypeScript example: const stack = await LocalWorkspace.createOrSelectStack({ stackName: 'dev', projectName: 'myapp', program: infraProgram }) creates or selects a stack; await stack.setConfig('aws:region', { value: 'us-east-1' }); const result = await stack.up({ onOutput: console.log }) runs pulumi up and streams output. Remote workspace: RemoteWorkspace runs Pulumi operations on Pulumi Cloud's managed execution environment, eliminating the need for local Pulumi CLI installation in CI systems. Inline programs: pass a PulumiFn program function directly to LocalWorkspace.createOrSelectStack to define the infrastructure entirely in code without a Pulumi project directory.

How do Pulumi engineers implement stack references for cross-stack resource sharing? Stack references allow a Pulumi stack to consume outputs from another stack without duplicating resource definitions or creating tight coupling. Creating outputs: export values from the producing stack — export const vpcId = vpc.id; export const privateSubnetIds = privateSubnets.ids — these appear in the stack's outputs after deployment. Consuming outputs: const networkStack = new pulumi.StackReference('org/network/prod'); const vpcId = networkStack.getOutput('vpcId') — the consuming stack reads the VPC ID from the network stack's outputs and uses it to create resources in the correct VPC. Type safety: use getOutput('name') which returns Output<any>, or requireOutput('name') which throws if the output doesn't exist; for TypeScript, cast to the expected type with networkStack.getOutput('vpcId').apply(id => id as string). Stack reference patterns: separate network infrastructure from application infrastructure; separate shared services (databases, queues) from application stacks; allow multiple application stacks to share a single network stack. Limitation: stack reference creates a runtime dependency — the producing stack must be deployed before the consuming stack; circular references are not allowed and will cause deployment failures.

Related resources

Ready to find your next remote pulumi engineer role?

RemNavi aggregates remote jobs from dozens of platforms. Search, filter, and apply at the source.

Browse all remote jobs