Pulumi infrastructure-as-code skills for Claude Code with ESC, OIDC, and cloud provider best practices.
99
Quality
99%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Complete reference for environment variables used with Pulumi CLI, especially for CI/CD and automation.
Pulumi Cloud access token for authentication.
export PULUMI_ACCESS_TOKEN=pul-xxxxxxxxxxxxxxxxxxxxxxxxxxxxUsage:
Best practices:
Override the default backend URL.
# Pulumi Cloud (default)
export PULUMI_BACKEND_URL=https://api.pulumi.com
# Self-hosted Pulumi Cloud
export PULUMI_BACKEND_URL=https://pulumi.mycompany.com
# S3 backend
export PULUMI_BACKEND_URL=s3://my-bucket
# Azure Blob backend
export PULUMI_BACKEND_URL=azblob://my-container
# GCS backend
export PULUMI_BACKEND_URL=gs://my-bucket
# Local filesystem
export PULUMI_BACKEND_URL=file://~/.pulumi-stateDefault stack for all commands.
export PULUMI_STACK=dev
# Now these are equivalent:
pulumi up --stack dev
pulumi upPassphrase for encrypting stack secrets (when using passphrase secrets provider).
export PULUMI_CONFIG_PASSPHRASE=my-secret-passphraseImportant:
Read passphrase from file instead of environment variable.
export PULUMI_CONFIG_PASSPHRASE_FILE=/path/to/passphrase-fileIndicate running in CI environment.
export PULUMI_CI=trueEffects:
pulumi loginDisable update checks.
export PULUMI_SKIP_UPDATE_CHECK=trueUse in CI/CD to:
Skip all confirmation prompts (equivalent to --yes).
export PULUMI_SKIP_CONFIRMATIONS=trueWarning: Use carefully - skips safety confirmations.
Control parallelism for resource operations.
# Limit to 10 concurrent operations
export PULUMI_PARALLEL=10
# Unlimited (default)
export PULUMI_PARALLEL=0
# Sequential (for debugging)
export PULUMI_PARALLEL=1When to adjust:
Enable experimental features.
export PULUMI_EXPERIMENTAL=trueEnable debug output for CLI commands.
export PULUMI_DEBUG_COMMANDS=trueDebug gRPC communication with providers.
export PULUMI_DEBUG_GRPC=/path/to/grpc-logControl logging verbosity.
# Error only
export PULUMI_LOG_LEVEL=error
# Warnings and errors
export PULUMI_LOG_LEVEL=warning
# Info level (default)
export PULUMI_LOG_LEVEL=info
# Debug level
export PULUMI_LOG_LEVEL=debugComma-separated list of providers to debug.
export PULUMI_DEBUG_PROVIDERS=aws,kubernetesEnable legacy diff behavior for troubleshooting.
export PULUMI_ENABLE_LEGACY_DIFF=trueSkip automatic provider plugin installation.
export PULUMI_SKIP_PROVIDER_INSTALL=trueAdditional paths to search for plugins.
export PULUMI_PLUGIN_PATH=/custom/plugin/pathPrefer Yarn over npm for Node.js plugins.
export PULUMI_PREFER_YARN=true# Standard AWS credentials
export AWS_ACCESS_KEY_ID=AKIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=... # For temporary credentials
export AWS_REGION=us-west-2
export AWS_DEFAULT_REGION=us-west-2
# AWS profile
export AWS_PROFILE=my-profile# Service principal authentication
export ARM_CLIENT_ID=...
export ARM_CLIENT_SECRET=...
export ARM_TENANT_ID=...
export ARM_SUBSCRIPTION_ID=...
# Managed identity
export ARM_USE_MSI=true
export ARM_MSI_ENDPOINT=...# Service account key file
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
# Project and region
export GOOGLE_PROJECT=my-project
export GOOGLE_REGION=us-central1
export GOOGLE_ZONE=us-central1-a# Kubeconfig location
export KUBECONFIG=/path/to/kubeconfig
# In-cluster configuration
export KUBERNETES_SERVICE_HOST=...
export KUBERNETES_SERVICE_PORT=...name: Pulumi
on: push
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pulumi/actions@v5
with:
command: up
stack-name: prod
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-west-2deploy:
image: pulumi/pulumi:latest
variables:
PULUMI_ACCESS_TOKEN: $PULUMI_ACCESS_TOKEN
PULUMI_STACK: prod
PULUMI_CI: "true"
PULUMI_SKIP_UPDATE_CHECK: "true"
script:
- pulumi login
- pulumi stack select $PULUMI_STACK
- pulumi up --yespipeline {
agent any
environment {
PULUMI_ACCESS_TOKEN = credentials('pulumi-token')
AWS_ACCESS_KEY_ID = credentials('aws-access-key')
AWS_SECRET_ACCESS_KEY = credentials('aws-secret-key')
PULUMI_CI = 'true'
PULUMI_SKIP_UPDATE_CHECK = 'true'
}
stages {
stage('Deploy') {
steps {
sh 'pulumi login'
sh 'pulumi stack select prod'
sh 'pulumi up --yes'
}
}
}
}version: 2.1
orbs:
pulumi: pulumi/pulumi@2.1.0
jobs:
deploy:
docker:
- image: pulumi/pulumi:latest
environment:
PULUMI_CI: "true"
PULUMI_SKIP_UPDATE_CHECK: "true"
steps:
- checkout
- run:
name: Deploy
command: |
pulumi login
pulumi stack select prod
pulumi up --yestrigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
- name: PULUMI_CI
value: 'true'
- name: PULUMI_SKIP_UPDATE_CHECK
value: 'true'
steps:
- task: Pulumi@1
inputs:
command: 'up'
stack: 'prod'
args: '--yes'
env:
PULUMI_ACCESS_TOKEN: $(PULUMI_ACCESS_TOKEN)When using Pulumi Automation API, environment variables work the same way. You can also pass them programmatically:
import * as automation from "@pulumi/pulumi/automation";
const stack = await automation.LocalWorkspace.createOrSelectStack({
stackName: "dev",
projectName: "my-project",
program: async () => { /* ... */ },
}, {
envVars: {
AWS_REGION: "us-west-2",
PULUMI_CONFIG_PASSPHRASE: process.env.PASSPHRASE,
},
});Recommended environment variables for CI/CD automation:
# Authentication
export PULUMI_ACCESS_TOKEN=pul-xxx
# Automation behavior
export PULUMI_CI=true
export PULUMI_SKIP_UPDATE_CHECK=true
# Optional: secrets passphrase (if not using cloud KMS)
export PULUMI_CONFIG_PASSPHRASE=xxx
# Optional: performance tuning
export PULUMI_PARALLEL=10
# Cloud provider credentials (choose one)
# AWS
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
export AWS_REGION=us-west-2
# OR use OIDC via Pulumi ESC (recommended)
# ESC environments inject credentials automatically| Variable | Description | Default |
|---|---|---|
PULUMI_ACCESS_TOKEN | Pulumi Cloud authentication token | None |
PULUMI_BACKEND_URL | Backend URL | https://api.pulumi.com |
PULUMI_STACK | Default stack name | None |
PULUMI_CONFIG_PASSPHRASE | Secrets encryption passphrase | None |
PULUMI_CI | CI mode indicator | false |
PULUMI_SKIP_UPDATE_CHECK | Disable update checks | false |
PULUMI_SKIP_CONFIRMATIONS | Skip all prompts | false |
PULUMI_PARALLEL | Operation parallelism | Unlimited |
PULUMI_DEBUG_COMMANDS | Debug CLI commands | false |
PULUMI_LOG_LEVEL | Logging verbosity | info |