<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Pulumi Blog: Announcements</title><link>https://www.pulumi.com/blog/tag/announcements/</link><description>Pulumi blog posts: Announcements.</description><language>en-us</language><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><item><title>New: Versioned CLI and SDK Docs</title><link>https://www.pulumi.com/blog/previous-cli-and-sdk-version-docs/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/previous-cli-and-sdk-version-docs/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/previous-cli-and-sdk-version-docs/index.png" /&gt;
&lt;p&gt;Pinned to an older Pulumi CLI or SDK version and finding that the docs describe a newer release? The &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/"&gt;Pulumi CLI command reference&lt;/a&gt; and the SDK API docs now include a version selector, so the documentation you&amp;rsquo;re reading matches the version you&amp;rsquo;re actually running.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;When you open the &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/"&gt;CLI command reference&lt;/a&gt;, you&amp;rsquo;ll see a version dropdown near the top of the page, below the title. The SDK API docs carry the same dropdown in the upper-right corner. Choose a release, and the page loads the documentation generated for that exact version.&lt;/p&gt;
&lt;p&gt;&lt;img src="cli-version-selector.png" alt="Version selector near the top of the Pulumi CLI command reference"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="sdk-version-selector.png" alt="Version selector in the upper-right corner of the Pulumi Node.js SDK API docs"&gt;&lt;/p&gt;
&lt;h2 id="whats-available"&gt;What&amp;rsquo;s available&lt;/h2&gt;
&lt;p&gt;Alongside the latest release, we keep immutable snapshots of previous versions going back to v3.150.0 (early 2025). The CLI command reference and the Node.js, Python, .NET, and Java SDK API docs are all covered, so the docs you need are only a dropdown away. (The Go SDK is versioned on &lt;a href="https://pkg.go.dev/github.com/pulumi/pulumi/sdk/v3"&gt;pkg.go.dev&lt;/a&gt;, so its documentation lives there rather than in the Pulumi docs.)&lt;/p&gt;
&lt;h2 id="get-started"&gt;Get started&lt;/h2&gt;
&lt;p&gt;Head to the &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/"&gt;CLI command reference&lt;/a&gt; or the &lt;a href="https://www.pulumi.com/docs/reference/"&gt;SDK API docs&lt;/a&gt; and try the version dropdown. Selections are sticky, so when you navigate into a version, you&amp;rsquo;ll be able to click around within that same version without having to choose it again.&lt;/p&gt;
&lt;p&gt;Have feedback? Let us know in the &lt;a href="https://slack.pulumi.com"&gt;Pulumi Community Slack&lt;/a&gt; or by opening an issue on &lt;a href="https://github.com/pulumi/docs"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;a
href="https://www.pulumi.com/docs/iac/cli/commands/"
class="btn btn-primary"
&gt;
Browse the CLI command reference
&lt;/a&gt;</description><author>Cam Soper</author><category>pulumi-cli</category><category>features</category><category>announcements</category></item><item><title>Trigger Deployments on Git Tags</title><link>https://www.pulumi.com/blog/trigger-deployments-on-git-tags/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/trigger-deployments-on-git-tags/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/trigger-deployments-on-git-tags/index.png" /&gt;
&lt;p&gt;A git tag is how many teams mark a release as ready. Pulumi Deployments can now act on that signal directly: configure a tag-based trigger, push a version tag like &lt;code&gt;v1.2.0&lt;/code&gt;, and Pulumi automatically runs &lt;code&gt;pulumi up&lt;/code&gt; for your stack. No extra pipeline glue, no manual click — your release tag &lt;em&gt;is&lt;/em&gt; the deployment.&lt;/p&gt;
&lt;h2 id="why-tags"&gt;Why tags?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/deployments/deployments/using/triggers/#push-to-deploy"&gt;Push to Deploy&lt;/a&gt; has long let you preview changes on a pull request and update a stack when commits merge to a branch. That branch-based model is a great fit for continuous delivery to shared development and QA environments, where every merge should flow straight through.&lt;/p&gt;
&lt;p&gt;But promotion to production is often deliberate, not continuous. You merge throughout the day, then decide — separately — that a particular commit is the release. The conventional way to record that decision is a git tag: &lt;code&gt;v1.2.0&lt;/code&gt;, &lt;code&gt;2026.06.0&lt;/code&gt;, &lt;code&gt;release-2026-06-04&lt;/code&gt;. Tagging is already part of most teams&amp;rsquo; release rituals.&lt;/p&gt;
&lt;p&gt;Tag-based triggers connect that ritual to your infrastructure. Instead of wiring up a separate CI job to call the &lt;a href="https://www.pulumi.com/docs/deployments/deployments/using/triggers/#rest-api"&gt;Pulumi Deployments REST API&lt;/a&gt; on a tag event, you configure the trigger once in your stack&amp;rsquo;s deployment settings and let Pulumi handle the rest.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;Tag triggers are controlled by two settings on your stack&amp;rsquo;s &lt;a href="https://www.pulumi.com/docs/deployments/deployments/using/settings/"&gt;deployment configuration&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Run updates for pushed tags&lt;/strong&gt; — a toggle that enables running &lt;code&gt;pulumi up&lt;/code&gt; when a matching tag is pushed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tag filters&lt;/strong&gt; — a list of glob patterns that decide which tag names qualify.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tag filters use the same model as the &lt;a href="https://www.pulumi.com/docs/deployments/deployments/using/settings/#path-filtering"&gt;path filters&lt;/a&gt; you may already know, except the patterns match against the tag name rather than changed file paths. A few examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;v*&lt;/code&gt; — deploy on any tag beginning with &lt;code&gt;v&lt;/code&gt;, such as &lt;code&gt;v1.0.0&lt;/code&gt; and &lt;code&gt;v2.3.1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v*&lt;/code&gt; plus &lt;code&gt;!*-rc*&lt;/code&gt; — deploy on release tags but skip release candidates like &lt;code&gt;v1.2.0-rc1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2026.*&lt;/code&gt; — deploy on calendar-versioned releases such as &lt;code&gt;2026.06.0&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Filters prefixed with &lt;code&gt;!&lt;/code&gt; are exclusions, and an exclusion always wins over an include. With no filters configured and the toggle on, every tag push deploys. Deleting a tag never triggers a deployment.&lt;/p&gt;
&lt;p&gt;When a tag push kicks off a deployment, Pulumi sets the &lt;code&gt;PULUMI_CI_TAG_NAME&lt;/code&gt; environment variable to the tag name. Your pre-run commands or your Pulumi program can read it — for example, to stamp the release version onto a resource tag or an application config value.&lt;/p&gt;
&lt;h2 id="works-across-every-vcs-integration"&gt;Works across every VCS integration&lt;/h2&gt;
&lt;p&gt;Tag triggers are available across all five version control integrations: &lt;a href="https://www.pulumi.com/docs/integrations/version-control/github-app/"&gt;GitHub&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/integrations/version-control/gitlab/"&gt;GitLab&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/integrations/version-control/bitbucket/"&gt;Bitbucket&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/integrations/version-control/azure-devops-integration/"&gt;Azure DevOps&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/integrations/version-control/custom-vcs/"&gt;Custom VCS&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="get-started"&gt;Get started&lt;/h2&gt;
&lt;p&gt;You can configure tag triggers wherever you manage deployment settings today — the &lt;a href="https://app.pulumi.com/signin"&gt;Pulumi Cloud console&lt;/a&gt;, the &lt;a href="https://www.pulumi.com/docs/reference/cloud-rest-api/deployments/#patch-settings"&gt;REST API&lt;/a&gt;, or as code with the &lt;a href="https://www.pulumi.com/registry/packages/pulumiservice/api-docs/deploymentsettings/"&gt;&lt;code&gt;pulumiservice.DeploymentSettings&lt;/code&gt;&lt;/a&gt; resource.&lt;/p&gt;
&lt;p&gt;To try it out:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a stack&amp;rsquo;s &lt;strong&gt;Settings &amp;gt; Deploy&lt;/strong&gt; tab in the Pulumi Cloud console.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Run updates for pushed tags&lt;/strong&gt; and add a tag filter such as &lt;code&gt;v*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Push a tag — &lt;code&gt;git tag v1.0.0 &amp;amp;&amp;amp; git push origin v1.0.0&lt;/code&gt; — and watch the deployment run.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For the full details, see the &lt;a href="https://www.pulumi.com/docs/deployments/deployments/using/triggers/#deploying-on-git-tags"&gt;deployment triggers&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/deployments/deployments/using/settings/#tag-filtering"&gt;tag filtering&lt;/a&gt; documentation. We&amp;rsquo;d love to hear how you put tag-based deployments to work.&lt;/p&gt;</description><author>Michael Fallihee</author><category>features</category><category>pulumi-cloud</category><category>announcements</category></item><item><title>Best AI Infrastructure Tools in 2026</title><link>https://www.pulumi.com/blog/ai-infrastructure-tools/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/ai-infrastructure-tools/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/ai-infrastructure-tools/index.png" /&gt;
&lt;p&gt;&amp;ldquo;AI infrastructure tools&amp;rdquo; covers two distinct markets: infrastructure &lt;em&gt;for&lt;/em&gt; AI (GPU clouds like CoreWeave, MLOps platforms like Weights &amp;amp; Biases) and AI &lt;em&gt;for&lt;/em&gt; infrastructure (agentic platforms like Pulumi Neo that generate, deploy, and govern cloud resources for you). Most teams need tools from both categories, and picking the wrong one wastes budget and adoption goodwill.&lt;/p&gt;
&lt;p&gt;The pressure to get this right is real. &lt;a href="https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/the-economic-potential-of-generative-ai-the-next-productivity-frontier"&gt;McKinsey research&lt;/a&gt; puts the productivity lift from generative AI in software development at 20–45%, which is great for application teams and a problem for platform teams trying to keep up with the resulting feature flow. Infrastructure investment is climbing on both fronts: more spend on the compute that trains and serves models, more spend on AI tools that manage everything else.&lt;/p&gt;
&lt;p&gt;This guide covers both categories: the compute and MLOps stack in Part 1, and AI-powered infrastructure management in Part 2, where the more interesting product shift is happening.&lt;/p&gt;
&lt;h2 id="ai-infrastructure-tools-overview"&gt;AI infrastructure tools overview&lt;/h2&gt;
&lt;h3 id="tools-for-building-ai-infrastructure"&gt;Tools for building AI infrastructure&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#coreweave"&gt;CoreWeave&lt;/a&gt;: GPU cloud built for AI workloads&lt;/li&gt;
&lt;li&gt;&lt;a href="#lambda-labs"&gt;Lambda Labs&lt;/a&gt;: straightforward GPU cloud for research and startups&lt;/li&gt;
&lt;li&gt;&lt;a href="#modal"&gt;Modal&lt;/a&gt;: serverless GPU compute&lt;/li&gt;
&lt;li&gt;&lt;a href="#weights--biases"&gt;Weights &amp;amp; Biases&lt;/a&gt;: ML experiment tracking and model management&lt;/li&gt;
&lt;li&gt;&lt;a href="#mlflow"&gt;MLflow&lt;/a&gt;: open-source ML lifecycle platform&lt;/li&gt;
&lt;li&gt;&lt;a href="#hyperscaler-ai-platforms"&gt;Hyperscaler AI platforms&lt;/a&gt;: AWS SageMaker, Google Vertex AI, Azure ML&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="ai-powered-infrastructure-management-tools"&gt;AI-powered infrastructure management tools&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#pulumi-neo"&gt;Pulumi Neo&lt;/a&gt;: agentic AI with policy automation&lt;/li&gt;
&lt;li&gt;&lt;a href="#firefly-aiac"&gt;Firefly AIaC&lt;/a&gt;: asset codification and IaC generation&lt;/li&gt;
&lt;li&gt;&lt;a href="#env0-cloud-compass"&gt;env0 Cloud Compass&lt;/a&gt;: multi-IaC insights and analysis&lt;/li&gt;
&lt;li&gt;&lt;a href="#spacelift-ai"&gt;Spacelift AI&lt;/a&gt;: run explanation and troubleshooting&lt;/li&gt;
&lt;li&gt;&lt;a href="#crossplane-with-upbound"&gt;Crossplane with Upbound&lt;/a&gt;: Kubernetes-native infrastructure&lt;/li&gt;
&lt;li&gt;&lt;a href="#general-purpose-code-assistants"&gt;General-purpose code assistants&lt;/a&gt;: Copilot, Claude Code, Cursor, Gemini&lt;/li&gt;
&lt;li&gt;&lt;a href="#aws-application-composer"&gt;AWS Application Composer&lt;/a&gt;: visual serverless builder&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="quick-picks"&gt;Quick picks&lt;/h2&gt;
&lt;p&gt;If you only have two minutes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise compliance&lt;/strong&gt;: &lt;a href="#pulumi-neo"&gt;Pulumi Neo&lt;/a&gt;. Executes changes (not only suggestions), ships with policy packs for CIS, HITRUST, NIST, and PCI DSS, and works with Terraform, CloudFormation, and resources created by hand.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serious GPU compute&lt;/strong&gt;: &lt;a href="#coreweave"&gt;CoreWeave&lt;/a&gt;. Purpose-built for AI workloads, deep NVIDIA partnership, and prices that generally undercut the hyperscalers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best developer experience for ML&lt;/strong&gt;: &lt;a href="#modal"&gt;Modal&lt;/a&gt;. Decorate a Python function, get a GPU, pay by the second.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open-source MLOps&lt;/strong&gt;: &lt;a href="#mlflow"&gt;MLflow&lt;/a&gt;. No vendor lock-in, runs anywhere, plays well with everything.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-is-ai-infrastructure"&gt;What is AI infrastructure?&lt;/h2&gt;
&lt;p&gt;The term covers two distinct categories that share almost no vendors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Infrastructure for AI&lt;/strong&gt; is the compute, storage, and orchestration that AI workloads run on. Training a large model is not a normal cloud workload: it wants thousands of GPUs talking to each other over fat, low-latency networks for weeks at a time. Inference is different again: lower latency, smarter batching, different hardware. General-purpose cloud was not designed for either case, which is why specialized GPU clouds and MLOps platforms exist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI-powered infrastructure management&lt;/strong&gt; is the inverse: AI tools that manage cloud infrastructure. They generate &lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;infrastructure as code&lt;/a&gt;, run deployments, detect drift, and remediate policy violations. The pitch is that modern infrastructure (multi-cloud, containers, microservices, regulated workloads) has gotten too complex for humans to manage by hand and too varied for scripted automation to keep up with.&lt;/p&gt;
&lt;p&gt;Most organizations end up needing both: somewhere to run their ML workloads, and something to keep the rest of the cloud sane.&lt;/p&gt;
&lt;h2 id="part-1-tools-for-building-ai-infrastructure"&gt;Part 1: Tools for building AI infrastructure&lt;/h2&gt;
&lt;p&gt;These are the platforms you run AI and ML workloads on: GPU clouds for raw compute, MLOps platforms for the lifecycle around them.&lt;/p&gt;
&lt;h3 id="coreweave"&gt;CoreWeave&lt;/h3&gt;
&lt;p&gt;CoreWeave is the GPU cloud that broke out of the AI hype cycle into a real public company. They went public in 2025, signed a multi-billion-dollar capacity deal with OpenAI, and acquired Weights &amp;amp; Biases. Their thesis from day one was that AI workloads deserve infrastructure designed for AI workloads, not a GPU SKU bolted onto a general-purpose cloud.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Large-scale training and high-throughput inference; teams that need dedicated GPU capacity with first access to new NVIDIA hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strengths&lt;/strong&gt;: GPU infrastructure designed for AI; Kubernetes-native; direct NVIDIA partnership; handles distributed training at scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out for&lt;/strong&gt;: Smaller global footprint than AWS/GCP/Azure; not a general-purpose cloud, so if you need RDS, S3, and a managed Kafka in the same provider, this isn&amp;rsquo;t it&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="lambda-labs"&gt;Lambda Labs&lt;/h3&gt;
&lt;p&gt;Lambda has been the approachable GPU cloud for a long time. Environments come pre-configured with PyTorch and TensorFlow, and you can be running on an H100 in about as long as it takes to copy your SSH key.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Research teams, startups, and individual practitioners who want GPUs without a configuration tax&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strengths&lt;/strong&gt;: Straightforward to start on; pre-configured deep learning environments; competitive on-demand pricing; strong learning resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out for&lt;/strong&gt;: Smaller scale than CoreWeave or the hyperscalers; availability gets tight during demand spikes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="modal"&gt;Modal&lt;/h3&gt;
&lt;p&gt;Modal&amp;rsquo;s pitch is that you write a Python function, decorate it, and Modal handles the GPU. No capacity planning, no idle instances burning money overnight, no Dockerfile to maintain.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Variable ML workloads where reserved capacity would sit idle; data scientists who&amp;rsquo;d rather not learn Kubernetes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strengths&lt;/strong&gt;: Strong developer experience; serverless GPUs with automatic scaling; pay-per-second pricing; cold starts are fast for what they are&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out for&lt;/strong&gt;: You give up infrastructure control. Not ideal for long training jobs that need reserved hardware or strict configuration requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="weights--biases"&gt;Weights &amp;amp; Biases&lt;/h3&gt;
&lt;p&gt;Weights &amp;amp; Biases is the de facto standard for ML experiment tracking and model management, integrated with essentially every framework and cloud you&amp;rsquo;d plausibly use. CoreWeave acquired the company in 2025, which has accelerated the joint roadmap but raised some neutrality questions for teams that prefer their tooling cloud-agnostic.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary with a free tier&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: ML teams that need shared experiment tracking, model versioning, and reporting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strengths&lt;/strong&gt;: Industry-leading experiment tracking and visualization; comprehensive model registry; strong team collaboration; broad integration surface&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out for&lt;/strong&gt;: Costs scale quickly past the free tier; some teams self-host alternatives for data residency reasons&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mlflow"&gt;MLflow&lt;/h3&gt;
&lt;p&gt;MLflow is the leading open-source MLOps platform: experiment tracking, packaging, registry, and serving, with no lock-in. Originally built at Databricks, it&amp;rsquo;s now a broad open-source ecosystem with managed offerings from multiple vendors (including Databricks and the major clouds).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Apache 2.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Teams that want MLOps without a vendor; or want the option to start managed and self-host later&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strengths&lt;/strong&gt;: Open source; covers the full ML lifecycle; runs locally, on-prem, or managed; broad framework support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out for&lt;/strong&gt;: Self-hosting carries the usual operational tax; commercial alternatives have stronger collaboration UX out of the box&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hyperscaler-ai-platforms"&gt;Hyperscaler AI platforms&lt;/h3&gt;
&lt;p&gt;The major clouds all sell end-to-end ML platforms. Each leads on the dimensions that line up with its parent cloud (Vertex for Google&amp;rsquo;s models and TPUs, SageMaker for AWS-native data pipelines, Azure ML for Microsoft-stack integration), but the wider integration with the rest of the cloud is the deciding factor.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AWS SageMaker&lt;/strong&gt;: end-to-end ML on AWS, deeply integrated with S3 and Glue, with first-class connections to Lambda for serverless inference and to the rest of the AWS data stack. The default pick if your data already lives in AWS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Vertex AI&lt;/strong&gt;: Google&amp;rsquo;s ML stack, including TPUs for workloads that need them, plus access to Google&amp;rsquo;s foundation models. Strongest when paired with BigQuery.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Machine Learning&lt;/strong&gt;: the natural choice when the rest of your stack is Microsoft; first-party MLOps integrations across GitHub Actions, Azure DevOps, and Microsoft Fabric for downstream reporting. The right choice if you&amp;rsquo;re already an Azure shop with Microsoft compliance requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shared tradeoff: hyperscaler GPU compute typically runs 2–3x the per-hour price of specialized providers, and the platforms work best when you commit to them top to bottom. For organizations already inside one cloud, the unified billing and single support contract usually justifies the premium. For a new ML team starting from scratch, it rarely does.&lt;/p&gt;
&lt;h2 id="part-2-ai-powered-infrastructure-management-tools"&gt;Part 2: AI-powered infrastructure management tools&lt;/h2&gt;
&lt;p&gt;This is where the more interesting product shift is happening. Instead of running AI on infrastructure, these tools point AI at your infrastructure and let it do work. They&amp;rsquo;re a newer, AI-native layer on top of the broader &lt;a href="https://www.pulumi.com/blog/infrastructure-as-code-tools/"&gt;infrastructure as code tooling landscape&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="from-code-generation-to-agentic-execution"&gt;From code generation to agentic execution&lt;/h3&gt;
&lt;p&gt;Before the tool list, one distinction matters more than any feature comparison: whether the tool generates code or executes changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code generation tools&lt;/strong&gt; like GitHub Copilot suggest infrastructure code based on context. You review it, maybe edit it, run it yourself. The AI helps, but you&amp;rsquo;re still the one doing the work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agentic platforms&lt;/strong&gt; generate the code and run it, with the guardrails you define. They understand your environment, handle multi-step workflows, and enforce policies on the way through. You describe the outcome; the platform makes it happen.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Code generation&lt;/th&gt;
&lt;th&gt;Agentic execution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generates infrastructure code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understands infrastructure context&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Deep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Executes changes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handles multi-step workflows&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enforces policies automatically&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remediates drift and violations&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Where you want to land on this spectrum is mostly a governance question, not a productivity one.&lt;/p&gt;
&lt;h3 id="pulumi-neo"&gt;Pulumi Neo&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/neo/"&gt;Pulumi Neo&lt;/a&gt; is Pulumi&amp;rsquo;s agentic AI for infrastructure. The distinguishing claim is execution: Neo doesn&amp;rsquo;t only suggest a Terraform snippet, it figures out the right resources, generates the code, and runs the deployment inside whatever guardrails you&amp;rsquo;ve set.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary (Pulumi Cloud)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Platform engineering teams that want AI automation with real policy controls, especially in regulated industries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A few things that set it apart in practice:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Policy automation and compliance.&lt;/strong&gt; Neo is integrated with &lt;a href="https://www.pulumi.com/product/insights-governance/"&gt;Pulumi Insights and Governance&lt;/a&gt;, which ships pre-built policy packs for CIS benchmarks, HITRUST CSF, NIST SP 800-53, and PCI DSS. Detection and remediation run in the same loop: Neo finds a violation, generates a fix, and (subject to approvals) applies it. You can batch-remediate across stacks and accounts with prompts like &amp;ldquo;find and fix all unencrypted S3 buckets across our AWS accounts.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Works with infrastructure you didn&amp;rsquo;t create with Pulumi.&lt;/strong&gt; Neo&amp;rsquo;s governance applies to Pulumi-managed resources, Terraform state, CloudFormation stacks, and resources someone clicked together in the AWS console. That matters because the realistic adoption path is to point Neo at what you have, audit it, and gradually bring it under management, not to migrate everything first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Progressive autonomy.&lt;/strong&gt; Trust levels are configurable. Start with human approval for everything; loosen it for well-defined, low-risk operations as confidence builds; keep production and sensitive resources behind strict approvals. This is the part that tends to determine whether enterprises actually deploy agentic AI in anger, versus letting it sit as a sandbox toy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IDE and CI/CD integration.&lt;/strong&gt; The Pulumi MCP Server brings Neo into Cursor, Claude Code, Claude Desktop, Windsurf, and any other MCP-compatible client. The Pulumi Cloud UI is the home base for approvals, history, and remediation status. Neo also slots into CI/CD pipelines for pre-merge policy remediation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Case studies&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Werner Enterprises&lt;/strong&gt; reduced infrastructure provisioning time from 3 days to 4 hours using Pulumi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spear AI&lt;/strong&gt; cut their Authority to Operate (ATO) timeline from an expected 1.5 years to roughly 3 months by using policy-as-code to evidence compliance controls for auditors.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tradeoff to be honest about&lt;/strong&gt;: Neo gets more valuable the deeper you are in the Pulumi ecosystem. If you&amp;rsquo;re running IaC, ESC, and policy packs already, Neo has a lot of context to draw on. If you&amp;rsquo;re kicking the tires, it&amp;rsquo;s still useful, but the differentiating capability (context-aware, policy-respecting agentic execution) is harder to feel.&lt;/p&gt;
&lt;h3 id="firefly-aiac"&gt;Firefly AIaC&lt;/h3&gt;
&lt;p&gt;Firefly is an asset management platform with AI features bolted on top of a strong core. The core capability is asset codification: it discovers cloud resources you already have and generates the IaC for them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Teams that need to codify existing cloud footprints or generate IaC from natural language&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Strengths: solid asset discovery, multi-cloud coverage, natural-language IaC generation, drift detection with remediation hooks. Caveat: AI features here are supplementary to the asset management product, not the main event, and Firefly is less focused on agentic execution than on inventory and policy.&lt;/p&gt;
&lt;h3 id="env0-cloud-compass"&gt;env0 Cloud Compass&lt;/h3&gt;
&lt;p&gt;env0&amp;rsquo;s Cloud Compass adds AI to env0&amp;rsquo;s IaC automation platform, focusing on analysis rather than autonomous execution.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Multi-IaC shops that want AI-generated PR summaries, drift explanations, and cost insights&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Strengths: multi-tool support across Terraform, OpenTofu, Pulumi, and Terragrunt; AI-generated PR summaries; drift cause analysis; cost estimation. Caveat: this is analysis and explanation, not action: Cloud Compass complements an agentic tool rather than replacing one.&lt;/p&gt;
&lt;h3 id="spacelift-ai"&gt;Spacelift AI&lt;/h3&gt;
&lt;p&gt;Spacelift&amp;rsquo;s AI work is focused on the post-run experience: explaining what happened in a deployment and helping troubleshoot failures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: GitOps shops that want AI assistance reading complex runs and diagnosing failed deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Strengths: AI-powered run explanation; troubleshooting guidance for failures; broad IaC tool support; mature CI/CD integration. Caveat: like Spacelift as a whole, this is observation and explanation, not generation or execution. Pair with something that writes the code.&lt;/p&gt;
&lt;h3 id="crossplane-with-upbound"&gt;Crossplane with Upbound&lt;/h3&gt;
&lt;p&gt;Crossplane brings Kubernetes-style declarative management to cloud resources. Upbound is the company that commercializes it, and is layering AI-native control-plane capabilities into the 2.0 generation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Apache 2.0 (Crossplane); proprietary (Upbound)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Teams already deep in Kubernetes that want to manage cloud resources the same way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Strengths: Kubernetes-native model; native GitOps fit; very active OSS community; AI control-plane work emerging from Upbound. Caveat: the learning curve is real if you&amp;rsquo;re not already living in Kubernetes; the commercial AI features are still maturing.&lt;/p&gt;
&lt;h3 id="general-purpose-code-assistants"&gt;General-purpose code assistants&lt;/h3&gt;
&lt;p&gt;General-purpose AI coding assistants are the tools your developers already have open: GitHub Copilot, Claude Code, Cursor, and Google&amp;rsquo;s Gemini and Antigravity. They write Terraform HCL, Pulumi programs, and CloudFormation templates competently, about as well as they write anything else.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary (subscription), varies by tool&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Developers who want broad code assistance, including infrastructure code, inside their existing editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Strengths: excellent line-by-line code completion; broad language support; first-class editor integration; trained on huge corpora. Caveat: no infrastructure context. They don&amp;rsquo;t know what&amp;rsquo;s in your account, what your policies are, or which subnet you should pick. Treat their IaC suggestions as first-pass scaffolding, not production output.&lt;/p&gt;
&lt;h3 id="aws-application-composer"&gt;AWS Application Composer&lt;/h3&gt;
&lt;p&gt;Application Composer is AWS&amp;rsquo;s visual builder for serverless applications. Drag services onto a canvas, get a CloudFormation template out, with AI suggestions for service configuration along the way.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;License&lt;/strong&gt;: Proprietary (AWS, included)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Teams building AWS serverless apps who prefer a visual workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Strengths: visual development for serverless; direct AWS integration; AI suggestions for service configuration; emits CloudFormation. Caveat: AWS-only, CloudFormation-only, and best suited to serverless rather than general infrastructure.&lt;/p&gt;
&lt;h2 id="comparison-tables"&gt;Comparison tables&lt;/h2&gt;
&lt;h3 id="infrastructure-for-ai"&gt;Infrastructure for AI&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Key strength&lt;/th&gt;
&lt;th&gt;Limitation&lt;/th&gt;
&lt;th&gt;Pricing&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CoreWeave&lt;/td&gt;
&lt;td&gt;GPU cloud&lt;/td&gt;
&lt;td&gt;Purpose-built GPU infra, NVIDIA partnership&lt;/td&gt;
&lt;td&gt;Not a general-purpose cloud&lt;/td&gt;
&lt;td&gt;Per-GPU-hour&lt;/td&gt;
&lt;td&gt;Large-scale AI training&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lambda Labs&lt;/td&gt;
&lt;td&gt;GPU cloud&lt;/td&gt;
&lt;td&gt;Approachable, pre-configured environments&lt;/td&gt;
&lt;td&gt;Smaller scale&lt;/td&gt;
&lt;td&gt;Per-GPU-hour&lt;/td&gt;
&lt;td&gt;Research teams, startups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modal&lt;/td&gt;
&lt;td&gt;Serverless GPU&lt;/td&gt;
&lt;td&gt;Developer experience, pay-per-second&lt;/td&gt;
&lt;td&gt;Less infrastructure control&lt;/td&gt;
&lt;td&gt;Pay-per-use&lt;/td&gt;
&lt;td&gt;Variable ML workloads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weights &amp;amp; Biases&lt;/td&gt;
&lt;td&gt;MLOps&lt;/td&gt;
&lt;td&gt;Industry-standard experiment tracking&lt;/td&gt;
&lt;td&gt;Costs scale quickly&lt;/td&gt;
&lt;td&gt;Free tier + paid&lt;/td&gt;
&lt;td&gt;ML team collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MLflow&lt;/td&gt;
&lt;td&gt;MLOps&lt;/td&gt;
&lt;td&gt;Open source, no lock-in&lt;/td&gt;
&lt;td&gt;Self-hosting overhead&lt;/td&gt;
&lt;td&gt;Free (self-hosted)&lt;/td&gt;
&lt;td&gt;Flexible ML lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS SageMaker&lt;/td&gt;
&lt;td&gt;Hyperscaler&lt;/td&gt;
&lt;td&gt;AWS ecosystem integration&lt;/td&gt;
&lt;td&gt;Higher cost, lock-in&lt;/td&gt;
&lt;td&gt;Per-use&lt;/td&gt;
&lt;td&gt;AWS-native orgs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Vertex AI&lt;/td&gt;
&lt;td&gt;Hyperscaler&lt;/td&gt;
&lt;td&gt;Google models, TPU access&lt;/td&gt;
&lt;td&gt;Lock-in&lt;/td&gt;
&lt;td&gt;Per-use&lt;/td&gt;
&lt;td&gt;Google Cloud users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Azure ML&lt;/td&gt;
&lt;td&gt;Hyperscaler&lt;/td&gt;
&lt;td&gt;Microsoft integration, enterprise features&lt;/td&gt;
&lt;td&gt;Lock-in&lt;/td&gt;
&lt;td&gt;Per-use&lt;/td&gt;
&lt;td&gt;Microsoft ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ai-powered-infrastructure-management"&gt;AI-powered infrastructure management&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Key strength&lt;/th&gt;
&lt;th&gt;Limitation&lt;/th&gt;
&lt;th&gt;Pricing&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pulumi Neo&lt;/td&gt;
&lt;td&gt;Agentic AI&lt;/td&gt;
&lt;td&gt;Execution + policy automation&lt;/td&gt;
&lt;td&gt;Best within Pulumi ecosystem&lt;/td&gt;
&lt;td&gt;Pulumi Cloud tiers&lt;/td&gt;
&lt;td&gt;Enterprise platform teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firefly AIaC&lt;/td&gt;
&lt;td&gt;Asset management&lt;/td&gt;
&lt;td&gt;Asset codification, IaC generation&lt;/td&gt;
&lt;td&gt;AI is supplementary&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Codifying existing infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;env0 Cloud Compass&lt;/td&gt;
&lt;td&gt;Multi-IaC platform&lt;/td&gt;
&lt;td&gt;Multi-tool support, PR analysis&lt;/td&gt;
&lt;td&gt;Analysis, not execution&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Multi-IaC environments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spacelift AI&lt;/td&gt;
&lt;td&gt;CI/CD platform&lt;/td&gt;
&lt;td&gt;Run explanation, troubleshooting&lt;/td&gt;
&lt;td&gt;Observation, not action&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;GitOps workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crossplane / Upbound&lt;/td&gt;
&lt;td&gt;Kubernetes-native&lt;/td&gt;
&lt;td&gt;K8s patterns for infra&lt;/td&gt;
&lt;td&gt;Requires K8s expertise&lt;/td&gt;
&lt;td&gt;Open source + commercial&lt;/td&gt;
&lt;td&gt;Kubernetes-native teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code assistants&lt;/td&gt;
&lt;td&gt;Code assistant&lt;/td&gt;
&lt;td&gt;Broad language support, IDE&lt;/td&gt;
&lt;td&gt;No infrastructure context&lt;/td&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;td&gt;General code assistance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Composer&lt;/td&gt;
&lt;td&gt;Visual builder&lt;/td&gt;
&lt;td&gt;Visual serverless development&lt;/td&gt;
&lt;td&gt;AWS- and CFN-only&lt;/td&gt;
&lt;td&gt;Included with AWS&lt;/td&gt;
&lt;td&gt;AWS serverless apps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="rounded-lg bg-violet-50 p-6 my-8"&gt;
&lt;p class="heading-4 m-0 mb-3 flex items-center gap-1.5"&gt;See agentic infrastructure in action&lt;/p&gt;
&lt;div class="body-base m-0 text-gray-950"&gt;Pulumi Neo generates, deploys, and governs cloud infrastructure across the resources you already have, with the policy guardrails you define.&lt;/div&gt;
&lt;a href="https://www.pulumi.com/product/neo/" data-track="blog-body-cta" class="btn btn-primary mt-4"&gt;
Explore Pulumi Neo
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--regular size-4" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-arrow-right-regular"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h2 id="how-to-choose"&gt;How to choose&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s no universal best tool. Five questions sort the field quickly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud strategy.&lt;/strong&gt; Multi-cloud means tools like Pulumi Neo, Firefly, env0, or Crossplane. Single-cloud commitment means hyperscaler-native tools may integrate more deeply (AWS Composer, SageMaker, and so on).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team expertise.&lt;/strong&gt; Programmers gravitate to tools that use real languages (Pulumi Neo, Pulumi IaC). Kubernetes teams find Crossplane natural; everyone else finds it steep. Teams that prefer visual workflows should look at AWS Composer or env0&amp;rsquo;s UI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance.&lt;/strong&gt; Regulated industries (healthcare, finance, government) get the most value from tools with pre-built compliance packs and audit trails. Pulumi Neo&amp;rsquo;s CIS/HITRUST/NIST/PCI packs are the most direct fit. If preventative policy enforcement matters, prefer tools that block non-compliant deployments rather than flag them after the fact.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Existing footprint.&lt;/strong&gt; Greenfield projects can use anything. Brownfield is where it gets interesting: Pulumi Neo works against Terraform, CloudFormation, and manually-created resources, which lets you adopt incrementally instead of migrating first. Mixed-IaC shops should also look at env0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Budget.&lt;/strong&gt; Open source first: MLflow for MLOps, Crossplane for Kubernetes-native infra. Open source is not free, though: self-hosting carries a real total cost of ownership in hosting, maintenance, and the expertise to operate it. Commercial tools (Pulumi Cloud, env0, Spacelift) fold that operational cost into the price, on top of support, SLAs, and the enterprise-tier features open source can lack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before adopting anything, get visibility into what you have today, pilot on staging where mistakes are cheap, and define success metrics up front: time to provision, policy violation rates, mean time to remediate. The best AI infrastructure tool is the one your team will actually use, which means meeting developers where they already work.&lt;/p&gt;
&lt;h2 id="key-trends-and-outlook"&gt;Key trends and outlook&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;From copilots to agents.&lt;/strong&gt; &amp;ldquo;AI suggests code&amp;rdquo; and &amp;ldquo;AI runs the deploy&amp;rdquo; are different products with different governance implications. The teams getting value from agentic tools have figured out which tasks to delegate fully, which to keep human-in-the-loop, and which to leave alone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Progressive autonomy.&lt;/strong&gt; Enterprise adoption follows a predictable shape: visibility → recommendations → human-approved execution → autonomous execution for well-understood scenarios. Tools that support that graduation will see stronger enterprise traction than tools that force an all-or-nothing choice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Policy as the control plane.&lt;/strong&gt; As AI takes on more infrastructure tasks, policy frameworks become the primary control plane. Done well, policy becomes an enabler (guardrails that let you safely expand automation) rather than a brake on velocity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MCP standardization.&lt;/strong&gt; The Model Context Protocol is becoming the integration standard between AI assistants and infrastructure tools. The practical upshot is that the IDE is increasingly a viable surface for managing infrastructure, with AI mediating between natural language and the underlying APIs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consolidation.&lt;/strong&gt; CoreWeave acquiring Weights &amp;amp; Biases and NVIDIA acquiring Run:ai both point toward integrated platforms across the AI infrastructure stack. For tool selection today, that&amp;rsquo;s an argument for picking vendors with clear strategic direction over point solutions likely to be acquired or out-competed.&lt;/p&gt;
&lt;h2 id="frequently-asked-questions"&gt;Frequently asked questions&lt;/h2&gt;
&lt;h3 id="what-is-the-best-ai-agent-for-cloud-infrastructure-management"&gt;What is the best AI agent for cloud infrastructure management?&lt;/h3&gt;
&lt;p&gt;For enterprise governance plus true agentic capability, &lt;a href="https://www.pulumi.com/product/neo/"&gt;Pulumi Neo&lt;/a&gt; is currently the most complete offering: it executes changes (not just suggests them), integrates with pre-built compliance frameworks, and works with infrastructure regardless of how it was provisioned. For Kubernetes-native shops, Crossplane with Upbound&amp;rsquo;s emerging AI features is worth tracking.&lt;/p&gt;
&lt;h3 id="how-can-i-use-generative-ai-to-manage-cloud-infrastructure"&gt;How can I use generative AI to manage cloud infrastructure?&lt;/h3&gt;
&lt;p&gt;Start by identifying the repetitive, time-consuming infrastructure work in your team. The highest-value early use cases tend to be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code generation&lt;/strong&gt;: write IaC from natural-language descriptions, then review.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: explain unfamiliar configurations and reduce onboarding time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt;: analyze logs, errors, and configs to suggest likely causes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security and compliance&lt;/strong&gt;: scan for violations and generate fixes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full automation&lt;/strong&gt;: for shops that want it, agentic platforms like Pulumi Neo execute provisioning workflows end-to-end with governance controls intact.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-is-agentic-ai-for-infrastructure"&gt;What is agentic AI for infrastructure?&lt;/h3&gt;
&lt;p&gt;Agentic AI for infrastructure means AI systems that autonomously execute infrastructure tasks, not just generate code suggestions. The difference from a code assistant is action: an agent understands your environment, respects your policies, and performs multi-step work (provisioning, configuration, security controls) within the boundaries you&amp;rsquo;ve defined.&lt;/p&gt;
&lt;h3 id="how-do-ai-agents-improve-devops-workflows"&gt;How do AI agents improve DevOps workflows?&lt;/h3&gt;
&lt;p&gt;By automating the repetitive parts (provisioning, drift remediation, policy enforcement), reducing context-switching, and catching issues earlier. Teams that have rolled out agentic tools well report faster provisioning, fewer policy violations slipping into production, and quicker compliance remediation. The compounding effect (engineers freed for higher-value work as the agent absorbs the routine) is the actual point.&lt;/p&gt;
&lt;h3 id="whats-the-difference-between-ai-code-generation-and-agentic-execution"&gt;What&amp;rsquo;s the difference between AI code generation and agentic execution?&lt;/h3&gt;
&lt;p&gt;Code generation suggests IaC for a human to review and run. Agentic execution generates the code and runs it, with policy and governance enforced along the way. It&amp;rsquo;s the difference between a knowledgeable colleague who suggests an approach and a knowledgeable colleague who also ships the change with appropriate oversight.&lt;/p&gt;
&lt;h3 id="can-ai-generate-terraform-or-pulumi-programs"&gt;Can AI generate Terraform or Pulumi programs?&lt;/h3&gt;
&lt;p&gt;Yes. Most general-purpose AI assistants (Copilot, Claude, Gemini, ChatGPT, Cursor) can produce Terraform HCL, Pulumi programs in TypeScript / Python / Go, and CloudFormation. Quality varies. Generic assistants lack environment context and will happily emit syntactically correct but operationally wrong code. Infrastructure-specific tools like Pulumi Neo generate code that&amp;rsquo;s aware of your existing resources, policies, and provider constraints.&lt;/p&gt;
&lt;h3 id="can-ai-help-with-infrastructure-compliance-and-policy-automation"&gt;Can AI help with infrastructure compliance and policy automation?&lt;/h3&gt;
&lt;p&gt;Yes, and this is one of the highest-leverage uses of AI in infrastructure. Tools like Pulumi Neo detect policy violations across your footprint (including resources created outside IaC), generate compliant remediation, and apply it with the approvals you require. Pre-built frameworks for CIS, HITRUST, NIST, and PCI DSS shorten what would otherwise be a long manual compliance project.&lt;/p&gt;
&lt;h3 id="are-ai-infrastructure-tools-secure-for-enterprise-use"&gt;Are AI infrastructure tools secure for enterprise use?&lt;/h3&gt;
&lt;p&gt;Enterprise-grade ones are. Look for RBAC, full audit logging of AI actions, preventative policy enforcement (not just detection), and human-in-the-loop approvals for sensitive operations. SOC 2, data residency options, and configurable autonomy levels are table stakes. The risk to avoid is wiring a consumer AI assistant directly into a production cloud account without those controls.&lt;/p&gt;
&lt;h3 id="how-do-i-choose-between-different-ai-infrastructure-tools"&gt;How do I choose between different AI infrastructure tools?&lt;/h3&gt;
&lt;p&gt;Match the tool to your context: existing clouds and IaC, team skills, compliance requirements, budget. Enterprise platform teams with governance needs should evaluate Pulumi Neo first. MLOps-focused teams should look at Weights &amp;amp; Biases or MLflow. For general code assistance inside the editor, a general-purpose assistant like Copilot, Cursor, or Gemini is the default. Most organizations end up with more than one: a code assistant for daily development and an agentic platform for production infrastructure.&lt;/p&gt;
&lt;h3 id="what-are-the-best-tools-for-machine-learning-infrastructure"&gt;What are the best tools for machine learning infrastructure?&lt;/h3&gt;
&lt;p&gt;For GPU compute, CoreWeave leads at scale, Modal wins for variable workloads and developer experience, and the hyperscalers are the default pick if you&amp;rsquo;re already inside one of them. For experiment tracking and model management, Weights &amp;amp; Biases is the leading commercial platform; MLflow is the leading open-source one. Most teams pick on the deploy model and pricing fit rather than capability gap. For the cloud infrastructure underneath the ML workloads, the same infrastructure management story applies: Pulumi Neo can provision and govern ML infrastructure the same way it handles everything else.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Two categories, two problems. GPU clouds and MLOps platforms (CoreWeave, Lambda, Modal, hyperscaler trio, W&amp;amp;B, MLflow) solve the compute and lifecycle problem for running AI workloads. AI-powered infrastructure tools (Neo, Firefly, env0, Spacelift, Crossplane, code assistants, Composer) solve the management problem for everything else.&lt;/p&gt;
&lt;p&gt;For GPU workloads, the choice mostly comes down to scale and where you already are. For infrastructure management, the real question is how much you actually want AI to do. Code assistants help you write IaC faster, but you&amp;rsquo;re still running it. Agentic platforms like Pulumi Neo execute changes and enforce policy on the way through, with the guardrails you control.&lt;/p&gt;
&lt;p&gt;The pattern from teams getting real value: treat AI as a force multiplier on routine work (provisioning, drift, compliance) and keep human judgment in the loop for the architecture and the edge cases.&lt;/p&gt;
&lt;p&gt;If you want to see agentic infrastructure management running against real resources, &lt;a href="https://www.pulumi.com/product/neo/"&gt;start with Pulumi Neo&lt;/a&gt;.&lt;/p&gt;</description><author>Alex Leventer</author><category>ai</category><category>infrastructure-as-code</category><category>platform-engineering</category><category>devops</category><category>announcements</category></item><item><title>The Agentic Infrastructure Era</title><link>https://www.pulumi.com/blog/the-agentic-infrastructure-era/</link><pubDate>Tue, 19 May 2026 03:00:00 -0700</pubDate><guid>https://www.pulumi.com/blog/the-agentic-infrastructure-era/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/the-agentic-infrastructure-era/index.png" /&gt;
&lt;p&gt;The first frontier agents excelled at was coding. The reason is evident: we have billions of lines of self-documenting code available on the internet for the LLMs to learn from. We can measure their performance on coding thanks to linters, type checkers, compilers, and test suites. The most advanced agentic systems to hit product/market fit have been coding-oriented, and it has resulted in an intense velocity increase in how much and how fast code we can write.&lt;/p&gt;
&lt;p&gt;But as the AI tsunami whips up reams of code, what happens to it becomes just as critical. As an industry, we&amp;rsquo;ve moved beyond just coding to engineering, which includes documentation, tests, automation, and, yes, managing the very infrastructure our applications need to run. The deeper into production you go, however, the less good agents naturally are at helping. At Pulumi, we live and breathe infrastructure, and have seen this firsthand. But we&amp;rsquo;ve also been hard at work building the platform this new era runs on. In this post, I&amp;rsquo;ll share our point of view, what we&amp;rsquo;ve built, what we&amp;rsquo;re launching today, and why all infrastructure is about to be agentic.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/neo/"&gt;See Pulumi Neo in action →&lt;/a&gt; Neo is the agent at the center of everything below: it previews changes, checks them against policy, and opens PRs for your review.&lt;/p&gt;
&lt;h2 id="llms-are-natural-coders"&gt;LLMs are natural coders&lt;/h2&gt;
&lt;p&gt;It is remarkable to look back and note that frontier models, less than two years ago, in August 2024, scored just 33% on SWE-bench Verified. Present-day models score 86%, which represents a 4x reduction in the errors models will make when coding. This enables models to solve increasingly difficult coding problems, and humans can lean more heavily on them to offload tasks. Anthropic&amp;rsquo;s new Mythos model scores 94% and, although it isn&amp;rsquo;t generally available at the time of this article, there&amp;rsquo;s no question we&amp;rsquo;ll close in on 95% by the end of 2026. That is another 2.3x reduction in error rates. This very naturally puts us onto the last mile of fully agentic coding.&lt;/p&gt;
&lt;p&gt;This has been the result of code being highly in-distribution combined with the relentless pursuit of solving coding problems from the frontier labs, especially with Anthropic&amp;rsquo;s Claude Code, but now with OpenAI&amp;rsquo;s Codex, driving a tight feedback loop that turns into an improvement flywheel.&lt;/p&gt;
&lt;p&gt;Given that LLMs are natural coders, most of us simply assumed that the breakout success we&amp;rsquo;ve seen with agents for coding would automatically translate into new problem domains. And for sure, we have seen some success. But perhaps not as much as we&amp;rsquo;d like. Not all problem domains are documented equally well so that the models can naturally learn about them.&lt;/p&gt;
&lt;p&gt;Andrej Karpathy noted nearly a year ago that, &amp;ldquo;Building a modern app is a bit like assembling IKEA furniture,&amp;rdquo; observing that, though writing the code was easy, fun, and fast, the next mile of actually getting the application running in production entailed many things the LLM wasn&amp;rsquo;t naturally good at, including &amp;ldquo;services, API keys, configurations, dev/prod deployments.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;At the same time, we&amp;rsquo;re seeing something magical happen here at Pulumi: LLMs are now doing over 20% of the infrastructure deployments, up from virtually zero a year ago. We expect this to grow to over 50% before the end of this year and well beyond afterwards.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/the-agentic-infrastructure-era/agentic-share-circular-light.png" alt="Over 20% of all Pulumi operations are now being handled by LLMs."&gt;&lt;/p&gt;
&lt;p&gt;The agentic infrastructure era is here. Today we&amp;rsquo;re announcing several new platform capabilities to accelerate it further.&lt;/p&gt;
&lt;p&gt;Before getting to what&amp;rsquo;s new, however, why are we seeing this happening in reality?&lt;/p&gt;
&lt;h2 id="turning-infrastructure-problems-into-coding-problems"&gt;Turning infrastructure problems into coding problems&lt;/h2&gt;
&lt;p&gt;We began our journey with our open-source infrastructure-as-code project nearly ten years ago. Having spent much of my career working on programming languages and compilers, I had a strong conviction that the right substrate for infrastructure was the languages developers already knew and loved, not yet another DSL and certainly not piles of YAML. So we focused first on great ergonomics for humans, and for us, that meant letting you use programming languages, tools, and ecosystems that humans already know and love. Languages like Python, TypeScript, Go, C#, Java, and more. Infrastructure as code also, importantly, comes with guardrails to make infrastructure deployments dependable, reviewable, and auditable. Over time we&amp;rsquo;ve built out an entire platform with security, compliance, and governance capabilities.&lt;/p&gt;
&lt;p&gt;One way of thinking about this is we modeled the realm of cloud infrastructure inside the realm of programming languages: cloud resources become objects, configurations are just variables, dependencies between resources are just references, standard blueprints become classes. Doing so turns the cloud into something that is suddenly programmable, and allows us to apply real software engineering patterns and practices to infrastructure.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the twist we&amp;rsquo;ve realized this past year. It is a happy accident that the combination of this plus the verifiability of every change is the exact combination that empowers agents to do infrastructure. LLMs are natural coders. By mapping infrastructure space in code space, agents can do what they&amp;rsquo;re great at – code – and the infrastructure as code engine is the link that maps those code edits back down into infrastructure space. And as the SWE-bench curve plays out, every domain expressed in code rides it. Infrastructure, thanks to the bet we made nine years ago, is now one of them.&lt;/p&gt;
&lt;p&gt;This isn&amp;rsquo;t just about volume of in-distribution code. Most production infrastructure code lives in private repositories. In contrast, public Python and TypeScript include vast amounts of genuinely production-grade open source, demonstrating real patterns at scale. Public infrastructure DSL corpora skew heavily toward tutorial-grade content that doesn&amp;rsquo;t scale. By modeling infrastructure in real languages, Pulumi inherits at-scale in-distribution directly. Patterns in Python or TypeScript generalize from what the model has practiced, while DSL patterns are idiosyncratic by definition and don&amp;rsquo;t compound the same way. Code can express everything an engineer can do, which is exactly why models trained on it have become prolific engineers.&lt;/p&gt;
&lt;p&gt;What does this look like in practice? For example, an agent can define reusable infrastructure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pulumi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pulumi_coreweave&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;coreweave&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pulumi_nvidia_aicr&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;aicr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TrainingCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pulumi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ComponentResource&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;A reusable training cluster resource.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;kubeconfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pulumi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;accelerator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;training:Cluster&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coreweave&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;KubernetesCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-k8s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;accelerator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;accelerator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# gb200/b200/h100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aicr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClusterStack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-aicr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;kubeconfig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kubeconfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;accelerator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;accelerator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;training&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;kubeflow&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then flexibly consume it – all using languages, like Python, it is already fluent in:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pulumi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;infra&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TrainingCluster&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;orchestration&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RLFleet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Spin up an RL stack with 1 learner and 8 rollout workers.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;learner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TrainingCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;learner&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;accelerator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;gb200&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rollouts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrainingCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rollout-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;accelerator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b200&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fleet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RLFleet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ppo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;learner&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;learner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;workers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rollouts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pulumi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;login&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fleet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;head_node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Beyond just being in-distribution, infrastructure as code also gives us a critical piece: the ability to diff changes at the infrastructure layer. Just as we wouldn&amp;rsquo;t vibe code without git showing us the source changes, we shouldn&amp;rsquo;t vibe infrastructure without a tool that shows what it will do before it does it, and what it has already done in the past. It&amp;rsquo;s like git diff for your infrastructure.&lt;/p&gt;
&lt;p&gt;The combination of languages, type systems, linting, testing, and infrastructure diffs gives agents enough of what they need to create a fully closed, verifiable, self-correcting loop. Verifiability is the thing that ultimately matters. Every action an agent takes can be previewed, policy-checked, reviewed, and audited. By humans, by other agents, by CI/CD automation. Guardrails guide the agent and verifiability proves the end result.&lt;/p&gt;
&lt;p&gt;When I say &amp;ldquo;infrastructure&amp;rdquo; by the way, I mean something quite broad. It includes public cloud hyperscalers, of course, like AWS, Azure, Google Cloud, and CoreWeave. It includes cloud native technologies like Kubernetes and Helm. It also includes private clouds powered by VMware and other data center technologies. It includes broad cloud platforms like Cloudflare. But, subtly, also any hosted managed infrastructure service, such as Snowflake, MongoDB, Databricks, and more. And increasingly, the observability, security, and operational tooling that wraps everything else, like Datadog, Sentry, PagerDuty, and other systems that give agents the context to reason about what&amp;rsquo;s actually happening in production. We support thousands of providers with a consistent programming model and agents are increasingly writing those too.&lt;/p&gt;
&lt;h2 id="what-were-shipping-today"&gt;What we&amp;rsquo;re shipping today&lt;/h2&gt;
&lt;p&gt;The foundation of expressing infrastructure as code, combined with verifiable changes, makes a 100% agentic infrastructure future even conceivable. But we still have work to realize this vision.&lt;/p&gt;
&lt;h3 id="meeting-agents-where-they-work-the-cli"&gt;Meeting agents where they work (the CLI)&lt;/h3&gt;
&lt;p&gt;We know real code is the right substrate for agentic infrastructure – but we also know agents want to start with the smallest possible commitment and progressively level up. So we&amp;rsquo;ve designed the Pulumi experience as a progression: an agent should be able to sign up, run its first command, and grow into a full infrastructure as code workflow without ever hitting a wall or manual intervention. Here&amp;rsquo;s what we&amp;rsquo;re launching today to make that journey work end-to-end:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/docs/administration/organizations-teams/agent-accounts/"&gt;Agent accounts&lt;/a&gt;.&lt;/strong&gt; Now agents can use free, ephemeral Pulumi Cloud accounts straight from Claude Code, Codex, OpenCode, Copilot, Cursor, and others. This lets an agent do anything a human could with the Pulumi product without a manual signup step, removing friction while letting agents benefit from robust infrastructure management. A human can claim that account at any time to make it permanent and to share with their team.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.npmjs.com/package/pulumi"&gt;One-command execution&lt;/a&gt;.&lt;/strong&gt; Today an agent needs to know how to find, download, and install Pulumi, and manage subsequent versioning and upgrades. Anything that adds friction is discouraging to an agent. We now have an npm package that enables &lt;code&gt;npx pulumi &amp;lt;anything&amp;gt;&lt;/code&gt;-style commands so agents can run any Pulumi command anywhere without needing to worry about installation or version pinning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-do-direct-resource-operations/"&gt;Imperative infrastructure operations&lt;/a&gt;.&lt;/strong&gt; The new &lt;code&gt;pulumi do&lt;/code&gt; command enables direct create, read, update, delete, list, and API operations with a single command. For example, &lt;code&gt;pulumi do create eks:Cluster&lt;/code&gt; spins up an AWS EKS cluster with built-in best practices, and &lt;code&gt;pulumi do update cloudflare:r2:Bucket --tags '{ &amp;quot;Foo&amp;quot;: &amp;quot;Bar&amp;quot; }'&lt;/code&gt; updates a bucket&amp;rsquo;s tags. All thousands of providers and hundreds of thousands of resource types in the Pulumi ecosystem are supported across clouds. As the complexity of your scenario outgrows singular commands, it is easy to eject out into a full-blown infrastructure-as-code project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/better-cli-interactions-for-agents-and-humans/"&gt;Pulumi Cloud in the CLI&lt;/a&gt;.&lt;/strong&gt; Over the years, we&amp;rsquo;ve added tons of great capabilities to Pulumi Cloud – things like change history, time-to-live stacks, drift detection, resource discovery and search, private registries, IDP, audit logs, secrets management, team-wide policy enforcement – but didn&amp;rsquo;t add the respective ergonomic commands to the CLI. These are the sort of features that matter at scale. Now it&amp;rsquo;s all there in your terminal where agents can use them. Over 30 new commands, you can think of this as the equivalent of the &lt;code&gt;gh&lt;/code&gt; CLI which agents really like.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/better-cli-interactions-for-agents-and-humans/"&gt;&lt;strong&gt;Read the blog&lt;/strong&gt;: Better CLI Interactions for Agents and Humans →&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="neo-everywhere-you-work"&gt;Neo, everywhere you work&lt;/h3&gt;
&lt;p&gt;Once an agent (or a team) has graduated through these capabilities, what comes next is asynchronous infrastructure work and, increasingly, autonomy. That&amp;rsquo;s where Neo comes in: Pulumi&amp;rsquo;s own infrastructure agent, now upgraded with the surfaces, integrations, and cadences teams actually need to run agentic infrastructure in production. We are shipping:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-neo-cli/"&gt;Neo in the CLI&lt;/a&gt;.&lt;/strong&gt; The new &lt;code&gt;pulumi neo&lt;/code&gt; command lets you run the same agent that is already in Pulumi Cloud. It even shares the same agentic loop and uses a sophisticated architecture where the agent workstation is your local computer, allowing it to more seamlessly access source context and tools. This allows you to do agentic infrastructure wherever you prefer: Neo in the cloud for asynchronous, autonomous tasks, or your workstation for more intensive deep-dive paired sessions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/neo-github-slack/"&gt;Neo GitHub and Slack Apps&lt;/a&gt;.&lt;/strong&gt; Now you can @-mention Neo from GitHub pull requests, and/or straight from Slack, to kick off agentic infrastructure workflows wherever it is most convenient, complete with whatever guardrails you&amp;rsquo;ve configured already.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/neo-integrations/"&gt;Neo Integration Catalog&lt;/a&gt;.&lt;/strong&gt; A new integration catalog lets you configure connectors to other systems that bring valuable infrastructure management context, including Atlassian, Datadog, Honeycomb, Linear, PagerDuty, and Supabase. This lets you tap into additional planning, specification, observability, and live site incident data, expanding what agents can do on Days 0, 1, and especially 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/neo-automations/"&gt;Scheduled Tasks and Read-Only Sessions&lt;/a&gt;.&lt;/strong&gt; Now you can automate recurring infrastructure tasks, including confining Neo to read-only operations for extra safety. This opens up scenarios like reporting on infrastructure patterns weekly, automatically cleaning up waste in your dev accounts daily, or scheduled maintenance and upgrades.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/10-more-things-you-can-do-with-neo/"&gt;&lt;strong&gt;Read the blog&lt;/strong&gt;: 10 More Things You Can Do with Pulumi Neo →&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="partnering-with-the-frontier-of-ai-infrastructure"&gt;Partnering with the frontier of AI infrastructure&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;re investing in deep partnerships with the companies building the frontier of AI infrastructure, and are shipping two new partner providers in close collaboration with the teams behind them:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/registry/packages/coreweave/"&gt;CoreWeave provider&lt;/a&gt;.&lt;/strong&gt; This new provider brings the full power of the CoreWeave platform, the leader in GPU infrastructure, to help teams provision AI workloads with ease. This includes support for all of the CoreWeave services including CoreWeave Kubernetes Service (CKS) and includes several examples and templates out of the box for training and inference architectures written in AI-native languages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/pulumi-labs/pulumi-nvidia-aicr"&gt;NVIDIA AI Cluster Runtime (AICR) provider&lt;/a&gt;.&lt;/strong&gt; This new provider delivers fully functional NVIDIA software stacks atop the underlying cloud provider&amp;rsquo;s GPU infrastructure. This packages out-of-the-box components like NVIDIA GPU Operator, Kubeflow, NIM Operator, and dozens more otherwise tricky-to-configure cluster components. We&amp;rsquo;re excited to showcase the new AICR provider in tandem with our new CoreWeave provider: you can now spin up a CKS cluster and configure it with AICR in one program.&lt;/p&gt;
&lt;h3 id="educating-and-measuring-agentic-infrastructure-intelligence"&gt;Educating and measuring agentic infrastructure intelligence&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;ve also invested in making Pulumi maximally legible to agents, because the best tools only matter if agents can find them, read them, and know which one to reach for and when:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/better-cli-interactions-for-agents-and-humans/#agent-friendly-markdown-docs-for-providers-and-components"&gt;Agent-friendly docs&lt;/a&gt;.&lt;/strong&gt; We now serve our docs website in markdown to agents and did a pass over our documentation and CLI text to ensure it&amp;rsquo;s maximally useful to agents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/better-cli-interactions-for-agents-and-humans/"&gt;Agent-friendly CLI ergonomics&lt;/a&gt;.&lt;/strong&gt; We have added &lt;code&gt;--json&lt;/code&gt; and structured errors across the CLI to help agents parse and react to outputs appropriately.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/docs/ai/skills/"&gt;New skills&lt;/a&gt;.&lt;/strong&gt; We&amp;rsquo;ve done a pass over our skills and added a new uber-skill that describes how an agent should leverage the full suite of capabilities we now offer, from Level 0 (agent accounts), to Level 1 (&lt;code&gt;pulumi do&lt;/code&gt;), to Level 2 (full IaC and &lt;code&gt;pulumi up&lt;/code&gt;), to Level 3 (Pulumi Cloud governance and full autonomy with Neo), and beyond. It&amp;rsquo;s handy for humans too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfraBench.&lt;/strong&gt; We have created a new benchmark to measure how well an agent performs on a wide array of representative infrastructure tasks. This is the infrastructure equivalent to SWE-bench and lets us measure stock agents, agents plus the new tools and skills, and Neo, and how they&amp;rsquo;re improving over time. Although we are still hard at work on building out the comprehensive suite, and will keep it internally for now, we will begin publishing our progress against InfraBench as we continue tackling new problems and improving agent performance.&lt;/p&gt;
&lt;h2 id="what-comes-next"&gt;What comes next&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re primarily focused on two pillars as we go forward:&lt;/p&gt;
&lt;p&gt;First, we are making &lt;a href="https://www.pulumi.com/what-is/what-is-agentic-infrastructure/"&gt;agentic infrastructure&lt;/a&gt; a reality with increasingly autonomous workflows. The pace and scale of infrastructure in an AI era are beyond anything we&amp;rsquo;ve seen before, and we need to ensure infrastructure doesn&amp;rsquo;t become the bottleneck to velocity. We will be shipping steady improvements that help agents score better on InfraBench as a measure of their abilities. This will begin with new building blocks and in-context improvements, but we&amp;rsquo;re really excited that every improvement the frontier labs ship in general-purpose coding ability is automatically an improvement in agentic infrastructure on Pulumi, at zero cost to us or to our users. The result is that Pulumi-equipped agents will consistently and measurably outperform raw agents on real infrastructure work, and that gap will compound as the substrate and the models both improve.&lt;/p&gt;
&lt;p&gt;Next, a world in which agents are provisioning, updating, monitoring, and managing all of our infrastructure changes the human/agent/infrastructure interface greatly. We need better change management, policy enforcement, and observability tools. Going from a single human doing a single infrastructure task at a time, to a single agent doing that task, to teams of agents doing lots of autonomous infrastructure tasks at once, will reveal new bottlenecks needed to fully govern your infrastructure. We have a lot of those facilities in Pulumi Cloud already but we will continue pushing here to improve them and ensure they scale up as fast as they need to. This is the layer that matters even as agents themselves get great at infrastructure. The smartest agent in the world still needs guardrails, audit trails, and policy enforcement to be trusted with production systems at scale, and that layer gets more valuable as agents get more capable, not less.&lt;/p&gt;
&lt;p&gt;The combination of these two things will lead to a world where agents are able to manage more infrastructure, and to do so with increasing autonomy, while human operators retain full visibility, understanding, and control over what their teams of agents are doing at all times. This is the full engineering loop applied to infrastructure. Not just code generation, but design, review, deployment, and operation, with agents and humans collaborating across every step.&lt;/p&gt;
&lt;h2 id="its-a-new-era-and-were-just-getting-started"&gt;It&amp;rsquo;s a new era, and we&amp;rsquo;re just getting started&lt;/h2&gt;
&lt;p&gt;It was remarkable to see in practice and at scale that what&amp;rsquo;s good for humans is good for agents: ergonomic infrastructure as code. We&amp;rsquo;ve seen every point along the spectrum, ranging from Wiz managing 1 million resources and doing 100k daily deployments, to Compostable.ai already living the 100% agentic infrastructure dream, to a frontier lab who grew their infrastructure footprint by 982% in a year, all using infrastructure modeled in true code. All very different scales and teams, but with one thing in common: it was code all the way down.&lt;/p&gt;
&lt;p&gt;Languages and verifiability already provide strong foundations, however, there are still clear areas we need to improve, beginning with making the full suite of infrastructure automation, security, and governance tools more accessible to agents. That&amp;rsquo;s what today is all about. To deep dive on details of &lt;a href="https://www.pulumi.com/releases/agentic-infrastructure-era/"&gt;the launches&lt;/a&gt;, check out the &lt;a href="https://www.pulumi.com/releases/agentic-infrastructure-era/#from-the-blog"&gt;companion blog posts&lt;/a&gt; released today.&lt;/p&gt;
&lt;p&gt;Agentic infrastructure is a super exciting one-way door for our industry. We&amp;rsquo;re pushing hard to take this beyond 20% and toward 100% in the years ahead. This is uniquely enabled by infrastructure as code in languages the models already speak combined with built-in verifiability that makes agentic work automatically safe. There&amp;rsquo;s more to be done, however, today&amp;rsquo;s launch will bend the curve even further upwards. We&amp;rsquo;re still only just getting started.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/install/"&gt;Get started with Pulumi free →&lt;/a&gt; Install the CLI and provision your first agentic-ready stack in minutes.&lt;/p&gt;
&lt;p&gt;Happy clouding,&lt;/p&gt;
&lt;p&gt;-Joe&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>ai</category><category>pulumi-neo</category><category>features</category></item><item><title>Vibe Clouding: Give In, Forget That Cloud Infrastructure Even Exists</title><link>https://www.pulumi.com/blog/vibe-clouding/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/vibe-clouding/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/vibe-clouding/index.png" /&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;By this point in 2025, we&amp;rsquo;ve all heard about &amp;ldquo;vibe coding&amp;rdquo;: the AI-fueled craze that enables even my 2 year old nephew to build new applications by simply giving into the vibes, embracing exponentials, and forgetting that the code even exists. Vibe coding enables anybody who can type on a keyboard or speak to a computer to build IPO-worthy software businesses overnight. Today we are excited to introduce vibe coding&amp;rsquo;s similarly revolutionary close cousin: &lt;strong&gt;&amp;ldquo;vibe clouding&amp;rdquo;&lt;/strong&gt;. By giving into the vibes, you can now spin up cloud infrastructure anywhere and everywhere, all by just saying stuff, copy and pasting stuff, and vibing. And even better, it &lt;em&gt;mostly&lt;/em&gt; works! Read on to learn more, or just watch the video below.&lt;/p&gt;
&lt;h2 id="the-code-vibes"&gt;The Code Vibes&lt;/h2&gt;
&lt;p&gt;In just two months, vibe coding has transformed the entire coding profession. If you aren&amp;rsquo;t familiar with the concept, this post by Andrej Karpathy introduces the idea:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://x.com/karpathy/status/1886192184808149383"&gt;&lt;img src="VibeTweet.png" width="600" alt="There's a new kind of coding I call 'vibe coding', where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It's possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard. I ask for the dumbest things like 'decrease the padding on the sidebar by half' because I'm too lazy to find it. I 'Accept All' always, I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I'd have to really read through it for a while. Sometimes the LLMs can't fix a bug so I just work around it or ask for random changes until it goes away. It's not too bad for throwaway weekend projects, but still quite amusing. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works." style="padding: 3px; filter: drop-shadow(3px 3px 3px #aaaaaa);"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="enter-the-cloud-vibes"&gt;Enter the Cloud Vibes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Today we&amp;rsquo;re announcing an entirely new way of managing your infrastructure, &lt;em&gt;vibe clouding&lt;/em&gt;&lt;/strong&gt;. The vibes are no longer limited to application developers; as a platform engineer, you too can now vibe like the best of them. The combination of natural language support thanks to LLMs and an improved &lt;code&gt;pulumi watch&lt;/code&gt; command put you in the flow and the cloud at your fingertips.&lt;/p&gt;
&lt;h2 id="infrastructure-as-code-in-any-language-no-really"&gt;Infrastructure as Code in &lt;em&gt;Any&lt;/em&gt; Language. No, Really&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Today we&amp;rsquo;re introducing the ability to write declarative IaC in natural language&lt;/strong&gt;. No code necessary.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/infrastructure-as-code/"&gt;IaC&lt;/a&gt; is now table stakes for anybody doing anything in the cloud. Pulumi&amp;rsquo;s unique approach (which is &lt;a href="https://github.com/pulumi/pulumi"&gt;open source&lt;/a&gt;, by the way) allows you to use any programming language to declare cloud infrastructure, such as Python or TypeScript, and its declarative model brings you desired goal state into existence as if by magic.&lt;/p&gt;
&lt;h3 id="declaring-cloud-infrastructure-in-natural-language"&gt;Declaring Cloud Infrastructure in Natural Language&lt;/h3&gt;
&lt;p&gt;Now you can express infrastructure in &lt;em&gt;any&lt;/em&gt; language, programming or otherwise. For example, this IaC &amp;ldquo;program&amp;rdquo; written in English creates a Python webserver in AWS that&amp;rsquo;s accessible over the Internet:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;An AWS EC2 instance running a Python web server.
It accepts traffic over the Internet on port 80 and simply responds &amp;#34;Hello, World.&amp;#34;
Capture and export its auto-assigned IP address and DNS name.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We save this in a &lt;code&gt;*.pai&lt;/code&gt; file (&lt;code&gt;pai&lt;/code&gt; = Pulumi AI), and then deploy it with &lt;code&gt;pulumi up&lt;/code&gt; like normal. The new language host asks Pulumi&amp;rsquo;s AI Copilot to figure out the infrastructure we&amp;rsquo;ve requested and then shows us a preview of what it will do:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pulumi up
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Previewing update &lt;span class="o"&gt;(&lt;/span&gt;dev&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type Name Plan Info
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + pulumi:pulumi:Stack vibeclouding-dev create &lt;span class="m"&gt;2&lt;/span&gt; messages
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + ├─ aws:ec2:SecurityGroup webSecurityGroup create
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + └─ aws:ec2:Instance webServerInstance create
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Diagnostics:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pulumi:pulumi:Stack &lt;span class="o"&gt;(&lt;/span&gt;vibeclouding-dev&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 🧠 Thinking...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 🧠 I am happy with this, let&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;s go!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Outputs:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; InstanceDNS: output&amp;lt;string&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; InstanceIP : output&amp;lt;string&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Resources:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + &lt;span class="m"&gt;3&lt;/span&gt; to create
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do you want to perform this update? &lt;span class="o"&gt;[&lt;/span&gt;Use arrows to move, &lt;span class="nb"&gt;type&lt;/span&gt; to filter&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; no
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; details
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can select &amp;ldquo;yes&amp;rdquo; and it will deploy our cloud stuff:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Updating (dev)
Type Name Status
+ pulumi:pulumi:Stack vibeclouding-dev created (17s)
+ ├─ aws:ec2:SecurityGroup webSecurityGroup created (2s)
+ └─ aws:ec2:Instance webServerInstance created (12s)
Outputs:
publicDns: &amp;#34;ec2-54-189-144-3.us-west-2.compute.amazonaws.com&amp;#34;
publicIP : &amp;#34;54.189.144.3&amp;#34;
Resources:
+ 3 created
Duration: 18s
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Seconds later, after it completes, we&amp;rsquo;ve got a Python webserver on the Internet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl 54.189.144.3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello, World.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="not-just-english"&gt;Not Just English&lt;/h3&gt;
&lt;p&gt;This is a new language runtime just like Pulumi&amp;rsquo;s other supported languages (&lt;code&gt;python&lt;/code&gt;, &lt;code&gt;go&lt;/code&gt;, &lt;code&gt;java&lt;/code&gt;, &lt;code&gt;yaml&lt;/code&gt;, etc). We almost called this new language &lt;code&gt;english&lt;/code&gt;, except that we can use other languages:&lt;/p&gt;
&lt;p&gt;Spanish:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Una instancia de AWS EC2 que ejecuta un servidor web Python.
Acepta tráfico de internet en el puerto 80 y simplemente responde &amp;#34;Hola a todos&amp;#34;.
Captura y exporta su dirección IP y nombre DNS autoasignados.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mandarin Chinese:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;运行 Python Web 服务器的 AWS EC2 实例。
它通过端口 80 接受 Internet 上的流量，并简单地响应“Hello, World”。
捕获并导出其自动分配的 IP 地址和 DNS 名称。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Hawaiian:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ʻO kahi hiʻohiʻona AWS EC2 e holo ana i kahi kikowaena pūnaewele Python.
ʻAe ʻo ia i ke kaʻa ma luna o ka Pūnaewele ma ke awa 80 a pane wale ʻo &amp;#34;Aloha, World.&amp;#34;
Hopu a hoʻokuʻu aku i kāna helu IP i hāʻawi ʻia a me ka inoa DNS.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The LLM is happy to accept any language known to us humans. So we are simply calling it &lt;code&gt;ai&lt;/code&gt;. You just specify &lt;code&gt;runtime: ai&lt;/code&gt; in your &lt;code&gt;Pulumi.yaml&lt;/code&gt; and all other Pulumi features work as normal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;py-webserver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ai&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="it-is-feature-rich-and-works-for-real-workflows"&gt;It Is Feature Rich and Works for Real Workflows&lt;/h3&gt;
&lt;p&gt;If you change your mind and want it to use a Node.js web server &amp;hellip; or listen on port 8080 &amp;hellip; or run on Azure instead of AWS &amp;hellip; with a different response &amp;hellip; Simply change your prompt:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;A virtual machine in Azure running a Node.js web server.
It accepts traffic over the Internet on port 8080 and simply responds &amp;#34;Hello, Vibe Coders!&amp;#34;
Capture and export its auto-assigned IP address and DNS name.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We then rerun &lt;code&gt;pulumi up&lt;/code&gt; and it knows how to evolve your infrastructure towards the new goal state.&lt;/p&gt;
&lt;p&gt;Your prompts can be as imprecise or specific as you&amp;rsquo;d like. For example, &amp;ldquo;Run a joke of the day application on Google&amp;rdquo; needn&amp;rsquo;t tell the LLM what sorts of infrastructure you want &amp;ndash; it will just intelligently decide between a GCE VM, Docker container in Google Cloud Run, GKE app, etc.&lt;/p&gt;
&lt;p&gt;You can also spread your prompts across any number of &lt;code&gt;*.pai&lt;/code&gt; files: so you can stick your webserver into &lt;code&gt;webserver.pai&lt;/code&gt;, your database in &lt;code&gt;database.pai&lt;/code&gt;, and so on, and you can even cross-references resources between files, and the LLM will figure it out. Just vibe and out pops cloud infrastructure!&lt;/p&gt;
&lt;h2 id="watch-mode-for-rapid-iteration-and--vibing"&gt;Watch Mode for Rapid Iteration and &amp;hellip; Vibing&lt;/h2&gt;
&lt;p&gt;This is already amazingly cool, but we haven&amp;rsquo;t begun &lt;em&gt;vibing&lt;/em&gt; just yet. We are halfway there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Today we&amp;rsquo;re also introducing a vastly improved watch command to properly unlock the vibes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The little-known &lt;code&gt;pulumi watch&lt;/code&gt; command sits there waiting for changes to any parts of your Pulumi IaC and in response to you hitting save will redeploy the changes. It turns out that this combined with native LLM language support yields the magical combination that unlocks vibe clouding.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take our original example above but use the &lt;code&gt;pulumi watch&lt;/code&gt; command to trigger the deployments:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/h-CHD5nTZDo?rel=0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Just write specifications fluently and hit save whenever it&amp;rsquo;s convenient. Pulumi incrementally deploys what it can, when it can, reports on status interactively, and summarizes what it did afterwards.&lt;/p&gt;
&lt;p&gt;If your thought is half-baked, exploratory in nature, or you hit an unexpected hiccup, thanks to the declarative nature of IaC, it can always pick up safely where it left off. Don&amp;rsquo;t worry, just vibe.&lt;/p&gt;
&lt;h2 id="this-is-just-the-beginning"&gt;This is Just the Beginning&lt;/h2&gt;
&lt;p&gt;By now, I hope you&amp;rsquo;ve realized what date it is today: April 1st. April Fool&amp;rsquo;s Day. We just couldn&amp;rsquo;t help ourselves. So this is all just a joke. Sort of.&lt;/p&gt;
&lt;p&gt;Much of this is actually becoming reality thanks to the intersection of multiple factors:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pulumi use of &amp;ldquo;code&amp;rdquo; pairs well with the LLMs&amp;rsquo; ability to produce correct code.&lt;/li&gt;
&lt;li&gt;Pulumi language extensibility enables adding &amp;ldquo;natural language&amp;rdquo; as a language provider.&lt;/li&gt;
&lt;li&gt;Pulumi Copilot, launched less than a year ago, gives us skills that make the LLMs even better at infrastructure tasks.&lt;/li&gt;
&lt;li&gt;The LLM models are getting so darned good &amp;hellip; and will get even better still.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The improvements to &lt;code&gt;pulumi watch&lt;/code&gt; are real and already in the latest Pulumi release. The &lt;code&gt;pulumi-language-ai&lt;/code&gt; language host is, of course, just an early prototype of what&amp;rsquo;s possible, but we look forward to hearing your feedback if you have the chance to kick the tires. Even more exciting things are on their way throughout 2025 and they won&amp;rsquo;t be launched on April 1st next time.&lt;/p&gt;
&lt;h2 id="get-started-vibing"&gt;Get Started Vibing&lt;/h2&gt;
&lt;p&gt;If you want to get started, simply:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/iac/download-install/"&gt;Download Pulumi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pulumi/pulumi-language-ai/releases"&gt;Download the &lt;code&gt;pulumi-language-ai&lt;/code&gt; host&lt;/a&gt; and ensure it&amp;rsquo;s on your &lt;code&gt;PATH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; to a valid OpenAI key&lt;/li&gt;
&lt;li&gt;Run &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_watch/"&gt;&lt;code&gt;pulumi watch&lt;/code&gt;&lt;/a&gt;, begin typing, copy and pasting, and vibing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We highly recommend playing this video on repeat in the background as you do so:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/WmL00oXSC6k?rel=0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Happy vibe clouding.&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>april-fools</category></item><item><title>Pulumi - Automate, Secure, and Manage Everything You Run in the Cloud</title><link>https://www.pulumi.com/blog/pulumi-up-2024/</link><pubDate>Wed, 18 Sep 2024 09:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-up-2024/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-up-2024/index.png" /&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;At our fourth annual PulumiUP conference, we unveiled a new vision for Pulumi, going beyond infrastructure as code to a comprehensive product suite. Pulumi’s platform now consists of three core products: Pulumi IaC is open source infrastructure as code in any programming language; Pulumi ESC is centralized secrets management that scales; and Pulumi Insights delivers instant visibility, intelligence, and control over all of your infrastructure. Each product can be adopted independently but is better together. In this post, we will share more about how Pulumi is your trusted partner to automate, secure, and manage everything you run in the cloud.&lt;/p&gt;
&lt;h2 id="pulumi---one-unified-platform-for-all-your-infrastructure-needs"&gt;Pulumi - One Unified Platform For All Your Infrastructure Needs&lt;/h2&gt;
&lt;p&gt;The Pulumi platform solves a broad set of problems that engineering leaders face in the modern cloud era. This spans cloud automation, security, and management, which aligns to our three products: &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/infrastructure-as-code/"&gt;Pulumi IaC&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/secrets-management/"&gt;Pulumi ESC&lt;/a&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/pulumi-insights/"&gt;Pulumi Insights&lt;/a&gt;&lt;/strong&gt;. Our unified approach ensures developers, infrastructure experts, and security teams can collaborate closely and ship faster with high confidence.&lt;/p&gt;
&lt;p&gt;In addition to our three products, Pulumi’s platform incorporates three core capabilities that span the entire product suite. &lt;strong&gt;&lt;a href="https://www.pulumi.com/crossguard/"&gt;Pulumi CrossGuard&lt;/a&gt;&lt;/strong&gt; is our policy as code engine which ensures security, compliance, and best practices; &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/pulumi-deployments/"&gt;Pulumi Deployments&lt;/a&gt;&lt;/strong&gt; is our deployment workflow technology that lets us orchestrate infrastructure-oriented tasks; and &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/copilot/"&gt;Pulumi Copilot&lt;/a&gt;&lt;/strong&gt; is our generative AI technology that deeply understands the cloud and infrastructure management and operations.&lt;/p&gt;
&lt;p&gt;You can see this visually depicted here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/pulumi-cloud"&gt;&lt;img src="platform.png" alt="Pulumi Platform"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We’ve now worked with 3,000 customers to help with their cloud journey and have listened to and solved the problems we regularly hear about. That includes Nvidia who is at the forefront of the AI revolution as well as &lt;a href="https://www.pulumi.com/case-studies/bmw"&gt;BMW&lt;/a&gt; who is reimagining their entire engineering mindset in a cloud-first world, both leveraging Pulumi. &lt;a href="https://www.pulumi.com/case-studies/unity"&gt;Unity Games&lt;/a&gt; now ships &lt;strong&gt;5x faster&lt;/strong&gt; from code to cloud, and Tivity Health &lt;strong&gt;saved 71%&lt;/strong&gt; of their cloud spend, automating everything and saving $6.5M annually.&lt;/p&gt;
&lt;p&gt;Now let’s dive into the three products and what we announced at PulumiUP:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/AepHQaXeNX0?rel=0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="pulumi-iac---infrastructure-as-code-in-any-programming-language"&gt;Pulumi IaC - Infrastructure as Code in Any Programming Language&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/infrastructure-as-code"&gt;Pulumi IaC&lt;/a&gt; is our flagship open source technology, and it powers virtually everything we do, even the new products. We have seen accelerated adoption of Pulumi IaC. We’ve had over 100M downloads, are about to crack 21K GitHub stars (&lt;a href="https://github.com/pulumi/pulumi/stargazers"&gt;give us a star&lt;/a&gt; and bump us over!), and have seen 167% the contributions of Terraform this past month and 300% of OpenTofu. Not only is Pulumi the most powerful IaC technology, it is becoming more popular and vibrant too.&lt;/p&gt;
&lt;p&gt;We are always improving Pulumi IaC and today is no different. We launched a number of new and exciting IaC features. That includes using any Terraform provider, beyond the nearly 200 providers that Pulumi already supports. We also shipped a new &lt;a href="https://www.pulumi.com/blog/pulumi-vscode-extension/"&gt;Pulumi VS Code Extension&lt;/a&gt; that enables rich debugging and easier editing of your IaC programs. Pulumi Copilot can now diagnose and fix your IaC errors. And finally, we’ve improved our &lt;a href="https://www.pulumi.com/registry/packages/kubernetes/"&gt;Kubernetes support&lt;/a&gt; with powerful controls over await logic for more robust cloud native deployments. And we&amp;rsquo;re not slowing down anytime soon.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/pulumi/pulumi"&gt;Pulumi is open source&lt;/a&gt;, of course, but works best with Pulumi Cloud, the easiest, most secure, and most reliable way to adopt Pulumi IaC. &lt;a href="https://www.pulumi.com/case-studies/starburst"&gt;Starburst&lt;/a&gt; &lt;strong&gt;saved 100 days&lt;/strong&gt; per year by moving from DIY state management to Pulumi Cloud. By using Pulumi Cloud, you also gain access to the other products in this post. &lt;a href="https://www.pulumi.com/docs/iac/get-started/"&gt;Try IaC now&lt;/a&gt; and choose the option that suits you best.&lt;/p&gt;
&lt;h2 id="pulumi-esc---centralized-secrets-management-and-orchestration-that-scales"&gt;Pulumi ESC - Centralized Secrets Management and Orchestration that Scales&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/secrets-management"&gt;Pulumi ESC&lt;/a&gt; is a new approach to secrets and configuration management that is scalable, secure automatically with easy dynamic credentials, and tames sprawl with engineering best practices. ESC is not just a feature of our IaC product &amp;mdash; it can be adopted entirely independently of it for application and infrastructure secrets. We initially launched ESC in preview nearly a year ago, and since then have had hundreds of customers and thousands of users try it out – many at production scale – who have given us amazing feedback. We are excited to announce that &lt;strong&gt;ESC is generally available&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Being generally available is a big deal to us, and means it is ready for robust and secure enterprise-grade workloads. New capabilities available at GA include a new projects system which lets you group your environments into familiar hierarchies. We have added versioning, tagging, and pinning, so that you can institute more robust change management practices. ESC can manage encrypted secrets directly, but we have always supported pulling secrets from other secret stores, like AWS Secrets Manager, Azure KeyVault, Google Secret Manager, and HashiCorp Vault. We have now added 1Password to the list. We now also support secrets sync, which lets you still edit your secrets straight from Pulumi ESC, but have them automatically mirrored back to the backing secrets store. Flexible webhooks now support custom workflows triggered by environment changes. The new Pulumi VS Code Extension helps you edit your environments in code. We’ve launched application SDKs for Node.js, Python, and Go, as well as a Kubernetes Operator to inject secrets into Kubernetes workloads.&lt;/p&gt;
&lt;p&gt;We aim for you to “fall into the pit of success” with security, so that it is built-in and automatic, and ESC is a major enabler of that. &lt;a href="https://www.pulumi.com/docs/esc/get-started"&gt;Try out ESC now&lt;/a&gt;, or &lt;a href="https://www.pulumi.com/blog/pulumi-esc-ga"&gt;read more in the launch post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="pulumi-insights---visibility-intelligence-and-controls-over-all-infrastructure"&gt;Pulumi Insights - Visibility, Intelligence, and Controls Over All Infrastructure&lt;/h2&gt;
&lt;p&gt;Pulumi Insights already delivers visibility, intelligence, and controls over your infrastructure resources. We began with Insights a year and a half ago as a collection of IaC features. We added resource search with structured and natural language search syntax, to help you find your IaC infrastructure no matter where it is running. We added the ability to export your infrastructure data and slice and dice it from data tools like Snowflake. We also added new dashboards to help visualize your infrastructure at scale.&lt;/p&gt;
&lt;p&gt;The big news with Pulumi Insights 2.0 is that &lt;em&gt;we’re bringing these capabilities to &lt;strong&gt;all of your cloud infrastructure&lt;/strong&gt;&lt;/em&gt;, no matter where it is, and no matter how it was created. You point Pulumi at your cloud accounts for any of nearly 200 supported clouds, and you get an instant asset inventory of everything you have. This is true even for resources created by Terraform, CloudFormation, Azure Resource Manager, cloud CLIs and SDKs, or even by clicking in your cloud console. An improved resource view gives you pivot-table-like capabilities so you can understand everything you have, and new graph visualizations with inferred dependencies help you to make sense of how things relate. Search and Pulumi Copilot work over discovered cloud resources, letting you explore and ask questions interactively. Pulumi Insights leverages Pulumi CrossGuard, our policy as code technology, and can tap into any existing IaC policies to find issues pertaining to security, compliance, cost, and best practices. Pulumi’s compliance-ready policy packs just work. Insights can also leverage CrossGuard’s ability to automate remediations so that Insights not only tells you about your issues, but helps you fix them with the click of a button. Finally, Insights is better together with Pulumi IaC, and enables you to migrate any resources in the cloud to Pulumi IaC – improving the robustness and built-in security of your operations – with a fully interactive import experience.&lt;/p&gt;
&lt;p&gt;This marks the start of an ambitious long-term vision for Pulumi Insights. Some of what was announced is actively shipping while other pieces will ship in the coming weeks. &lt;a href="https://www.pulumi.com/blog/pulumi-insights-2"&gt;Learn more in the launch blog&lt;/a&gt; and, &lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;get started with Pulumi Insights 2.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="thank-you"&gt;Thank You&lt;/h2&gt;
&lt;p&gt;I am incredibly thankful to our community, 3,000 customers, and the partners and speakers who made PulumiUP 2024 a reality. Your feedback and continued belief in Pulumi has fueled the innovations we’re shipping today and into the future.&lt;/p&gt;
&lt;p&gt;All of the talks are &lt;a href="https://www.pulumi.com/pulumi-up"&gt;streaming live here&lt;/a&gt; and will be up on YouTube afterwards.&lt;/p&gt;
&lt;p&gt;We can’t wait to hear what you think about the new vision for Pulumi’s platform as well as the new IaC, ESC, and Insights capabilities announced at PulumiUP 2024. As always, you can &lt;a href="https://www.pulumi.com/start"&gt;try Pulumi for free here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy cloud spelunking.&lt;/p&gt;
&lt;p&gt;-Joe&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>infrastructure-as-code</category><category>esc</category><category>insights</category></item><item><title>PulumiUP 2024: Dive Into the Future of Cloud, Platform Engineering, and AI/ML</title><link>https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/</link><pubDate>Wed, 11 Sep 2024 07:04:40 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/index.png" /&gt;
&lt;p&gt;PulumiUP 2024 is just around the corner! It will be held on September 18th, starting at 8 AM PT | 15:00 UTC +0, and with over 5,500 engineers from all over the world already registered, this is shaping up to be the must-attend event for cloud professionals, platform engineers, and AI/ML enthusiasts alike. From entry-level engineers to tech executives, this event brings together professionals from companies of all sizes to explore the latest innovations and best practices in &lt;strong&gt;Cloud and IaC&lt;/strong&gt;, &lt;strong&gt;Platform Engineering &amp;amp; DevOps&lt;/strong&gt;, and &lt;strong&gt;AI/ML&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you haven’t registered yet, now’s the time! &lt;a href="https://conference.pulumi.com/schedule/?utm_source=PulumiUP&amp;amp;utm_medium=web&amp;amp;utm_campaign=FY2025Q1_Event_PulumiUP"&gt;Start building your schedule today&lt;/a&gt;, select the talks you want to watch live and on-demand and add them to your schedule.&lt;/p&gt;
&lt;h2 id="pulumiup-at-glance"&gt;PulumiUP at Glance&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/#main-track-keynote-cloud-culture-talks-and-more"&gt;Main Track: Keynote, Cloud Culture Talks, and More&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/#aiml-track-highlights"&gt;AI/ML Track Highlights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/#platform-engineering-and-devops-track-highlights"&gt;Platform Engineering and DevOps Track Highlights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/#cloud-and-iac-track-highlights"&gt;Cloud and IaC Track Highlights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/#workshops-and-hands-on-learning"&gt;Workshops and Hands-On Learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/#amazing-partners-and-sponsors"&gt;Amazing Partners and Sponsors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/#build-your-schedule-now"&gt;Build Your Schedule Now&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="main-track-keynote-cloud-culture-talks-and-more"&gt;Main Track: Keynote, Cloud Culture Talks, and More&lt;/h2&gt;
&lt;p&gt;In the Main Track, you’ll hear directly from the Pulumi leadership team about exciting product innovations. Don’t miss the Cloud Culture talks focused on the human side of technology and collaboration.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/events/pulumiup-2024-keynote/"&gt;Keynote and New Product Announcements&lt;/a&gt;&lt;/strong&gt; - Joe Duffy (Co-founder and CEO), Luke Hoban (CTO), and other key Pulumi leaders will unveil new products and innovations shaping the next wave of cloud development. Expect to see live demos showcasing how these tools can revolutionize your workflows, from cloud infrastructure to security automation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/9Xf6DJMvQ08"&gt;Why Care About Building a Cloud Center of Excellence?&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Alex Radu (VP Product &amp;amp; Marketing Manager, Public Cloud, J.P. Morgan) discusses why building a Cloud Center of Excellence is essential for long-term cloud strategy success.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/30wTCwfj3cc"&gt;What Is &amp;lsquo;HugOps&amp;rsquo; and Why Is It Important?&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Rees Pozzi (Senior Platform Engineer, Kainos) explores the meaning and importance of &amp;ldquo;HugOps,&amp;rdquo; a practice promoting empathy and collaboration in the tech world but also by all those impacted by it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="aiml-track-highlights"&gt;AI/ML Track Highlights&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://conference.pulumi.com/talks/panel-ai-cloud-development/"&gt;&lt;figure&gt;&lt;img src="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/pulumiup_2024-ai-cloud-development.png"
alt="Panelists of AI for Cloud Development" width="100%"&gt;&lt;figcaption&gt;
&lt;p&gt;Panel: AI for Cloud Development&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;AI is transforming how we approach development and infrastructure, and PulumiUP offers an incredible lineup of talks and panels on the topic.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/4IWGNoNVbiM"&gt;Data Privacy Challenges with Large Language Models&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Aditi Godbole (Data Science, AI &amp;amp; ML Leader, SAP) will address the critical question of managing data privacy, addressing LLM basics, AI data privacy fundamentals, and specific privacy issues in LLMs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/CoZM9BCJcJ4"&gt;Pulumi Powered AI/ML on Kubernetes&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Jason Smith (App Modernization Specialist, Google Cloud) will show you how to serve an open-source LLM with a RAG on Kubernetes and set up a Kubernetes environment for AI/ML workloads with Pulumi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/WoM8Bj76_Fw"&gt;AI Tools for Developers&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Jim Clark (Principal Software Engineer, Docker) will explore how Tools can enhance the capabilities of AI assistants and show how the combination of AI, Tools, and containerized runtimes, can enhance interactions between developers and their tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/2mlb2jEBkoo"&gt;The AI Governance Challenge&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Patty O&amp;rsquo;Callaghan (Technical Director, Charles River) will explore the complexities of AI governance and how to navigate them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/events/panel-ai-in-cloud-development/"&gt;Panel Discussion: &amp;ldquo;AI for Cloud Development&amp;rdquo;&lt;/a&gt;&lt;/strong&gt; - Luke Hoban (CTO, Pulumi), Phillip Carter (Principal Product Manager, Honeycomb), Giri Sreenivas (CPO, Docker), Clare Liguori (Senior Principal Software Engineer, AWS) and Meagan Cojocar (Principal Product Manager, Pulumi) will provide diverse perspectives on how AI is shaping cloud infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="platform-engineering-and-devops-track-highlights"&gt;Platform Engineering and DevOps Track Highlights&lt;/h2&gt;
&lt;figure&gt;&lt;img src="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/pulumiup_2024-secrets-policies-automating-cybersecurity.png"
alt="Panelists of Secrets and Policies—Automating Cybersecurity" width="100%"&gt;&lt;figcaption&gt;
&lt;p&gt;Panel: Secrets and Policies—Automating Cybersecurity&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The Platform Engineering &amp;amp; DevOps track at PulumiUP is perfect for anyone looking to automate infrastructure, secure their systems, and scale their environments with ease. This track features talks and panels on cutting-edge technologies and practices.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/WZD1z2ldweY"&gt;Moving Mountains: How IaC Unlocks Massive Refactoring Possibilities&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Shaun Verch (Infrastructure Engineer, Oso) will show you how infrastructure as code can transform large-scale refactoring projects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/1Q3XPmenthg"&gt;Using Pulumi to Empower Kubernetes Fleet Management&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Blake Romano (Senior Software Engineer, Imagine Learning) will show you how Imagine Learning leverages Pulumi to manage a fleet of Kubernetes clusters and other platform resources quickly and reliably, and how it revolutionized their workflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/f2r9rS9U2CA"&gt;Streamline Your Infrastructure Deployment with GitOps and Pulumi Operator&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Sam Cogan (Solutions Architect &amp;amp; Azure MVP, WTW) will highlight how you can define your infrastructure in Git, and have Pulumi automatically reconcile it into deployed infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/EQwpC02CQ9k"&gt;Is This a Platform? Platform Engineering Before PMF&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Jk Jensen (Team Lead, Staff Software Engineer, MystenLabs) will share how they built their service platform around Pulumi to help engineers and researchers move from prototypes to deployed environments, enabling their teams to iterate more quickly and develop an increasing number of systems without additional complexity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://www.pulumi.com/events/security-automation-faster-cheaper-better/"&gt;Security Automation—Faster. Cheaper. Better.&lt;/a&gt;&amp;quot;&lt;/strong&gt; - David Giambruno (VP of Engineering and DevOps, Tivity Health) and Joe Duffy (Founder/CEO, Pulumi) will discuss security automation and how these efforts impacted speed and agility, cost optimization and improved security and compliance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/CGE8VXgkjug"&gt;Meet Devs Where They Are: Why IaC Must Be Real Code&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Jeremy Adams (Head of Ecosystems, Dagger) will present why real code (that teams already use for applications) is essential for both IaC and CI/CD pipelines, and to meet modern DevOps best practices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/2a-wlUnBY1g"&gt;Security of IaC Pipelines and Infrastructure Governance With Policies-As-Code&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Marina Novikova (Senior Partner Solutions Architect, AWS) and Andy Taylor (Senior Networking Specialist/ Solutions Architect, AWS) will explore security best practices for IaC pipelines and infrastructure governance using policies-as-code, cover best practices for handling sensitive information like access keys, tokens and encryption keys, and scaling and automating your DevSecOps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/events/secrets-policies-automating-cybersecurity/"&gt;Panel Discussion: &amp;ldquo;Secrets and Policies—Automating Cybersecurity&amp;rdquo;&lt;/a&gt;&lt;/strong&gt; - Arun Loganathan (Senior Product Manager, Pulumi), Maya Kaczorowski (PM of Security), Jason Meller (VP, Product, 1Password), and Ofir Cohen (CTO, Container Security, Wiz) will explore the intersection of innovation and security, offering insights into how AI is reshaping the threat landscape and how organizations can stay ahead.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cloud-and-iac-track-highlights"&gt;Cloud and IaC Track Highlights&lt;/h2&gt;
&lt;figure&gt;&lt;img src="https://www.pulumi.com/blog/pulumiup-global-cloud-iac-platform-engineering-ai-conference/pulumiup_2024-infrastructure-as-code.png"
alt="Panelists of Infrastructure as Code - Can we do better?" width="100%"&gt;&lt;figcaption&gt;
&lt;p&gt;Panel: Infrastructure as Code - Can we do better?&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The Cloud and IaC track is ideal for those wanting to deepen their understanding of infrastructure as code and its impact on modern cloud computing. Learn from industry pioneers and see where the future of IaC is headed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://www.pulumi.com/blog/from-cdk-pulumi-evolution-of-sst/"&gt;From CDK to Pulumi: Evolution of SST&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Dax Raad (Founding Engineer, SST) and Jay V (Founder, SST) will share insights into the early development of their product, initially built on AWS Cloud Development Kit (CDK), the challenges they encountered and the groundbreaking decision to transition to Pulumi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://www.pulumi.com/blog/unified-programmatic-approach-infrastructure-management-bmw-using-pulumi/"&gt;Unified Software Development at BMW Software Factory with Pulumi&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Jan-Peter Alten (Expert Software Engineer, DevOps, BMW Group) will showcase how BMW uses Pulumi to unify their software development processes, resulting in an increase in developer productivity, streamlined infrastructure management, and enhanced scalability, security, and compliance across their complex software ecosystem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/E077QbXPOZE"&gt;Stacking Accounts: Multi-Account Deployments in a Single Stack for Monitoring, Management, and More&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Denis Willett (Software Engineer, North Carolina Institute for Climate Studies) will explain how they use Pulumi for managing 60+PB of environmental data across AWS, GCP, and Azure and leverage multi-account deployments in a single stack via the Pulumi Automation API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://youtu.be/C5ZuEVXesOk"&gt;Industrialize the Configuration of Your GitHub Repositories With IaC&lt;/a&gt;&amp;quot;&lt;/strong&gt; - Alexandre Nédélec (Software Engineer, Avanade) will live code using the GitHub, Azure native, and Azure AD Pulumi providers to create a GitHub repository and configure its pipeline to deploy to Azure using OpenID Connect.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/events/panel-infrastructure-as-code-can-we-do-better/"&gt;Panel Discussion: &amp;ldquo;Infrastructure as Code — Can We Do Better?&amp;rdquo;&lt;/a&gt;&lt;/strong&gt; - Joe Duffy (Co-Founder and CEO, Pulumi), Brian Grant (CTO, Stealth), Elad Ben-Israel (Co-Founder and CEO, Winglang), Adam Jacob (Co-Founder and CEO, System Initiative), and Luke Hoban (CTO, Pulumi) will discuss the past, the present, and the future of Infrastructure as Code and the overall infrastructure technologies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="workshops-and-hands-on-learning"&gt;Workshops and Hands-On Learning&lt;/h2&gt;
&lt;p&gt;Want to get hands-on experience? Our live workshops are designed to deepen your understanding of trending topics, Pulumi, and its applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://www.pulumi.com/resources/managing-team-secrets-with-1password-pulumi-esc/"&gt;Managing Team Secrets with 1Password &amp;amp; Pulumi ESC&lt;/a&gt;&amp;quot;&lt;/strong&gt; on September 25, led by Phil Johnston (1Password) and Diana Esteves (Pulumi).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://www.pulumi.com/resources/securing-iac-pipelines-in-regulated-industries/"&gt;Securing IaC Pipelines in Regulated Industries&lt;/a&gt;&amp;quot;&lt;/strong&gt; on September 26, led by Josh Kodroff (Pulumi) and Marina Novikova (AWS).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://www.pulumi.com/resources/deploy-tailscale-infrastructure-with-pulumi/"&gt;Deploy Tailscale infrastructure in AWS with Pulumi&lt;/a&gt;&amp;quot;&lt;/strong&gt; on October 15, led by Diana Esteves (Pulumi) and Lee Briggs (Tailscale).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;&lt;a href="https://www.pulumi.com/resources/observability-as-code-for-ai-apps-new-relic/"&gt;Observability as Code for AI Apps with New Relic and Pulumi&lt;/a&gt;&amp;quot;&lt;/strong&gt; on October 30, led by Diana Esteves (Pulumi) and Harry Kimpel (New Relic).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="amazing-partners-and-sponsors"&gt;Amazing Partners and Sponsors&lt;/h2&gt;
&lt;p&gt;Thank you to our amazing customers, sponsors, and partners for supporting PulumiUP!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aws.amazon.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;AWS&lt;/a&gt;&lt;/strong&gt; The world&amp;rsquo;s most comprehensive and broadly adopted cloud, offering over 200 fully featured services from data centers globally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://cloud.google.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Google Cloud&lt;/a&gt;&lt;/strong&gt; Help developers build quickly, securely, and cost effectively with the next generation of modern infrastructure designed to meet specific workload and industry needs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://newrelic.com/instant-observability/pulumi/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;New Relic&lt;/a&gt;&lt;/strong&gt; Data for engineers to monitor, debug, and improve their entire stack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://docker.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Docker&lt;/a&gt;&lt;/strong&gt; Accelerate how you build, share, and run applications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://1password.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;1Password&lt;/a&gt;&lt;/strong&gt; Streamline how you manage SSH keys, API tokens, and other infrastructure secrets throughout the entire software development life cycle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://tailscale.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Tailscale&lt;/a&gt;&lt;/strong&gt; Make creating software-defined networks easy: securely connecting users, services, and devices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pinecone.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Pinecone&lt;/a&gt;&lt;/strong&gt; Build remarkable GenAI applications fast, with lower cost, better performance, and greater ease of use at any scale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://wiz.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Wiz&lt;/a&gt;&lt;/strong&gt; Secure everything you build and run in the cloud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://honeycomb.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Honeycomb&lt;/a&gt;&lt;/strong&gt; Observability that helps solve problems you couldn’t before.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://mystenlabs.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Mysten Labs&lt;/a&gt;&lt;/strong&gt; Building critical infrastructure to enable a more decentralized internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://imaginelearning.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Imagine Learning&lt;/a&gt;&lt;/strong&gt; Empowering educators to inspire breakthrough moments in every student’s unique learning journey with digital-first, K–12 education solutions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://dagger.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Dagger&lt;/a&gt;&lt;/strong&gt; Powerful, programmable open source CI/CD engine that runs your pipelines in containers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://osohq.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Oso&lt;/a&gt;&lt;/strong&gt; Authorization as a service.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="build-your-schedule-now"&gt;Build Your Schedule Now&lt;/h2&gt;
&lt;p&gt;With so many compelling topics across AI/ML, Platform Engineering, DevOps, and Cloud and IaC, now is the time to &lt;a href="https://conference.pulumi.com/schedule/?utm_source=PulumiUP&amp;amp;utm_medium=web&amp;amp;utm_campaign=FY2025Q1_Event_PulumiUP"&gt;build your PulumiUP schedule&lt;/a&gt;. Select the sessions that match your goals and interests to maximize your experience. Plus, you&amp;rsquo;ll receive a link to watch your chosen panel discussions and tech talks on-demand!&lt;/p&gt;
&lt;p&gt;Haven’t registered yet? It’s not too late! Join 5,500 engineers worldwide in this groundbreaking event and gain the insights you need to drive innovation at your company. &lt;a href="https://www.pulumi.com/pulumi-up/"&gt;Register now-&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can’t wait to see you there!&lt;/p&gt;</description><author>Sara Huddleston</author><category>pulumi-events</category><category>announcements</category><category>platform-engineering</category><category>ai</category><category>cloud-computing</category><category>infrastructure-as-code</category><category>devsecops</category><category>community</category></item><item><title>Introducing `pulumi state move`: Move Resources Between Stacks or Projects</title><link>https://www.pulumi.com/blog/move-resources-between-stacks/</link><pubDate>Thu, 25 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/move-resources-between-stacks/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/move-resources-between-stacks/index.png" /&gt;
&lt;p&gt;Today we&amp;rsquo;re announcing the &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_state_move/"&gt;&lt;code&gt;pulumi state move&lt;/code&gt;&lt;/a&gt; command, which can be used to move resources that are managed by Pulumi between different stacks and/or projects. With the &lt;code&gt;pulumi state move&lt;/code&gt; command, you can refactor your Pulumi Infrastructure as Code without any disruption to your deployed cloud infrastructure, enabling you to evolve and scale with confidence.&lt;/p&gt;
&lt;p&gt;When refactoring a Pulumi project from a &lt;a href="https://www.pulumi.com/docs/using-pulumi/organizing-projects-stacks/#monolithic"&gt;monolithic&lt;/a&gt; structure to &lt;a href="https://www.pulumi.com/docs/using-pulumi/organizing-projects-stacks/#micro-stacks"&gt;micro stacks&lt;/a&gt;, you might need to move resources between different projects or stacks, without recreating them. While this has been possible with some significant manual effort to hand-modify Pulumi state files (our users came up with &lt;a href="https://github.com/pulumi/pulumi/issues/3389#issuecomment-679020482"&gt;automated solutions&lt;/a&gt; for this!), doing so can be error prone and time consuming. Having a simpler, integrated solution for this problem was a &lt;a href="https://github.com/pulumi/pulumi/issues/3389"&gt;much requested feature&lt;/a&gt;. The new &lt;code&gt;pulumi state move&lt;/code&gt; command, combined with the &lt;a href="https://www.pulumi.com/docs/concepts/options/aliases/"&gt;&lt;code&gt;aliases&lt;/code&gt;&lt;/a&gt; command for refactoring resources within stacks, offers the richest collection of tools for refactoring IaC at scale available in the industry today.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;pulumi state move&lt;/code&gt; command works as follows:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ pulumi state move --help
Move resources from one stack to another
This command can be used to move resources from one stack to another. This can be useful when
splitting a stack into multiple stacks or when merging multiple stacks into one.
Usage:
pulumi state move [flags] &amp;lt;urn&amp;gt;...
Flags:
--dest string The name of the stack to move resources to
-h, --help help for move
--include-parents Include all the parents of the moved resources as well
--source string The name of the stack to move resources from
-y, --yes Automatically approve and perform the move
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Both &lt;code&gt;dest&lt;/code&gt; and &lt;code&gt;source&lt;/code&gt; can be either stacks in the current project, or stacks in a different project, using the fully qualified stack names. Note that this works only for stacks within the same backend, it is currently not possible to move a resource between different backends (though you can &lt;a href="https://www.pulumi.com/docs/iac/concepts/state-and-backends/#migrating-between-state-backends"&gt;move stacks between backends&lt;/a&gt; using other existing tools).&lt;/p&gt;
&lt;p&gt;The resources being moved have to be specified by their full &lt;a href="https://www.pulumi.com/docs/concepts/resources/names/#urns"&gt;URN&lt;/a&gt;, and multiple URNs can be passed at once. For each resource being moved, all the children of that resource will also be moved, and the relationships between all resources being moved is preserved. Resources with other types of dependencies will however not be moved to the target stack by default. The easiest way to get the full URN of the resources is to use &lt;code&gt;pulumi stack --show-urns&lt;/code&gt;. Note that URNs can contain characters that get interpreted by the shell, so it is always a good idea to wrap them in single quotes (&lt;code&gt;'&lt;/code&gt;) when passing them as arguments.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;pulumi state move&lt;/code&gt; command won&amp;rsquo;t modify the code of your program directly, it will only modify the state of the source and destination stacks. So following running the command, you should ensure that you modify both programs to match the changes you have made. This can typically be accomplished by copy/pasting source code for the resources and/or components between the two codebases. Inputs and outputs of resources that were moved may need to be adjusted as part of this process. This can be done either by using &lt;a href="https://www.pulumi.com/docs/concepts/stack/#stackreferences"&gt;stack references&lt;/a&gt;, or recreating the inputs in the program.&lt;/p&gt;
&lt;h2 id="example"&gt;Example&lt;/h2&gt;
&lt;p&gt;To demonstrate how the command works in practice, let&amp;rsquo;s go through an example. Let&amp;rsquo;s assume we have the following program:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomPet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RandomPet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a-random-pet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BucketObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;index.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;: &lt;span class="kt"&gt;b.bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Thanks for using Pulumi!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;parent&lt;/span&gt;: &lt;span class="kt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomSite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BucketObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;random.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;: &lt;span class="kt"&gt;b.bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;content&lt;/span&gt;: &lt;span class="kt"&gt;randomPet.id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;parent&lt;/span&gt;: &lt;span class="kt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We create a bucket, and two bucket objects, both of them having the bucket as their parent. One of the objects has a random pet name as its content. At some point we decide we&amp;rsquo;d rather group all the AWS resources in a separate program, because this one grew too large. We can do that using the &lt;code&gt;pulumi state move&lt;/code&gt; command, and then adjusting the code.&lt;/p&gt;
&lt;p&gt;First we can find out which stacks already exist and we can move the resources to:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pulumi stack ls --all
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME LAST UPDATE RESOURCE COUNT URL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;v-thomas-pulumi-corp/pulumi-demo-move-aws/dev &lt;span class="m"&gt;23&lt;/span&gt; minutes ago &lt;span class="m"&gt;0&lt;/span&gt; &amp;lt;url&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;v-thomas-pulumi-corp/pulumi-demo-move/dev &lt;span class="m"&gt;6&lt;/span&gt; minutes ago &lt;span class="m"&gt;7&lt;/span&gt; &amp;lt;url&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next we can find the URN of the resources using &lt;code&gt;pulumi stack --show-urns&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pulumi stack --show-urns
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Current stack is dev:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Owner: v-thomas-pulumi-corp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Last updated: &lt;span class="m"&gt;13&lt;/span&gt; seconds ago &lt;span class="o"&gt;(&lt;/span&gt;2024-07-23 13:52:17.58884965 +0200 CEST&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pulumi version used: 3.125.1-dev.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Current stack resources &lt;span class="o"&gt;(&lt;/span&gt;7&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TYPE NAME
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pulumi:pulumi:Stack pulumi-demo-move-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ URN: urn:pulumi:dev::pulumi-demo-move::pulumi:pulumi:Stack::pulumi-demo-move-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ random:index/randomPet:RandomPet a-random-pet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ URN: urn:pulumi:dev::pulumi-demo-move::random:index/randomPet:RandomPet::a-random-pet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ aws:s3/bucket:Bucket b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ │ URN: urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket::b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ├─ aws:s3/bucketObject:BucketObject random.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ │ URN: urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket&lt;span class="nv"&gt;$aws&lt;/span&gt;:s3/bucketObject:BucketObject::random.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ aws:s3/bucketObject:BucketObject index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ URN: urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket&lt;span class="nv"&gt;$aws&lt;/span&gt;:s3/bucketObject:BucketObject::index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ pulumi:providers:random default_4_16_3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ URN: urn:pulumi:dev::pulumi-demo-move::pulumi:providers:random::default_4_16_3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ pulumi:providers:aws default_6_45_0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; URN: urn:pulumi:dev::pulumi-demo-move::pulumi:providers:aws::default_6_45_0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next we can actually move the resources. Since we&amp;rsquo;re moving the resources from the currently selected stack, we can omit the &lt;code&gt;--source&lt;/code&gt; argument:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pulumi state move --dest v-thomas-pulumi-corp/pulumi-demo-move-aws/dev &lt;span class="s1"&gt;&amp;#39;urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket::b&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Planning to move the following resources from v-thomas-pulumi-corp/pulumi-demo-move/dev to v-thomas-pulumi-corp/pulumi-demo-move-aws/dev:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket::b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket&lt;span class="nv"&gt;$aws&lt;/span&gt;:s3/bucketObject:BucketObject::random.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket&lt;span class="nv"&gt;$aws&lt;/span&gt;:s3/bucketObject:BucketObject::index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The following resources being moved to v-thomas-pulumi-corp/pulumi-demo-move-aws/dev have dependencies on resources in v-thomas-pulumi-corp/pulumi-demo-move/dev:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket&lt;span class="nv"&gt;$aws&lt;/span&gt;:s3/bucketObject:BucketObject::random.html has a dependency on urn:pulumi:dev::pulumi-demo-move::random:index/randomPet:RandomPet::a-random-pet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - urn:pulumi:dev::pulumi-demo-move::aws:s3/bucket:Bucket&lt;span class="nv"&gt;$aws&lt;/span&gt;:s3/bucketObject:BucketObject::random.html &lt;span class="o"&gt;(&lt;/span&gt;content&lt;span class="o"&gt;)&lt;/span&gt; has a property dependency on urn:pulumi:dev::pulumi-demo-move::random:index/randomPet:RandomPet::a-random-pet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If you go ahead with moving these dependencies, it will be necessary to create the appropriate inputs and outputs in the program &lt;span class="k"&gt;for&lt;/span&gt; the stack the resources are moved to.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do you want to perform this move? yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Successfully moved resources from v-thomas-pulumi-corp/pulumi-demo-move/dev to v-thomas-pulumi-corp/pulumi-demo-move-aws/dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There&amp;rsquo;s a few things worth explaining above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We&amp;rsquo;re moving the resources to a different project, so we need to use the fully qualified stack name. If the resources are being moved between different stacks in the same project, the argument can be only the stack name.&lt;/li&gt;
&lt;li&gt;Before actually moving the resources, the command gives a list of resources that is being moved. Since the bucket objects are children of the bucket, they will be included in the move. However the random pet is not a child resource, so it will not be moved.&lt;/li&gt;
&lt;li&gt;The command also warns us about dependencies that will not be transferred to the destination stack. Since we didn&amp;rsquo;t want to include the pet, but the bucket has a dependency on it, pulumi will warn us about that.&lt;/li&gt;
&lt;li&gt;Before going ahead with the move, we get prompted to confirm whether we want to go ahead with it. In this example we do want to go ahead with the move, so we confirm the move, and the resources will be moved for us.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now that the resources are moved, we need to adjust the program to take advantage of that. The source program will now look as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomPet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RandomPet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a-random-pet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomPetName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;randomPet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Only the random pet remains here. We also export its name, so we can continue using it in the destination program. Meanwhile the destination program is mostly just a copy of the original AWS resources, but there is an important change:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stackRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StackReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`v-thomas-pulumi-com/pulumi-demo-move/dev`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BucketObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;index.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;: &lt;span class="kt"&gt;b.bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Thanks for using Pulumi!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;parent&lt;/span&gt;: &lt;span class="kt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomSite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BucketObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;random.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;: &lt;span class="kt"&gt;b.bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;content&lt;/span&gt;: &lt;span class="kt"&gt;stackRef.getOutput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;randomPetName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;parent&lt;/span&gt;: &lt;span class="kt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note how we now need to specify the content of &lt;code&gt;random.html&lt;/code&gt;, since we no longer have the random pet in the same program. In this case we use a &lt;a href="https://www.pulumi.com/learn/building-with-pulumi/stack-references/"&gt;stack reference&lt;/a&gt; to reference the output from the source program. It is of course up to the user how to re-create the output. It could also come from config, or be hardcoded depending on the use-case.&lt;/p&gt;
&lt;div class="rounded-lg bg-violet-50 p-6 my-8"&gt;
&lt;p class="heading-4 m-0 mb-3 flex items-center gap-1.5"&gt;Refactor your infrastructure safely&lt;/p&gt;
&lt;div class="body-base m-0 text-gray-950"&gt;Use &lt;code&gt;pulumi state move&lt;/code&gt; to split a growing project into focused stacks without recreating your cloud resources. Organize your infrastructure as code and manage every stack in Pulumi Cloud.&lt;/div&gt;
&lt;a href="https://www.pulumi.com/tutorials/move-resources-between-stacks/" data-track="blog-body-cta" class="btn btn-primary mt-4"&gt;
Learn more
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--regular size-4" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-arrow-right-regular"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;As always, we would love to hear your feedback in the &lt;a href="https://www.pulumi.com/community/"&gt;community slack&lt;/a&gt;. If you encounter any issues with the command, please open an &lt;a href="https://github.com/pulumi/pulumi/issues"&gt;issue&lt;/a&gt;.&lt;/p&gt;</description><author>Thomas Gummerer</author><category>announcements</category><category>cli</category></item><item><title>Celebrating 20,000 Stars: A Milestone for the Pulumi Community</title><link>https://www.pulumi.com/blog/celebrating-20k-stars/</link><pubDate>Thu, 23 May 2024 18:48:50 +0000</pubDate><guid>https://www.pulumi.com/blog/celebrating-20k-stars/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/celebrating-20k-stars/index.png" /&gt;
&lt;p&gt;Today, we&amp;rsquo;re excited to announce that the &lt;a href="https://github.com/pulumi/pulumi"&gt;Pulumi open source project&lt;/a&gt; has crossed the incredible milestone of 20,000 stars on GitHub. 🎉 This is a huge achievement, and it wouldn&amp;rsquo;t have been possible without y&amp;rsquo;all - our incredible global community of developers.&lt;/p&gt;
&lt;p&gt;Since its inception, Pulumi&amp;rsquo;s vision has been rooted in enabling teams to build and manage modern cloud infrastructure using familiar languages and tools. Over the years, your feedback, contributions, and passion have been invaluable in shaping Pulumi into what it is today. Seeing so many developers embrace our modern approach to cloud infrastructure management is really exciting. We are deeply grateful for the trust y&amp;rsquo;all have placed in us, and we will continue to push the boundaries in how teams manage cloud infrastructure.&lt;/p&gt;
&lt;h2 id="fueled-by-community-contributions"&gt;Fueled by Community Contributions&lt;/h2&gt;
&lt;p&gt;Over the past 7 years, the Pulumi project has had 4,400+ contributors that made 75,000+ pull requests. Pulumi is depended upon by 6,600+ GitHub projects and supports over 160+ packages in the registry. It has been downloaded more than 100 million times by 170,000+ developers. In just the last month, Pulumi has been the most active Infrastructure as Code (IaC) open-source project compared to Terraform or OpenTofu. Pulumi has had 117 merged pull requests (67 TF, 83 OpenTofu), 82 closed issues (49 TF, 54 OpenTofu), and 53 new issues (27 TF, 29, OpenTofu).&lt;/p&gt;
&lt;h2 id="notable-features-and-milestones"&gt;Notable Features and Milestones&lt;/h2&gt;
&lt;p&gt;We also want to take this time to reflect on some of the notable features we shipped that got us here. The &lt;a href="https://github.com/orgs/pulumi/projects/44/views/1"&gt;Pulumi roadmap&lt;/a&gt; is public so we can be transparent about the features being worked on and to encourage deeper collaboration with the community. Here are some of the most popular features that were added to Pulumi over the last 7 years.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mar 2017 - Pulumi founded&lt;/li&gt;
&lt;li&gt;Jun 2018 - &lt;a href="https://www.pulumi.com/blog/introducing-pulumi-a-cloud-development-platform/"&gt;Pulumi open source project&lt;/a&gt; launched&lt;/li&gt;
&lt;li&gt;Aug 2018 - Kubernetes native provider&lt;/li&gt;
&lt;li&gt;Oct 2018 - Series A fundraise&lt;/li&gt;
&lt;li&gt;Oct 2018 - Pulumi Cloud launched&lt;/li&gt;
&lt;li&gt;Nov 2018 - &lt;a href="https://github.com/pulumi/pulumi/issues/109"&gt;Stack Reference&lt;/a&gt; to allow access of outputs of one stack from another&lt;/li&gt;
&lt;li&gt;Jun 2019 - &lt;a href="https://www.pulumi.com/blog/introducing-pulumi-crosswalk-for-aws-the-easiest-way-to-aws/"&gt;AWSX&lt;/a&gt; as higher-level components for the AWS platform&lt;/li&gt;
&lt;li&gt;Sep 2019 - &lt;a href="https://www.pulumi.com/blog/pulumi-1-0/"&gt;Pulumi 1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sep 2019 - &lt;a href="https://github.com/pulumi/pulumi/commit/9374c374c3d3a96fc2ae1e715da511b4125b6628"&gt;Transformations&lt;/a&gt; to modify the properties and resource options for child resource of a component or stack&lt;/li&gt;
&lt;li&gt;Nov 2019 - .&lt;a href="https://github.com/pulumi/pulumi/pull/3399"&gt;NET support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dec 2019 - &lt;a href="https://www.pulumi.com/blog/announcing-crossguard-preview/"&gt;CrossGuard&lt;/a&gt; for policy as code&lt;/li&gt;
&lt;li&gt;Apr 2020 - &lt;a href="https://www.pulumi.com/blog/pulumi-2-0/"&gt;Pulumi 2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;May 2020 - &lt;a href="https://www.pulumi.com/blog/go-support-pulumi-2-0/"&gt;Golang support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sep 2020 - &lt;a href="https://www.pulumi.com/blog/announcing-nextgen-azure-provider/"&gt;Azure Native Provider&lt;/a&gt; for same day access to new Azure features&lt;/li&gt;
&lt;li&gt;Oct 2020 - Series B fundraise&lt;/li&gt;
&lt;li&gt;Oct 2020 - &lt;a href="https://github.com/pulumi/pulumi/issues/3901#issuecomment-685803282"&gt;Automation API&lt;/a&gt; exposes IaC through a programmatic interface&lt;/li&gt;
&lt;li&gt;Oct 2020 - &lt;a href="https://github.com/pulumi/pulumi/pull/4765"&gt;Import command&lt;/a&gt; to import resources not managed by Pulumi into a stack&lt;/li&gt;
&lt;li&gt;Apr 2021 - First PulumiUP&lt;/li&gt;
&lt;li&gt;Apr 2021 - &lt;a href="https://www.pulumi.com/blog/pulumi-3-0/"&gt;Pulumi 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Apr 2021 - &lt;a href="https://www.pulumi.com/blog/pulumiup-pulumi-packages-multi-language-components/"&gt;Pulumi Packages&lt;/a&gt; to provide multi-language support for components and providers&lt;/li&gt;
&lt;li&gt;Oct 2021 - &lt;a href="https://github.com/pulumi/pulumi-kubernetes-operator/issues/215"&gt;Pulumi Kubernetes Operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;May 2022 - &lt;a href="https://github.com/pulumi/pulumi/issues/1539"&gt;Java support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nov 2022 - &lt;a href="https://www.pulumi.com/blog/nov-2022-launches/"&gt;Pulumi Deployments&lt;/a&gt; to automate infrastructure deployments&lt;/li&gt;
&lt;li&gt;Nov 2022 - &lt;a href="https://www.pulumi.com/blog/pulumi-yaml-ga/"&gt;YAML support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dec 2022 - &lt;a href="https://github.com/pulumi/pulumi/issues/2307"&gt;Hierarchical config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Apr 2023 - &lt;a href="https://www.pulumi.com/blog/pulumi-insights/"&gt;Pulumi Insights&lt;/a&gt; for intelligence, search, and analytics over any infrastructure&lt;/li&gt;
&lt;li&gt;Apr 2023 - First Pulumi User Group (PUG)&lt;/li&gt;
&lt;li&gt;Jul 2023 - &lt;a href="https://github.com/pulumi/pulumi-terraform-bridge/issues/1273"&gt;Terraform conversion&lt;/a&gt; improvement as an easy way to migrate TF to Pulumi&lt;/li&gt;
&lt;li&gt;Sep 2023 - &lt;a href="https://www.pulumi.com/blog/pulumi-insights-ai-cli/"&gt;Pulumi AI&lt;/a&gt; added to &lt;code&gt;pulumi&lt;/code&gt; CLI&lt;/li&gt;
&lt;li&gt;Sep 2023 - &lt;a href="https://www.pulumi.com/blog/go-generics-preview/"&gt;Go generics&lt;/a&gt; support added&lt;/li&gt;
&lt;li&gt;Oct 2023 - Series C fundraise&lt;/li&gt;
&lt;li&gt;Oct 2023 - &lt;a href="https://www.pulumi.com/blog/environments-secrets-configurations-management/"&gt;Pulumi ESC&lt;/a&gt; to manage secrets and configuration complexity&lt;/li&gt;
&lt;li&gt;Oct 2023 - &lt;a href="https://www.pulumi.com/blog/developer-portal-platform-teams/"&gt;Pulumi for Platform Teams&lt;/a&gt; through developer portals and more&lt;/li&gt;
&lt;li&gt;Apr 2024 - &lt;a href="https://www.pulumi.com/blog/infrastructure-lifecycle-management/"&gt;Drift detection, TTL stacks, and scheduled deployments&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also shipped many other features that didn’t make this post, so please see our &lt;a href="https://www.pulumi.com/blog/"&gt;blog&lt;/a&gt; for all those details.&lt;/p&gt;
&lt;h2 id="a-heartfelt-thank-you"&gt;A Heartfelt Thank You&lt;/h2&gt;
&lt;p&gt;We are immensely grateful to our community for helping us reach this incredible milestone and making Pulumi a thriving ecosystem. Your contributions, feedback, and support have been invaluable in shaping Pulumi&amp;rsquo;s journey. We also want to thank the &lt;a href="https://www.pulumi.com/community/puluminaries/"&gt;Puluminaries&lt;/a&gt; - our community leaders and advocates whose contributions have been pivotal to our success.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re passionate about cloud infrastructure, consider &lt;a href="mailto:da@pulumi.com"&gt;joining the Puluminaries&lt;/a&gt;. As a Puluminary, you’ll gain direct access to our engineering team, preview roadmaps, and help contribute to code, content, and community support.&lt;/p&gt;
&lt;p&gt;We look forward to continuing our innovations to democratize the cloud and empower developers worldwide. We encourage you to join our &lt;a href="https://slack.pulumi.com/"&gt;Slack community&lt;/a&gt; to engage with fellow developers and be part of the ongoing conversation about the future of how teams manage cloud infrastructure.&lt;/p&gt;
&lt;p&gt;Thank y&amp;rsquo;all for being part of this journey. Here’s to the next 20,000 stars and beyond!&lt;/p&gt;</description><author>Aaron Kao</author><category>announcements</category><category>open-source</category></item><item><title>Pulumi + Azure Deployment Environments: Better Together for Enterprise Developers</title><link>https://www.pulumi.com/blog/azure-deployment-environments/</link><pubDate>Tue, 21 May 2024 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/azure-deployment-environments/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/azure-deployment-environments/index.png" /&gt;
&lt;p&gt;We are excited to announce the support for authoring &lt;a href="https://learn.microsoft.com/en-us/azure/deployment-environments/"&gt;Azure Deployment Environments (ADE)&lt;/a&gt; environment definitions in Pulumi Infrastructure as Code (IaC) empowering developers to self-serve app infrastructure required to deploy and test cloud-based applications. With Pulumi support, you can now manage your Azure resources in these environments using the same familiar programming model and the full power of our IaC platform.&lt;/p&gt;
&lt;p&gt;Azure Deployment Environments is a service that enables developers to quickly spin up app infrastructure with project-based templates, all while maintaining centralized management and governance. Azure Deployment Environments also provides developers with an intuitive self-service portal where they can choose a curated, project-specific template to deploy new environments with just a few clicks. Thanks to the &lt;a href="https://learn.microsoft.com/en-us/azure/deployment-environments/how-to-configure-extensibility-generic-container-image"&gt;ADE extensibility model&lt;/a&gt;, you can now turn any Pulumi program into an environment definition and use it directly to securely provision application infrastructure in Azure. This post will guide you through creating ADE templates and deploying resources from the Microsoft developer portal.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/azure-deployment-environments/devportal.png" alt="Developer Portal"&gt;&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How It Works&lt;/h2&gt;
&lt;p&gt;Azure Deployment Environments natively supports the Azure Resource Manager (ARM) and Bicep IaC frameworks. In addition, ADE provides an extensibility model that enables customers to create custom container images to author environment definitions.&lt;/p&gt;
&lt;p&gt;The Azure Deployment Environments and Pulumi teams collaborated to publish a standard container image that our joint customers can use directly to run Pulumi programs in ADE: &lt;a href="https://hub.docker.com/r/pulumi/azure-deployment-environments"&gt;&lt;code&gt;pulumi/azure-deployment-environments&lt;/code&gt;&lt;/a&gt;. The image leverages ADE’s extensibility model to run Pulumi programs in the container.&lt;/p&gt;
&lt;p&gt;When used with Pulumi, each environment definition consists of two components:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;An &lt;code&gt;environment.yaml&lt;/code&gt; file that describes the environment by referencing the Pulumi Docker image and pointing to a Pulumi program. Here is an example of such a file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;MyPulumiEnvironment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.0.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;My First Pulumi-Enabled Environment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deploys a Pulumi stack into ADE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;runner&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pulumi/azure-deployment-environments:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;templatePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pulumi.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A Pulumi program that defines the resources to deploy. This program can use any of the &lt;a href="https://www.pulumi.com/docs/clouds/azure/"&gt;Pulumi Azure providers&lt;/a&gt; to define resources in the environment. Here is a very simple Pulumi program defined in YAML:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ade-pulumi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;My first Pulumi program in ADE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;resource-group-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;string&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;sa&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;azure-native:storage:StorageAccount&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Storage&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resourceGroupName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${resource-group-name}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Standard_LRS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is all you need to define a Pulumi environment in ADE. If you prefer to use a programming language like C#, TypeScript, Python, or Go, you will also need to add the code next to the &lt;code&gt;Pulumi.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Once the environment definition is added to the catalog, a user simply chooses an applicable environment in their developer portal. After accepting parameter values, ADE will run the Pulumi program in the container to provision Azure resources. In the case of the above program, it will create a new Storage Account in the environment, and the user will be able to use the resources once they are provisioned by Pulumi.&lt;/p&gt;
&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;To get started, you must have the &lt;strong&gt;Azure Deployment Environments&lt;/strong&gt; service configured. You can manually create one in the Azure Portal by following the &lt;a href="https://learn.microsoft.com/en-us/azure/deployment-environments/quickstart-create-and-configure-devcenter"&gt;instructions&lt;/a&gt; or using our &lt;a href="https://github.com/pulumi/azure-deployment-environments/tree/main/Provisioning/ade"&gt;sample Pulumi program&lt;/a&gt; to provision all the required resources.&lt;/p&gt;
&lt;p&gt;Once you have an ADE instance, you can start authoring your &lt;strong&gt;environment definitions&lt;/strong&gt;. You can use the &lt;a href="https://github.com/pulumi/azure-deployment-environments/tree/main/Environments"&gt;Pulumi Azure Deployment Environments samples&lt;/a&gt; as a starting point. The folder contains four simple Pulumi programs in four different languages, each creating a Storage Account in the environment. The programs also show how to use parameters to integrate with ADE’s configuration system.&lt;/p&gt;
&lt;p&gt;Once you have the definitions, you will &lt;strong&gt;publish them to a GitHub or Azure DevOps repository&lt;/strong&gt; and &lt;a href="https://learn.microsoft.com/en-us/azure/deployment-environments/how-to-configure-catalog?tabs=DevOpsRepoMSI"&gt;&lt;strong&gt;attach the repository as a Catalog in Azure Deployment Environments&lt;/strong&gt;&lt;/a&gt;. You can do so manually using the Azure Portal or configure it within your Pulumi project, as illustrated in &lt;a href="https://github.com/pulumi/azure-deployment-environments/blob/1a9633cd31977be2b78cd727b21225ff7b48913d/Provisioning/ade/index.ts#L132-L141"&gt;our sample&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, &lt;strong&gt;navigate to the &lt;a href="https://devportal.microsoft.com"&gt;Microsoft developer portal&lt;/a&gt;&lt;/strong&gt; to create a new environment. You will see the list of available templates, including the ones you just published.&lt;/p&gt;
&lt;h2 id="bring-a-custom-container-image"&gt;Bring a Custom Container Image&lt;/h2&gt;
&lt;p&gt;The Pulumi container image &lt;a href="https://hub.docker.com/r/pulumi/azure-deployment-environments"&gt;&lt;code&gt;pulumi/azure-deployment-environments&lt;/code&gt;&lt;/a&gt; is a great starting point for your environment definitions. However, if you want to customize the behavior to your needs, you can also bring your own container image to run Pulumi programs in ADE. To do so, refer to the &lt;a href="https://aka.ms/ade/pulumi-docs"&gt;Configure a container image to execute deployments with Pulumi&lt;/a&gt; article on Microsoft Learn.&lt;/p&gt;
&lt;p&gt;One benefit of using a custom image is the ability to provide a Pulumi Cloud access token to the image via the &lt;code&gt;PULUMI_ACCESS_TOKEN&lt;/code&gt; environment variable. This allows the image to authenticate with the Pulumi Cloud backend without requiring additional configuration. Pulumi Cloud securely encrypts and stores your infrastructure state, manages secrets, provides search and clear visibility across all your cloud resources, runs remote deployments, integrates with CI/CD pipelines, detects configuration drift, and enables centralized policy enforcement. Additional features such as RBAC and audit logging enable your team to collaborate easily, ship faster, more securely and with confidence for every deployment.&lt;/p&gt;
&lt;p&gt;If you have a suggestion for improving the standard Pulumi container image, please &lt;a href="https://github.com/pulumi/azure-deployment-environments/issues/new"&gt;open an issue&lt;/a&gt; on our GitHub repository. We are always looking for ways to improve the experience for our Azure users.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Together with the Azure Deployment Environments team, Pulumi is excited to enable our shared customers to take advantage of the ADE extensibility model, Pulumi IaC platform, and empower developers with self-service of Azure App infrastructure, within enterprise guardrails. We hope that this new capability will help you streamline your development processes and make it easier for your teams to provision new environments in Azure quickly.&lt;/p&gt;
&lt;p&gt;If you want to learn more:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Attend our workshop &lt;a href="https://www.pulumi.com/resources/platform-engineering-with-azure-pulumi/"&gt;Platform Engineering with Microsoft Azure and Pulumi&lt;/a&gt; that takes place on June 20&lt;/li&gt;
&lt;li&gt;Read the &lt;a href="https://aka.ms/build24/ade-blog"&gt;announcement on the Azure blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Explore the code at &lt;a href="https://github.com/pulumi/azure-deployment-environments"&gt;&lt;code&gt;pulumi/azure-deployment-environments&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Mikhail Shilkov</author><category>azure</category><category>announcements</category><category>platform-engineering</category></item><item><title>Continue on Error in the Pulumi CLI</title><link>https://www.pulumi.com/blog/continue-on-error/</link><pubDate>Thu, 09 May 2024 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/continue-on-error/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/continue-on-error/index.png" /&gt;
&lt;p&gt;When managing many resources with Pulumi, a &lt;code&gt;pulumi up&lt;/code&gt; or &lt;code&gt;pulumi destroy&lt;/code&gt; can lead to a complex graph of resource operations being performed as concurrently as possible relative to the dependencies in your program. If one of those operations fails, you may have noticed that Pulumi takes the most conservative approach, letting already in-flight operations complete, but not starting any new operations. Most often, that&amp;rsquo;s what you want &amp;ndash; there might be no point in bringing up more infrastructure if a resource fails.&lt;/p&gt;
&lt;p&gt;However, in some cases it can be useful to keep going to try to bring resources that are independent from the failed one into the requested state, be that resources being created or destroyed. For example, when doing a &lt;code&gt;pulumi destroy&lt;/code&gt;, you may want to have Pulumi destroy as many resources as it can, without stopping when the first error occurs.&lt;/p&gt;
&lt;p&gt;You can now do exactly that with the new &lt;code&gt;--continue-on-error&lt;/code&gt; flag for &lt;code&gt;pulumi up&lt;/code&gt; and &lt;code&gt;pulumi destroy&lt;/code&gt;.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Using pulumi new with the new AI option"
autoplay muted playsinline
loop &gt;
&lt;source src="coe.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Using &lt;code&gt;--continue-on-error&lt;/code&gt; means that resources that are not in the same dependency tree as the failed resource will still continue to be updated or destroyed, as they would normally. To make sure dependencies are still correctly respected, resources that depend on a successful update or destroy of the failed resource will not continue to be updated. This means that this flag is always safe to use, as Pulumi will continue to manage the failed resources, and they can be updated or destroyed in subsequent runs of Pulumi.&lt;/p&gt;
&lt;p&gt;When the execution finishes, Pulumi will report the resource failures as you would currently expect from a failure, and exit with a non-zero exit code. This indicates that even though we continued to update resources independent from the failed one, there was an error during the deployment.&lt;/p&gt;
&lt;h2 id="what-do-i-need-to-do"&gt;What do I need to do?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pulumi destroy --continue-on-error&lt;/code&gt; was introduced in Pulumi v3.112.0. After upgrading to this version or later of the Pulumi CLI you can go ahead and use this feature.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pulumi up --continue-on-error&lt;/code&gt; was introduced in Pulumi v3.114.0. However, it also requires updated language SDKs to work best. Since we now have resources that fail to create, but the Pulumi program continues to execute, the SDK has to deal with the outputs of these resources. Currently during &lt;code&gt;pulumi up&lt;/code&gt; there are no &amp;ldquo;unknown&amp;rdquo; values expected by the SDK. Since we may now have a failed resource, the outputs for that resource might still be unknown, and the SDK will have to deal with that. This means that to fully support this feature some SDK changes were necessary. So in addition to upgrading the Pulumi CLI to v3.114.0, you will also have to upgrade the Pulumi SDK to v3.114.0 or later for Go, Python and Node.js, and 3.63.0 or later for .NET. For Pulumi YAML programs, you&amp;rsquo;ll need to use v3.115.0 or later of the Pulumi CLI.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;--continue-on-error&lt;/code&gt; is used with older SDK versions, the Pulumi engine will return an error to your program, which then will need to be handled, or the rest of the program might not be executed, and thus some resources may not be updated.&lt;/p&gt;
&lt;p&gt;This feature was a &lt;a href="https://github.com/pulumi/pulumi/issues/3304"&gt;highly requested feature&lt;/a&gt; in the Pulumi open source project, and we&amp;rsquo;re constantly working to address these highly requested features across the open source projects, so jump in and give features you&amp;rsquo;d like to see us add a 👍.&lt;/p&gt;
&lt;p&gt;Give &lt;code&gt;--continue-on-error&lt;/code&gt; a try and &lt;a href="https://slack.pulumi.com"&gt;let us know&lt;/a&gt; what you think!&lt;/p&gt;</description><author>Thomas Gummerer</author><category>error-handling</category><category>announcements</category></item><item><title>A recap of October 2023 - A big month at Pulumi!</title><link>https://www.pulumi.com/blog/october-23-roundup/</link><pubDate>Mon, 16 Oct 2023 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/october-23-roundup/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/october-23-roundup/index.png" /&gt;
&lt;p&gt;We&amp;rsquo;ve been hard at work and are having the biggest month ever at Pulumi. That includes two new products, Pulumi ESC and Pulumi for Platform Teams, and news of our Series C. That&amp;rsquo;s a boatload of fresh infrastructure as code innovation. And October isn&amp;rsquo;t even over yet!&lt;/p&gt;
&lt;h2 id="two-new-products"&gt;Two New Products!&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a recap of the news:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/esc"&gt;&lt;strong&gt;Pulumi ESC&lt;/strong&gt;&lt;/a&gt; is a new approach to cloud environments, secrets, and configuration. It works for applications and infrastructure and cuts down on sprawl while making everything more secure. This tech spans developer desktop scenarios and scales up beyond 1,000s of environments. Read the &lt;a href="https://www.pulumi.com/product/esc"&gt;overview&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/environments-secrets-configurations-management"&gt;blog&lt;/a&gt;, or &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/esc"&gt;get started with the docs&lt;/a&gt;. Oh, and don&amp;rsquo;t forget to &lt;a href="https://github.com/pulumi/esc"&gt;star the GitHub repo&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/internal-developer-platforms"&gt;&lt;strong&gt;Pulumi for Platform Teams&lt;/strong&gt;&lt;/a&gt; takes what we’ve learned working with over 2,000 customers and 150,000 end users, many building internal developer platforms, and provides common patterns and practices right out of the box. This includes a developer portal, a Backstage plugin, advanced deployment workflows, and the ability to report on and automatically remediate compliance policies. Read the &lt;a href="https://www.pulumi.com/product/internal-developer-platforms"&gt;overview&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/building-developer-portals"&gt;blog&lt;/a&gt;, or &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/developer-portals"&gt;get started with the docs&lt;/a&gt;.&lt;/p&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;strong&gt;Can we help you build an internal cloud platform?&lt;/strong&gt; Although the new capabilities are easy to use, we&amp;rsquo;re happy to give you a demo, discuss architecture, or even help you build out your internal platform. &lt;a href="https://www.pulumi.com/contact"&gt;Get in touch&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;These launches build on our &amp;ldquo;multi-product&amp;rdquo; momentum from our &lt;a href="https://www.pulumi.com/product/pulumi-insights"&gt;&lt;strong&gt;Pulumi Insights&lt;/strong&gt;&lt;/a&gt; product launch earlier this year. Insights applies the power of generative AI to all things cloud giving you an intelligent interface to your infrastructure. We are taking infrastructure as code to many new places. We&amp;rsquo;ve processed over 130,000 prompts since launch &amp;mdash; it&amp;rsquo;s free to use, so &lt;a href="https://www.pulumi.com/ai"&gt;give it a try today&lt;/a&gt;!&lt;/p&gt;
&lt;h2 id="series-c-fundraise"&gt;Series C Fundraise&lt;/h2&gt;
&lt;p&gt;Last but not least, we announced our &lt;a href="https://www.pulumi.com/blog/series-c"&gt;&lt;strong&gt;Series C&lt;/strong&gt;&lt;/a&gt;. This fundraise will enable us to keep building an incredible team and reimagining how developers and infrastructure teams program the cloud. We’re hiring and have endless fun hard/problems ahead &lt;a href="https://www.pulumi.com/careers"&gt;check out and apply to the open positions here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="let-us-know-what-you-think"&gt;Let Us Know What You Think&lt;/h2&gt;
&lt;p&gt;We can&amp;rsquo;t wait to hear what you think. &lt;a href="https://www.pulumi.com/start"&gt;Get Started with Pulumi&lt;/a&gt;, &lt;a href="https://slack.pulumi.com"&gt;join our Community Slack&lt;/a&gt;, and let us know how you&amp;rsquo;re using these new capabilities and any feedback you have.&lt;/p&gt;
&lt;p&gt;From the entire Pulumi team, thank you!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/series-c/pulumi-team.png" alt="Pulumi Team"&gt;&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Building the Best Infrastructure as Code with $41M Series C Funding</title><link>https://www.pulumi.com/blog/series-c/</link><pubDate>Tue, 03 Oct 2023 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/series-c/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/series-c/index.png" /&gt;
&lt;p&gt;Today we announced a $41M Series C fundraise from Madrona Ventures, NEA, Tola Capital, and Strike Capital. These new funds will help us accelerate momentum, keep innovating with the best infrastructure as code technology on the market, and expand into new product areas to solve even more of our customers’ most pressing cloud challenges. We’ve had a year of exciting milestones – surpassing 150,000 end users in our community, 2,000 customers, and 100 employees – and look forward to many more to come. The future is full of cloud, and yet incredibly bright!&lt;/p&gt;
&lt;h2 id="incredible-momentum"&gt;Incredible momentum&lt;/h2&gt;
&lt;p&gt;Over 2,000 customers have chosen Pulumi Cloud for their infrastructure as code needs. Many more companies build on our open source, including over half of the Fortune 50. And we estimate that our community recently surpassed 150,000 happy and productive end users.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/series-c/pulumi-powers-customers.png" alt="Pulumi Powers AI and Platform Teams"&gt;&lt;/p&gt;
&lt;p&gt;This year we made the top 5% of the &lt;a href="https://www.inc.com/inc5000"&gt;Inc. 5000&lt;/a&gt; Fastest Growing Companies in America and were listed in &lt;a href="https://www.redpoint.com/infrared/100/"&gt;Redpoint’s InfraRed 100&lt;/a&gt;, to highlight transformative cloud infrastructure companies. This momentum will continue to propel us even further on our growth trajectory.&lt;/p&gt;
&lt;h2 id="the-best-infrastructure-as-code"&gt;The best infrastructure as code&lt;/h2&gt;
&lt;p&gt;Why have we seen such incredible growth? It’s a combination of things: an amazing, multi-billion-dollar fast-growing market – infrastructure as code – plus a product that is widely recognized as the best product and clearly leading the innovation agenda in that market.&lt;/p&gt;
&lt;p&gt;Pulumi’s unique approach to infrastructure as code is to stand on the shoulders of giants by letting you use any language. At the time we began, this was not a popular idea! In fact, a good friend of mine, who is a legend in the cloud native space, bluntly told me, “YAML is good enough – infrastructure as code doesn’t need that good of a developer experience.” We disagreed.&lt;/p&gt;
&lt;p&gt;Our thesis was that we went through a one way door with cloud software. We have entered into the era of real distributed applications. And that is super exciting! It means all developers are building cloud software and that infrastructure is central to innovating in the modern cloud.&lt;/p&gt;
&lt;p&gt;By applying the industry’s best languages to the infrastructure as code space, we gave the cloud a programmable surface area. We can now treat cloud building blocks as programmable objects and build bigger things out of smaller things. The cloud is the new operating system and this foundational technology lays the groundwork for us to realize our long-term vision.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/series-c/pulumi-iac.png" alt="Pulumi Infrastructure as Code"&gt;&lt;/p&gt;
&lt;p&gt;Fast forward 7 years, and Pulumi is the fastest growing infrastructure as code product and has inspired others, fundamentally reshaping the landscape. Our end users and customers tell us all the time they feel not just 10% more productive, but 10x more productive, thanks to rich, expressive languages, great tools and editors, sharing and reuse, and because infrastructure as code in any language also means infrastructure as code for anybody in the whole team.&lt;/p&gt;
&lt;p&gt;We also bet big on open source. Open source is in our entire team’s DNA. We honestly felt it was table stakes that something so fundamental to how we write code and build platforms be open source. This builds trust, helps to foster an ecosystem and community of openness, and enables new scenarios that we couldn’t have even imagined. We paired our open source technology with a great Pulumi Cloud SaaS that 2/3rds of our end users elect to use simply because it’s the easiest, most reliable, and most secure way to adopt Pulumi at scale. Because we were very thoughtful, intentional, and smart about the relationship between our open source and commercial products, we can stand confidently by our open source heritage forever.&lt;/p&gt;
&lt;h2 id="building-a-platform"&gt;Building a platform&lt;/h2&gt;
&lt;p&gt;Over time, we have expanded beyond infrastructure as code, by solving one problem after another that we see our customers facing. Let there be no question, we are still very much all about infrastructure as code! But as we have worked with our over 2,000 customers, we recognize they have other challenges in areas adjacent to infrastructure as code.&lt;/p&gt;
&lt;p&gt;This began with &lt;a href="https://www.pulumi.com/crossguard"&gt;&lt;strong&gt;Policy as Code&lt;/strong&gt;&lt;/a&gt;. Policy as code allows you to verify that infrastructure state follows cost, compliance, security, reliability, or best practice guidelines. I ran static analysis efforts at Microsoft for many years during the Trustworthy Computing era and saw just how important and powerful enforcing policy as close to development time as possible is. We are still very early days here but we built Pulumi’s engine to support policy as code right from the outset.&lt;/p&gt;
&lt;p&gt;Next came many obvious adjacencies to the infrastructure as code workflow, including &lt;a href="https://www.pulumi.com/docs/iac/concepts/testing"&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/iac/using-pulumi/continuous-delivery"&gt;&lt;strong&gt;CI/CD Automation&lt;/strong&gt;&lt;/a&gt;. Thanks to our choice of general purpose languages, we decided to tap into software engineering practices too; we sometimes call this “infrastructure as software” because it goes well beyond “just code.” We then built the &lt;a href="https://www.pulumi.com/automation"&gt;&lt;strong&gt;Automation API&lt;/strong&gt;&lt;/a&gt; to answer the question of, what if infrastructure as code were a library you could link with, and not just a command line interface? The things our customers have built with these capabilities have been mind blowing: self-serve portals, custom CLIs and frameworks, and even entire SaaS products.&lt;/p&gt;
&lt;p&gt;Last year, we then began branching out into entirely new product lines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/pulumi-deployments"&gt;&lt;strong&gt;Pulumi Deployments&lt;/strong&gt;&lt;/a&gt; delivers server-side orchestration of deployment workflows. We frequently heard from customers that no product on the market solved this for them. You can point Pulumi Cloud at a Git repo and get automatic Pull Request validations and deployments upon merges. Or do one-click deployments straight from the Pulumi Cloud console. Pulumi Deployments is highly extensible with a REST API unlocks a world of possibilities for platform teams, including but not limited to drift detection and remediation, blue/green and multi-region rollouts, dependent stack updates, ephemeral stacks, and automatic infrastructure cleanup.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/pulumi-insights"&gt;&lt;strong&gt;Pulumi Insights&lt;/strong&gt;&lt;/a&gt; provides search, analytics, and intelligence over your infrastructure, across any clouds. Our customers frequently told us they had trouble taming, or even getting visibility into, cloud chaos. The headline feature here is our Pulumi AI coding assistant: if you can dream up an infrastructure as code configuration, it can build it for you in any language. Pulumi AI quickly surpassed 100K prompts within its first couple of months. Insights also enables you to search over any infrastructure anywhere, helping you gain understanding over your team’s use of cloud infrastructure, analyze it further, or even just to find that needle in the haystack.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pulumi is gradually shifting from a single infrastructure as code product to a complete enterprise platform. As we build out the platform, we do so in a highly integrated way. Pulumi Cloud pulls it all together with a unified data model, REST API, identity model, and AI model. These are not a loosely related assortment of technologies – they are deeply integrated, and can increasingly be adopted independently, but are better together even more than the sum of the parts.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/series-c/pulumi-platform.png" alt="Pulumi Platform"&gt;&lt;/p&gt;
&lt;h2 id="whats-next-for-pulumi"&gt;What’s next for Pulumi&lt;/h2&gt;
&lt;p&gt;It is still day one for us and we’re only just getting started. Our ambitious mission is to democratize the cloud so that every builder, no matter their background, can make the most out of the cloud. And although infrastructure as code in any language makes a giant step in that direction, there is so much more to be done. If the cloud is the new operating system, there are entire application and security models still missing. For our customers, the cloud is a competitive advantage and they’re always wanting to do more, and to do it faster, with the cloud.&lt;/p&gt;
&lt;p&gt;As we look to the future, there are several key themes we are excited to tackle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The best infrastructure as code.&lt;/strong&gt; We hear all the time from users and customers that they think Pulumi is the best infrastructure as code technology on the market. We want to keep it that way. Best means the most productive, the most fun, the most flexible, and the most enterprise grade. We will continue investing substantially into making this technology even better and more accessible while also growing our community.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reimagined cloud developer experiences.&lt;/strong&gt; The modern cloud’s capabilities are endless–and yet that can be daunting. For engineers simply wanting to build a modern cloud application or architecture, the concept count and level of abstraction demanded by the cloud are still often an order of magnitude more complex than they should be. We will continue leveraging our infrastructure as code foundations to deliver revolutionary new developer experiences that make us more productive and impactful in the cloud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security and best practices by-construction.&lt;/strong&gt; Simply put, security should not be an afterthought. No best practice should be. Yet for most cloud platform teams, both still are. We have chipped away at this problem but there is more to be done. Pulumi’s approach enables us to apply tried and true techniques from the programming languages domain to ensure that applications and infrastructure are increasingly correct by-construction. We need to shift from finding things after-the-fact towards stopping security issues dead in their tracks before they ever make their way to production.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI powers the next wave of cloud innovation.&lt;/strong&gt; We are big believers in AI. We have already extended large models to deeply understand the cloud infrastructure domain and have realized immense benefits of doing so. We have begun to add AI to our product in areas that improve the user experience or deliver unique capabilities. As we go forward, just as we always relentlessly pursue the best developer experiences for our end users, we expect to ask ourselves, “How can this be better in an AI-first world?”&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, the new Series C funds will allow us to double down on innovation that is already working, while breaking new ground in pursuit of our mission. Most importantly, we look forward to working with you, our end users and community, to build the best product experiences that solve your hardest and most pressing problems.&lt;/p&gt;
&lt;h2 id="thank-you"&gt;Thank you&lt;/h2&gt;
&lt;p&gt;It is a privilege to count over 2,000 customers, and 150,000 end users, as part of our community. I still remember coding furiously in my basement with Eric and Luke, and going live with our first customer, like it was yesterday. We are just as passionate about our original dream today as we were back then – perhaps even more so, since it is coming true!&lt;/p&gt;
&lt;p&gt;We are also so lucky to have such incredible investors at Madrona, NEA, Tola, and Strike who believe in the Pulumi dream too, and are helping us to build an iconic company.&lt;/p&gt;
&lt;p&gt;To our end users, we would not be here if it weren’t for you. Whether you are a community member, an enterprise customer, or anywhere in between, your continued feedback, success stories, and belief in the Pulumi vision keep us going and make it all worthwhile.&lt;/p&gt;
&lt;p&gt;From the entire Pulumi team, thank you!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/series-c/pulumi-team.png" alt="Pulumi Team"&gt;&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Announcing the Speaker Lineup for PulumiUP 2023</title><link>https://www.pulumi.com/blog/announcing-speaker-lineup-pulumiup-2023/</link><pubDate>Wed, 24 May 2023 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/announcing-speaker-lineup-pulumiup-2023/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/announcing-speaker-lineup-pulumiup-2023/index.png" /&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/pulumi-up/"&gt;PulumiUP&lt;/a&gt; is our virtual user conference for the Pulumi community and anyone interested in Infrastructure as Code. Every year, we strive to build a program packed with technical talks, demos, and best practices with the goal of leaving you with new learnings and inspiration that will help you become a better cloud engineer. You&amp;rsquo;ll hear from industry leaders and experts about IaC, software engineering, DevOps, Platform engineering, and AI.&lt;/p&gt;
&lt;p&gt;We hope you&amp;rsquo;ll &lt;a href="https://www.pulumi.com/pulumi-up/"&gt;join us virtually&lt;/a&gt; and take this opportunity to grow your knowledge and become infrastructure as code stars.&lt;/p&gt;
&lt;h2 id="get-ready-for-amazing-launches-and-demos"&gt;Get Ready for Amazing Launches and Demos&lt;/h2&gt;
&lt;p&gt;Learn about Pulumi&amp;rsquo;s newest features across the core IaC SDKs and Pulumi Cloud.
And watch hands-on demos by the Pulumi team:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Joe Duffy, Co-founder and CEO&lt;/li&gt;
&lt;li&gt;Luke Hoban, Co-creator of TypeScript and CTO&lt;/li&gt;
&lt;li&gt;Meagan Cojocar, Principal Product Manager&lt;/li&gt;
&lt;li&gt;Evan Boyle, Engineering Manager&lt;/li&gt;
&lt;li&gt;Zaid Ajaj, Software Engineer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="final-speakers-announced"&gt;Final Speakers Announced&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;ll hear from innovators, leaders, and experts from multiple industries and learn about infrastructure as code, software engineering, and cloud engineering.&lt;/p&gt;
&lt;h3 id="sam-cogan---solution-architect-wtw"&gt;Sam Cogan - Solution Architect, WTW&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Talk: Keeping your Infrastructure Code DRY (Don&amp;rsquo;t Repeat Yourself)&lt;/em&gt;&lt;br&gt;
Sam is a Solution Architect with &lt;a href="https://www.wtwco.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;WTW&lt;/a&gt; and a Microsoft Azure MVP. Sam is focused on delivering applications into the cloud using IaaS, PaaS, Serverless, Containers, and Kubernetes. Sam is particularly focused on automation and DevOps, including Infrastructure as Code, Cloud automation tooling, PowerShell, and CI/CD tooling.&lt;/p&gt;
&lt;h3 id="dennis-sauvé---devops-engineer-washington-trust-bank"&gt;Dennis Sauvé - DevOps Engineer, Washington Trust Bank&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Talk: How a Bank Modernized its Software Engineering with Infrastructure as Code Automation&lt;/em&gt;&lt;br&gt;
Dennis is a development operations engineer at &lt;a href="https://www.watrust.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Washington Trust Bank&lt;/a&gt; in Spokane, WA. With years of experience in software development and cloud engineering, he works to streamline deployment pipelines and create solutions for developers.&lt;/p&gt;
&lt;h3 id="ala-shiban---co-founder--ceo-klotho"&gt;Ala Shiban - Co-Founder &amp;amp; CEO, Klotho&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Talk: Creating a &amp;lsquo;Cloud-Aware&amp;rsquo; Code Solution&lt;/em&gt;&lt;br&gt;
Ala is the co-founder of &lt;a href="https://klo.dev/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Klotho&lt;/a&gt;, a startup that transforms plain code to cloud-native code. He started his journey on Commodore64 with cassette tapes and (much) more recently worked on distributed systems, developer tools, and large-scale web, cloud, and microservice backends.&lt;/p&gt;
&lt;p&gt;He&amp;rsquo;s led smaller teams and larger organizations at Microsoft&amp;rsquo;s Developer Division and Riot Games&amp;rsquo; Infrastructure Platform organization.&lt;/p&gt;
&lt;h3 id="matt-stephenson---sr-principal-software-engineer-starburst-data"&gt;Matt Stephenson - Sr. Principal Software Engineer, Starburst Data&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Talk: Creating Infrastructure Automation Magic with Code&lt;/em&gt;&lt;br&gt;
Matt is a Sr. Principal Software Engineer at &lt;a href="https://www.starburst.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Starburst Data&lt;/a&gt;. He&amp;rsquo;s responsible for Starburst&amp;rsquo;s infrastructure architecture. He&amp;rsquo;s worked at many tech companies, including Square, Oracle, Google, and Amazon. Aside from technology, Matt is a pilot and helps build The Man for Burning Man each year.&lt;/p&gt;
&lt;h3 id="tim-holm---co-founder--cto-nitric"&gt;Tim Holm - Co-Founder &amp;amp; CTO, Nitric&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Talk: Engineering a Multi-cloud Platform&lt;/em&gt;&lt;br&gt;
Tim Holm is the Co-founder and CTO at &lt;a href="https://nitric.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Nitric&lt;/a&gt;, with 12 years of experience in software engineering and cloud development. In disciplines ranging from Server and Storage Virtualisation and Automation, Mobile Application development, Full-stack application development, and Cloud infrastructure automation. Before founding Nitric, Tim worked to deliver critical infrastructure projects in Government and Fintech.&lt;/p&gt;
&lt;p&gt;In his spare time, Tim enjoys video games, building Lego, and mountain biking.&lt;/p&gt;
&lt;h3 id="tyler-scheuble---head-of-platform-people-data-labs"&gt;Tyler Scheuble - Head of Platform, People Data Labs&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Talk: Using Monorepos to Level-up your Infrastructure as Code and Software Delivery&lt;/em&gt;&lt;br&gt;
Tyler possesses a genuine enthusiasm for technology. At &lt;a href="https://www.peopledatalabs.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;People Data Labs&lt;/a&gt;, he has designed petabyte-scale data pipelines and high-performance APIs with demanding availability requirements, which informed his approach to leading the development of the next generation of the startup&amp;rsquo;s development pipelines and environments.&lt;/p&gt;
&lt;p&gt;Tyler is passionate about finding simple solutions to cross-cutting concerns such as security, observability, and development velocity.&lt;/p&gt;
&lt;h3 id="sefi-genis---co-founder--cto-firefly"&gt;Sefi Genis - Co-Founder &amp;amp; CTO, Firefly&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Talk: Lessons Learned from Writing Thousands of Lines of IaC&lt;/em&gt;&lt;br&gt;
Sefi is the CTO and Co-Founder at &lt;a href="https://www.gofirefly.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Firefly&lt;/a&gt;. He started his career in the 8200 Unit of the Israeli Intelligence Corps and then continued on to security and developer tooling companies.&lt;/p&gt;
&lt;p&gt;Sefi was a founding engineer at Dome9 Security (later acquired by Checkpoint), where he led the Backend Infrastructure of the product post-acquisition. Before founding Firefly, he became Head of Engineering in an Israeli cybersecurity startup company. Today he is building Firefly to help engineers manage the new reality of cloud-native operations.&lt;/p&gt;
&lt;h2 id="panel-discussion---ai-and-the-future-of-cloud-development"&gt;Panel Discussion - AI and the Future of Cloud Development&lt;/h2&gt;
&lt;p&gt;Prepare yourself for the future of cloud development! Gain valuable insights from industry experts in our panel discussion, where we explore the transformative impact of AI on the cloud infrastructure and software engineering industries. The panel discussion will be moderated by CEO Joe Duffy. These are the panelists:&lt;/p&gt;
&lt;h3 id="amanda-silver---cvp-developer-tools-microsoft"&gt;Amanda Silver - CVP Developer Tools, Microsoft&lt;/h3&gt;
&lt;p&gt;Amanda is the CVP of PM for &lt;a href="https://developer.microsoft.com/en-us/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Microsoft&amp;rsquo;s Developer Division&lt;/a&gt;, including the Visual Studio family of products, .NET, TypeScript, and our developer platforms. She has been key to Microsoft&amp;rsquo;s transformation to contribute to open source with the introduction of TypeScript, Visual Studio Code, and the acquisition of both Xamarin and GitHub. She believes that a tight digital feedback loop with zero distance between end-users and engineering teams is a critical element of great product development.&lt;/p&gt;
&lt;h3 id="beyang-liu---co-founder---cto-sourcegraph"&gt;Beyang Liu - Co-Founder &amp;amp; CTO, Sourcegraph&lt;/h3&gt;
&lt;p&gt;Beyang is the CTO and co-founder of Sourcegraph. Prior to Sourcegraph, Beyang was a software engineer at Palantir Technologies, where he developed new data analysis software on a small, customer-facing team working with Fortune 500 companies. Beyang studied Computer Science at Stanford, where he published research in probabilistic graphical models and computer vision at the Stanford AI Lab and thoroughly enjoyed his compilers course.&lt;/p&gt;
&lt;h3 id="luke-hoban---typescript-co-creator-and-cto-pulumi"&gt;Luke Hoban - TypeScript Co-Creator and CTO, Pulumi&lt;/h3&gt;
&lt;p&gt;Luke is CTO at Pulumi. He has worked on developer tools his entire career. He started out on Visual Studio, C#, and .NET in the early 2000s, later joined the ECMAScript standards body as a representative of Microsoft and then became one of the co-founders of the TypeScript programming language.&lt;/p&gt;
&lt;h2 id="featured-partners"&gt;Featured Partners&lt;/h2&gt;
&lt;p&gt;Thank you to our amazing partners for supporting PulumiUP! Visit these booths for tech talks, demos and Q&amp;amp;A about your favorite cloud platforms and developer tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;AWS&lt;/a&gt; - Solutions Architects will be on hand to demo the latest AWS and Pulumi capabilities and help you get the most from the AWS platform.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Google Cloud&lt;/a&gt; - Customer Engineers will help you accelerate your cloud journey with helpful tips and Q&amp;amp;A.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://azure.microsoft.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Microsoft&lt;/a&gt; - Cloud Advocates will be available to show you how to kickstart your projects on Azure.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.equinix.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Equinix&lt;/a&gt; - Stop by the Equinix booth to learn all about the new Equinix Pulumi provider.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://circleci.com/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;CircleCI&lt;/a&gt; - Stop by the CircleCI booth to learn best practices for adopting CI/CD in your organization.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.newrelic.com/pulumi/get-started-pulumi/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;New Relic&lt;/a&gt; - The New Relic team will demonstrate how to get started with Observability as Code with Pulumi and New Relic.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gofirefly.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Firefly&lt;/a&gt; - If you have existing cloud resources you can convert them to Pulumi code easily with Firefly. Stop by the Firefly booth for a demo.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nitric.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Nitric&lt;/a&gt; - The Nitric team will be on site to show you how to create cloud-agnostic infrastructure code from your application code.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://klo.dev/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Klotho&lt;/a&gt; - The Klotho team will show you how devops teams an application teams can easily collaborate to moderize and scale infrastructure without disruptions.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.getport.io/?utm_source=Pulumi.com&amp;amp;utm_medium=Website&amp;amp;utm_campaign=PulumiUP"&gt;Port&lt;/a&gt; - Join the Port team to learn how to setup a self-service portal for your developers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Want to attend PulumiUP 2023? &lt;a href="https://www.pulumi.com/pulumi-up/"&gt;Register now!&lt;/a&gt;&lt;/p&gt;</description><author>George Huang</author><author>Sara Huddleston</author><author>Isaac Harris</author><category>announcements</category><category>pulumi-events</category></item><item><title>Join a Pulumi User Group (PUG) Meetup!</title><link>https://www.pulumi.com/blog/join-pulumi-user-group-community/</link><pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/join-pulumi-user-group-community/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/join-pulumi-user-group-community/index.png" /&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;p&gt;Hi everyone,&lt;/p&gt;
&lt;p&gt;After several great years on Meetup, the Pulumi Community is moving to a new home: &lt;a href="https://luma.com/pulumi"&gt;Luma&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This wasn&amp;rsquo;t an easy decision. Together we&amp;rsquo;ve built 38 Pulumi User Groups across 14 countries, with nearly 10,000 members between them. Meetup is where that community took shape, and we&amp;rsquo;re grateful for everything that happened there.&lt;/p&gt;
&lt;p&gt;We want to make it as easy as possible for you to show up. All upcoming events and workshops will be published on Luma going forward.&lt;/p&gt;
&lt;p&gt;Follow us at &lt;a href="https://luma.com/pulumi"&gt;luma.com/pulumi&lt;/a&gt; so you don&amp;rsquo;t miss out.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We have a global community made up of people from many different countries, but we also have many local communities. We want to enable our users to meet, share knowledge and ideas, answer questions, and learn about Pulumi and best practices. For that reason, we created the &lt;a href="https://luma.com/pulumi"&gt;Pulumi User Groups, aka PUGs&lt;/a&gt; on Meetup.&lt;/p&gt;
&lt;p&gt;Members of PUGs will have access to a global network of experts who can offer help, advice, and support on using Pulumi effectively. The PUGs will also feature regular in-person meetups, webinars, in-person and virtual workshops, and other events to help members stay up-to-date with the latest cloud infrastructure and Pulumi developments.&lt;/p&gt;
&lt;h2 id="23-pulumi-user-groups-pugs-meetups-in-10-countries"&gt;23 Pulumi User Groups (PUGs) Meetups in 10 countries&lt;/h2&gt;
&lt;p&gt;PUGs are led by Pulumi employees and &lt;a href="https://www.pulumi.com/community/puluminaries/"&gt;Puluminaries&lt;/a&gt;, who are passionate community members that are experts in topics related to cloud infrastructure, Pulumi Cloud, cloud-native software development, and much more, and are willing to share their knowledge with the community.&lt;/p&gt;
&lt;h3 id="united-states-pulumi-user-groups"&gt;United States Pulumi User Groups&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Seattle Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;New York Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;San Francisco Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;San Diego Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Austin Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Denver Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Chicago Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Columbus Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Philadelphia Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Boston Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Detroit Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Nashville Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="south-america-pulumi-user-groups"&gt;South America Pulumi User Groups&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;São Paulo Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="european-pulumi-user-groups"&gt;European Pulumi User Groups&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;London Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Oslo Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Berlin Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Munich Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Prague Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="middle-east-pulumi-user-groups"&gt;Middle East Pulumi User Groups&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Tel Aviv Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="asia-pulumi-user-groups"&gt;Asia Pulumi User Groups&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Singapore Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="oceania-pulumi-user-groups"&gt;Oceania Pulumi User Groups&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Australia Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://luma.com/pulumi"&gt;Auckland Pulumi User Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-first-pug-in-person"&gt;The First PUG in person&lt;/h2&gt;
&lt;p&gt;Our very first in-person PUG meetup took place in London, UK. The event was well-attended by developers, cloud architects, and other infrastructure enthusiasts. The attendees had the opportunity to network with other like-minded professionals and learn more about Pulumi&amp;rsquo;s tools and features from expert speakers.&lt;/p&gt;
&lt;p&gt;During the meetup, attendees heard from several speakers, including Joe Duffy, Co-Founder &amp;amp; CEO at Pulumi, who was there to speak about Infrastructure as Code that writes itself after the release of &lt;a href="https://www.pulumi.com/blog/pulumi-insights/"&gt;Pulumi Insights&lt;/a&gt;, which happened that same day.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/join-pulumi-user-group-community/pulumi-user-group-pug-london-joe-duffy.png" alt="Photo of Pulumi CEO Joe Duffy speaking at a Pulumi User Group (PUG) in London, UK"&gt;&lt;/p&gt;
&lt;p&gt;Other speakers included Liam Hampton, Sr. Regional Cloud Advocate at Microsoft, who spoke about Microsoft Azure and IaC, and Sam Cogan, Director of Solution Architecture at Willis Towers Watson, who spoke about building a library of reusable modules you can repeatedly reuse in your IaC projects.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/join-pulumi-user-group-community/pulumi-user-group-pug-london-sam-cogan.png" alt="Photo of Sam Cogan speaking at a Pulumi User Group (PUG) in London, UK"&gt;&lt;/p&gt;
&lt;p&gt;Overall, the first PUG meetup was a huge success, and attendees left feeling inspired and energized about Pulumi&amp;rsquo;s tools and the community&amp;rsquo;s possibilities. With the launch of PUGs, Pulumi is demonstrating its commitment to building a strong and supportive community of professionals passionate about cloud infrastructure.&lt;/p&gt;
&lt;h2 id="more-pugs-and-events-to-come"&gt;More PUGs and events to come&lt;/h2&gt;
&lt;p&gt;We are planning more in-person PUG events for the months to come. With PUGs, you&amp;rsquo;ll have the opportunity to connect with like-minded professionals, share knowledge and best practices, and stay up-to-date with the latest developments in cloud infrastructure and Pulumi.&lt;/p&gt;
&lt;p&gt;Join the &lt;a href="https://luma.com/pulumi"&gt;Pulumi User Groups&lt;/a&gt; in your local area, or if there isn’t one yet, you are welcome to join the &lt;a href="https://slack.pulumi.com/"&gt;Pulumi Slack community&lt;/a&gt; and meet people from all over the world.&lt;/p&gt;</description><author>Sara Huddleston</author><category>announcements</category><category>community</category><category>pulumi-events</category></item><item><title>Pulumi Insights: Intelligence for Cloud Infrastructure</title><link>https://www.pulumi.com/blog/pulumi-insights/</link><pubDate>Thu, 13 Apr 2023 06:00:00 -0800</pubDate><guid>https://www.pulumi.com/blog/pulumi-insights/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-insights/index.png" /&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;p&gt;You can now get Insights capabilities on all your cloud infrastructure, even resources not managed by Pulumi IaC. &lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;Get started with Insights 2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are new intelligent cloud management capabilities available in &lt;strong&gt;Pulumi Copilot&lt;/strong&gt;. &lt;a href="https://www.pulumi.com/blog/pulumi-copilot"&gt;Learn More&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We&amp;rsquo;ve seen incredible acceleration of cloud adoption over the past 5 years. Pulumi’s flagship open source IaC solution gives engineers great tools to scale up their cloud infrastructure using the same programming languages and tools they already know and love. As a result, thousands of companies of every size and scale have adopted Pulumi as a lynchpin of their cloud infrastructure strategy.&lt;/p&gt;
&lt;p&gt;Today we&amp;rsquo;re excited to announce &lt;strong&gt;Pulumi Insights&lt;/strong&gt;, the next major productivity enhancement for infrastructure as code. Pulumi Insights provides intelligence, search, and analytics over any infrastructure, in any cloud across your organization, leveraging the latest advances in generative AI and Large Language Models (LLMs). Whether you have an AWS VPC, a Kubernetes CRD, or a DataDog alarm definition, Pulumi Insights enables you to intelligently find and interact with all of your resources from within the Pulumi Cloud.&lt;/p&gt;
&lt;p&gt;&lt;img src="insights.svg" alt="Pulumi Insights"&gt;&lt;/p&gt;
&lt;p&gt;Pulumi Insights was born from partnering with our community and observing their struggles to make sense of millions of cloud resources and resource updates per month, across hundreds of clouds, regions, and accounts. With Pulumi Insights, we now help teams manage cloud footprints of any size with the following key components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;🧠 Intelligence&lt;/strong&gt;: New AI-powered tool for learning, discovering and building cloud infrastructure with Pulumi, using the power of generative AI and Large Language Models (LLMs).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🔎 Search&lt;/strong&gt;: Multi-cloud resource search, powered by the Pulumi resource supergraph, which surfaces rich metadata and relationships between cloud infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;📊 Analytics&lt;/strong&gt;: Visualize Pulumi resource data with your favorite BI tools, including Excel, Tableau and others, using your own data warehouse for reporting on cost, compliance, and other operational use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these features work across Pulumi’s 130+ supported cloud providers, including AWS, Azure, Google Cloud, Cloudflare, and Kubernetes, and can be defined in any programming language, including TypeScript, Python, .NET, Go, Java and YAML.&lt;/p&gt;
&lt;p&gt;Pulumi Insights is available for all Pulumi Cloud users today.&lt;/p&gt;
&lt;h2 id="intelligence---productivity-with-the-power-of-ai"&gt;Intelligence - Productivity with the Power of AI&lt;/h2&gt;
&lt;p&gt;The scale of Cloud APIs is often intimidating for new and even seasoned cloud engineers. At Pulumi, we provide access to hundreds of clouds, tens-of-thousands of resources and hundreds-of-thousands of resource properties. Pulumi has many thousands of examples showing how to solve specific problems, and yet developers still sometimes struggle to find the perfect code snippet that addresses their exact set of requirements.&lt;/p&gt;
&lt;p&gt;Our new &lt;a href="https://www.pulumi.com/product/neo/"&gt;Pulumi Neo&lt;/a&gt; is an assistant purpose-built for creating cloud infrastructure using Pulumi. It builds on the power of Large Language Models and GPT to dramatically reduce the time it takes to discover, learn and use new cloud infrastructure APIs. Because Pulumi uses popular programming languages that GPT has already been trained on, Pulumi AI understands how to solve complex Cloud Infrastructure problems.&lt;/p&gt;
&lt;p&gt;Using natural language, you can ask to accomplish a specific Cloud Infrastructure goal, and receive a Pulumi program in your favorite language. In addition, Pulumi AI supports iterating on your cloud infrastructure allowing the addition of new features, improving security and performance, fixing correctness issues and clarifying requirements.&lt;/p&gt;
&lt;img src="https://www.pulumi.com/uploads/content/blog/pulumi-insights/pulumiai-cloudflare+s3.gif" alt="Pulumi AI - Cloudflare + S3" width=600/&gt;
&lt;p&gt;The open source &lt;a href="https://github.com/pulumi/pulumi-ai"&gt;&lt;code&gt;pulumi-ai&lt;/code&gt;&lt;/a&gt; CLI takes these ideas even further, by interactively deploying any cloud infrastructure you request using natural language prompts. You can build arbitrarily complex cloud infrastructure, without requiring detailed knowledge of specific APIs! Of course, since we&amp;rsquo;re using Pulumi’s Automation API under the hood, you can go to the Pulumi Cloud console to see everything that has been deployed, and even jump straight into your Cloud Console to inspect the results.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/uploads/content/blog/pulumi-insights/pulumi-ai.gif" alt="pulumi-ai CLI"&gt;&lt;/p&gt;
&lt;p&gt;Pulumi AI will enhance your team&amp;rsquo;s ability to go from concept to product. This demo shows Pulumi AI taking natural language input and deploying cloud infrastructure and services which are exposed live on the internet, constantly updating as you refine your request.&lt;/p&gt;
&lt;p&gt;Check out Pulumi Neo today at &lt;a href="https://www.pulumi.com/product/neo/"&gt;pulumi.com/neo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="search---find-anything-in-any-cloud"&gt;Search - Find Anything in Any Cloud&lt;/h2&gt;
&lt;p&gt;Teams don&amp;rsquo;t use just a single cloud or a single cloud account. Indeed, many teams manage resources across dozens of clouds and hundreds of accounts! It can be almost impossible to aggregate and search your infrastructure across these accounts, since every cloud and every account is (by design!) a walled garden.&lt;/p&gt;
&lt;p&gt;Pulumi Resource Search offers multi-cloud search and analytics across every environment in your organization. You can issue queries that find all of your AWS VPCs, or all of your VPCs in AWS and Azure, or all resources with the &amp;ldquo;production&amp;rdquo; tag across all cloud environments. You also have access to statistics about cloud usage, including a breakdown by cloud provider, resource type, and department. Resource search enables you to find the needle within your cloud haystack and visualize cloud consumption trends.&lt;/p&gt;
&lt;p&gt;&lt;img src="search.png" alt="Pulumi Resource Search"&gt;&lt;/p&gt;
&lt;p&gt;Infrastructure can be discovered interactively with a rich, structured query language, for example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;package:snowflake&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data-warehouse stack:production package:aws modified:&amp;gt;=2023-03-21&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stack:production type:”github:index/issuelabel:IssueLabel”&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;package:aws project:pulumi-cloud-import-aws stack:-staging-us-west-2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Search is powered by the Pulumi resource supergraph, which exposes rich metadata around cloud infrastructure resources and models relationships between resources, such as the project and stack they are deployed from, the components they are part of, the provider used to manage them. Pulumi enables faceted search, which allows users to specify criteria by applying multiple filters based on classification of resources.&lt;/p&gt;
&lt;h3 id="ai-assist-for-search"&gt;AI Assist for Search&lt;/h3&gt;
&lt;p&gt;We are also making available today a private preview of AI Assist for resource search that enables natural language queries. You can provide a plain English (or Spanish, or French, or Japanese!) request, to express queries where you might not know the exact syntax, type tokens, or package names. AI Assist makes it easier to gain insight over infrastructure. You can &lt;a href="https://www.pulumi.com/product/private-previews/#preview-assist"&gt;join the waitlist&lt;/a&gt; now for access to this additional functionality for search.&lt;/p&gt;
&lt;p&gt;&lt;img src="search-aiassist.png" alt="AI Assist for Pulumi Resource Search"&gt;&lt;/p&gt;
&lt;h3 id="cloud-import"&gt;Cloud Import&lt;/h3&gt;
&lt;p&gt;While all resources managed by Pulumi are part of the resource supergraph, you can also bring resources defined and managed outside of Pulumi into the graph to make them available for Insights. We&amp;rsquo;re also opening up a private preview of Pulumi Cloud Import, a feature that lets you apply Search and Insights to resources created outside of Pulumi, whether via ClickOps or through other tools like Terraform, CloudFormation, ARM or Kubernetes YAML. You can &lt;a href="https://www.pulumi.com/product/private-previews/#preview-import"&gt;join the waitlist&lt;/a&gt; for access to these new features today.&lt;/p&gt;
&lt;p&gt;&lt;img src="search-cloudimport.png" alt="Cloud Import"&gt;&lt;/p&gt;
&lt;p&gt;Login to the &lt;a href="https://app.pulumi.com/signin"&gt;Pulumi Cloud&lt;/a&gt; to start using Resource Search today!&lt;/p&gt;
&lt;h2 id="analytics---deeper-insights-for-cloud-infrastructure"&gt;Analytics - Deeper Insights for Cloud Infrastructure&lt;/h2&gt;
&lt;p&gt;We are also making the data in the Pulumi supergraph available for export into other Business Intelligence tools for deeper analysis in combination with other key business data. You can visualize resource data with your favorite BI tools, including Excel, Tableau, Looker, PowerBI and others, using your own data warehouse, such as Snowflake, Redshift, Databricks and more, and create reporting on cost, compliance, and many other operational use cases.&lt;/p&gt;
&lt;p&gt;The ability to join Pulumi resource data with other key business data in your data warehouse enables users to address a broad range of key business needs - answering questions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What infrastructure is stale and possibly orphaned / contributing to our cost?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Where are we spending the most, broken down by department or environment?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Are all my primary data stores marked as protected to avoid unintentional deletion?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;What are my most commonly used clouds? What are the most common resource types?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Who has performed the most updates across my organization?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, here is a dashboard in Metabase, created by combining Pulumi resource data with cost and department data in a Snowflake data warehouse.&lt;/p&gt;
&lt;p&gt;&lt;img src="analytics-dashboard.png" alt="Analytics with Pulumi, Snowflake and Metabase"&gt;&lt;/p&gt;
&lt;p&gt;Pulumi resource Data Export is available today both interactively in the console and via REST API . Learn more about these features in the &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/insights/export/"&gt;Pulumi Data Export&lt;/a&gt; documentation.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;d like to express our thanks to the entire community that helped us design, develop, test and ship this incredible release. From Intelligence to Search to Analytics, the new features in Pulumi Insights will make all of us more productive. We’re incredibly excited by the use cases we’ve already seen our customers build, and we can’t wait to see what you build on top of these foundations!&lt;/p&gt;
&lt;p&gt;To get started with Pulumi Insights today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sign up or log in to &lt;a href="https://app.pulumi.com/signin"&gt;Pulumi Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Try out &lt;a href="https://www.pulumi.com/product/neo/"&gt;Pulumi Neo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Watch the videos for &lt;a href="https://www.youtube.com/watch?v=MTHGyed3Ef8"&gt;Pulumi Insights&lt;/a&gt;, &lt;a href="https://youtu.be/xdTUEStC8I0"&gt;Pulumi AI&lt;/a&gt; and &lt;a href="https://youtu.be/e1u-P9bnEA4"&gt;Pulumi Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Check out the &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/insights/"&gt;Pulumi Insights Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Join the &lt;a href="https://slack.pulumi.com/"&gt;Pulumi Community Slack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Luke Hoban</author><category>announcements</category><category>features</category><category>releases</category><category>ai</category><category>llm</category><category>data-and-analytics</category></item><item><title>Preview of .NET resource providers</title><link>https://www.pulumi.com/blog/dotnet-custom-providers/</link><pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/dotnet-custom-providers/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/dotnet-custom-providers/index.png" /&gt;
&lt;p&gt;Today we are pleased to announce the Preview of .NET support for custom resource providers. This means you can build custom providers using your favorite .NET language, including C#, F#, and VB.NET.&lt;/p&gt;
&lt;p&gt;This is a first look preview release of the provider interface for .NET. It has minimal documentation but is feature complete. We hope to gather early feedback to refine the API and quickly bring this to a production quality release.&lt;/p&gt;
&lt;p&gt;You will need to use version &lt;a href="https://github.com/pulumi/pulumi-dotnet/releases/tag/v3.52.0"&gt;3.52.0&lt;/a&gt; to access the new APIs. You can install this in your project with:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;dotnet add package Pulumi --version 3.52.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can see an example of using the new provider interface in the &lt;a href="https://github.com/pulumi/pulumi-dotnet/tree/main/integration_tests/testprovider"&gt;dotnet integration tests directory&lt;/a&gt;. This has replaced the old test provider that was written in Go.&lt;/p&gt;
&lt;p&gt;Please &lt;a href="https://github.com/pulumi/pulumi-dotnet/blob/main/sdk/Pulumi/Provider/Provider.cs"&gt;view the provider interface&lt;/a&gt; and raise issues and discussions on &lt;a href="https://github.com/pulumi/pulumi-dotnet"&gt;GitHub&lt;/a&gt; or our &lt;a href="https://slack.pulumi.com"&gt;Community Slack&lt;/a&gt; in the &lt;code&gt;#dotnet&lt;/code&gt; channel — we can’t wait to hear what you think!&lt;/p&gt;</description><author>Fraser Waters</author><category>announcements</category><category>dotnet</category><category>packages</category><category>features</category><category>native-providers</category></item><item><title>Introducing KubeCrash: Cloud Native Crash Courses</title><link>https://www.pulumi.com/blog/introducing-kubecrash/</link><pubDate>Fri, 08 Apr 2022 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/introducing-kubecrash/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/introducing-kubecrash/index.png" /&gt;
&lt;p&gt;Can’t make it to Valencia for KubeCon this year? Timezone doesn’t work for the virtual conference either? We can’t fix time, but if you’re feeling left out and still want some of that sweet cloud native content, you can still join us for &lt;a href="https://kubecrash.io/"&gt;KubeCrash&lt;/a&gt;, a new event hosting live crash courses and sessions on cloud native tech. Come hang out and learn directly from the maintainers of cloud native open source projects!&lt;/p&gt;
&lt;h2 id="about-kubecrash"&gt;About KubeCrash&lt;/h2&gt;
&lt;p&gt;Five open source companies have teamed up to bring you top-notch, KubeCon-grade crash courses on cloud native tech. No vendor pitches, just awesome open source content on projects such as Linkerd, cert-manager, CockroachDB, Pulumi, Polaris, and Goldilocks.&lt;/p&gt;
&lt;p&gt;With Kubernetes becoming the new standard for cloud-hosted application development, DevOps teams are driving the technology choices for enterprise-grade cloud native tooling. Freely available open source solutions are often the primary source for these tooling decisions.&lt;/p&gt;
&lt;p&gt;KubeCrash provides a half-day knowledge sharing and virtual learning environment for developers, reliability engineers, cloud security specialists, and platform engineers. Learn directly from the maintainers of some of the most popular open source projects in this series of focused talks and workshops.&lt;/p&gt;
&lt;h2 id="the-kubecrash-program"&gt;The KubeCrash program&lt;/h2&gt;
&lt;p&gt;Come prepared for a schedule packed with great content and actionable insights directly from the teams that maintain some of the ecosystem&amp;rsquo;s most popular open source projects. The program will cover the latest learnings on implementing scalable zero-trust, scanning workloads for improved cloud native security, using service mesh to ensure high availability across multi-cluster infrastructure, and delivering &amp;ldquo;serverless&amp;rdquo; for multi-cloud deployments.&lt;/p&gt;
&lt;h3 id="program-overview"&gt;Program overview&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Using cert-manager to enable zero-trust identities for intra-pod communication &amp;mdash; &lt;em&gt;Jake Sanders, cert-manager maintainer&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Modern cloud native architectures require the network to be considered untrustworthy and this is why internal workloads are rapidly driving the use of mTLS and private PKI. This workshop from Jetstack will demonstrate how to use cert-manager to issue, manage and rotate mTLS certs, allowing users to have strongly attested and verified Machine Identities between Kubernetes pods. All without the workload private keys leaving node memory! Think of this session as a precursor to implementing a service mesh solution, using cert-manager to establish zero trust environments, perhaps defined by trust domains, and enforce security for pod to pod traffic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multi-cluster failover using Linkerd &amp;mdash; &lt;em&gt;Eliza Weisman, Linkerd maintainer&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Failover across clusters is a great way to improve the overall uptime and reliability of Kubernetes applications. While whole-cluster failover can be accomplished at the global ingress layer, failing over individual services is a little more difficult. During this session, Linkerd maintainer Eliza Weisman will walk you through how to use Linkerd, the CNCF graduated service mesh, to enable traffic failover for individual services across clusters. Attendees will learn how to combine service mesh metrics, traffic shifting, and cross-cluster communication in a cohesive and automated way using pure open source, while preserving fundamental security guarantees such as mutual TLS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Optimizing and Securing Kubernetes Workloads with Polaris and Goldilocks &amp;mdash; &lt;em&gt;Rachel Sweeney, Fairwinds and Andy Suderman, Polaris and Goldilocks maintainer&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Learn how to scan your Kubernetes workloads to improve your resource utilization and security using open source tools Polaris and Goldilocks. You will watch Andy Suderman, Director of R&amp;amp;D and Technology, and Rachel Sweeney, SRE at Fairwinds, as they show how to correctly configure your clusters based on Kubernetes&amp;rsquo; best practices for security and efficiency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using Kubernetes to deliver a “serverless” service &amp;mdash; &lt;em&gt;Lisa-Marie Namphy and Jim Walker, Cockroach Labs&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this talk, Cockroach Labs team members will share how they leverage Kubernetes to deliver a &amp;ldquo;serverless&amp;rdquo; experience. Serverless promises to change the way we consume software. It allows us to potentially pay for what we use only and help drive down operational costs by minimizing resource consumption. Architecting for serverless requires a unique look at app logic and how it is deployed&amp;mdash;a combination of the logical and physical worlds. An architectural pattern has emerged where we can scale ephemeral compute separate from services that need to persist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multi-cloud, single deploy: cloud engineering with Kubernetes and Pulumi &amp;mdash; &lt;em&gt;Aaron Friel and Guinevere Saenger, Pulumi&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Business constraints and customer requests often require to stand up new Kubernetes environments across multiple cloud providers. This growing complexity in computing infrastructure will incur greater operational costs for organizations when coordinating across multiple teams. Pulumi engineers Aaron Friel and Guinevere Saenger will demonstrate standing up Kubernetes clusters, deploying applications, and automating ops tasks by building a CLI using the Pulumi Automation API. These tools empower every engineer&amp;mdash;from application developers to site reliability engineers&amp;mdash;to be a cloud engineer.&lt;/p&gt;
&lt;h2 id="join-us-on-may-17"&gt;Join us on May 17&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re staying in the Americas (or are up for a late-night session) this KubeCon, join us on Tuesday, May 17th starting at 9 am PST/10 am CST/12 pm EST. Enjoy a specifically curated set of sessions, each led by a project maintainer from projects covering modern cloud native security to improving the developer experience. &lt;a href="https://www.kubecrash.io/"&gt;Register today&lt;/a&gt;!&lt;/p&gt;</description><author>Kat Cosgrove</author><category>cloud-native</category><category>announcements</category></item><item><title>Six Things You Might Not Know About the Pulumi Service</title><link>https://www.pulumi.com/blog/six-things-about-pulumi-service/</link><pubDate>Mon, 24 Jan 2022 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/six-things-about-pulumi-service/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/six-things-about-pulumi-service/index.png" /&gt;
&lt;p&gt;As a reader of this blog, you&amp;rsquo;ve probably heard of the &lt;a href="https://www.pulumi.com/product/pulumi-service/"&gt;Pulumi Service&lt;/a&gt;, the default state-management &lt;a href="https://www.pulumi.com/docs/iac/concepts/state-and-backends/"&gt;backend&lt;/a&gt; of the Pulumi CLI. If that&amp;rsquo;s the case, there&amp;rsquo;s also a good chance you&amp;rsquo;ve heard of a number of the Service&amp;rsquo;s key features, like helping you organize your &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/projects-and-stacks/"&gt;projects and stacks&lt;/a&gt;, collaborate with others with the help of &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/admin/organizations/"&gt;organizations&lt;/a&gt;, or handle sensitive data securely with built-in support for &lt;a href="https://www.pulumi.com/docs/concepts/secrets/"&gt;encrypted secrets&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What you might not know, though, is that we&amp;rsquo;re adding new features to the Pulumi Service all the time, and that some of these features can be fairly easy to miss. So in this post, we&amp;rsquo;ll highlight a handful of the features you might &lt;em&gt;not&lt;/em&gt; be aware of, and that we think make it even easier to manage your infrastructure with Pulumi.&lt;/p&gt;
&lt;p&gt;Let’s get started!&lt;/p&gt;
&lt;h2 id="feature-1-stack-tags"&gt;Feature 1: Stack Tags&lt;/h2&gt;
&lt;p&gt;The first thing we&amp;rsquo;ll cover is the &lt;a href="https://www.pulumi.com/docs/concepts/stack#stack-tags"&gt;Pulumi stack tags&lt;/a&gt; feature. Stack tags are key/value pairs that are associated with your Pulumi stack. You can use them for any number of purposes, from keeping things organized to even flagging whether or not it&amp;rsquo;s okay for a script to reclaim the stack&amp;rsquo;s resources.&lt;/p&gt;
&lt;p&gt;While you can create, edit, and remove stack tags using the Pulumi CLI (see &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_tag"&gt;&lt;code&gt;pulumi stack tag&lt;/code&gt;&lt;/a&gt;), you can also do so in the Pulumi Console:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150612443-b0b187e1-6329-42ca-816f-01de1bc5d4ff.gif" alt="Adding and removing stack tags in the Service "&gt;&lt;/p&gt;
&lt;p&gt;Once set, you can quickly filter stacks on your organization’s Projects tab as well.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150613454-1554b763-2e8b-42e9-80ce-e629048bb1b9.png" alt="Filtering stacks by tag name"&gt;&lt;/p&gt;
&lt;h2 id="feature-2-link-updates-to-your-cicd-pipeline"&gt;Feature 2: Link Updates to your CI/CD pipeline&lt;/h2&gt;
&lt;p&gt;Another helpful thing the Pulumi Service can do is link the Pulumi stack update to the CI/CD job or run that was used to perform it, as well as to the specific source commit:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150612892-f8e84597-2ce2-4687-8acc-236a57f6c6a4.png" alt="The stack update header, showing links to GitHub source commit"&gt;&lt;/p&gt;
&lt;p&gt;When Pulumi updates a stack, it will store some information about the local machine state, such the current git SHA if the stack resides in a &lt;code&gt;git&lt;/code&gt; repository. It is with this data that the Pulumi Service links to relevant services where possible.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re curious to know all of the information Pulumi has for a stack update, you can navigate to the Environment tab for that update:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150613104-510c755f-180e-4f0c-a2cb-e9f9816649e6.png" alt="The Environment tab of a stack update"&gt;&lt;/p&gt;
&lt;h2 id="feature-3-custom-update-messages"&gt;Feature 3: Custom Update Messages&lt;/h2&gt;
&lt;p&gt;One of the most useful pieces of additional data stored with each update is the &lt;code&gt;message&lt;/code&gt; property. By default, Pulumi will use whatever the latest &lt;code&gt;git&lt;/code&gt; commit message is. But did you know you can customize that message from the command line?&lt;/p&gt;
&lt;p&gt;By passing the &lt;code&gt;--message&lt;/code&gt; (or &lt;code&gt;-m&lt;/code&gt;) flag to &lt;code&gt;pulumi up&lt;/code&gt;, you can provide a custom update message, which can help explain the context for why you made a particular infrastructure change:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pulumi up --message &lt;span class="s2"&gt;&amp;#34;Release the hounds\!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150614494-b1c6aef1-aed0-4de5-a815-f4f8ddcef48a.png" alt="An update in the Service with a custom message"&gt;&lt;/p&gt;
&lt;h2 id="feature-4-viewing-resource-changes"&gt;Feature 4: Viewing Resource Changes&lt;/h2&gt;
&lt;p&gt;Another thing you might have missed is that the Pulumi Service supports multiple views for a stack update&amp;rsquo;s logs.&lt;/p&gt;
&lt;p&gt;The standard view mimics the Pulumi CLI&amp;rsquo;s output. However, you can switch to the &lt;em&gt;Diff&lt;/em&gt; or &lt;em&gt;Diagnostic&lt;/em&gt; views, too.&lt;/p&gt;
&lt;p&gt;The Diff view displays all of the properties of modified resources, along with their previous/updated values. This can be helpful when trying to understand exactly what happened for a stack update.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150618931-5881cc70-36ab-4e46-b01c-53c13b8edfa1.png" alt="The diff view, showing resource-property changes"&gt;&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;Diagnostic view&lt;/em&gt; just outputs so-called “diagnostic” messages from the Pulumi update. Most commonly, this is where you will see the output of things like calls to JavaScript’s &lt;code&gt;console.log(...)&lt;/code&gt; or Python’s &lt;code&gt;print(...)&lt;/code&gt; functions. It&amp;rsquo;ll also include the output of dependent tools, like the output when building Docker containers.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150619125-8067b1c6-843d-4f52-999c-69f8e184870e.png" alt="The diagnostic view, showing the output of a Docker image build"&gt;&lt;/p&gt;
&lt;h2 id="feature-5-stack-resource-visualization"&gt;Feature 5: Stack Resource Visualization&lt;/h2&gt;
&lt;p&gt;Another cool feature of the Pulumi Service is being able to visualize a stack’s resources and their relationships to one another. This is a really important feature!&lt;/p&gt;
&lt;p&gt;One of the advantages of using an infrastructure as code tool like Pulumi is that you aren’t just creating a flat list of resources. Instead, by the virtue of how the code and resource graph is structured, you are building a graph of resources.&lt;/p&gt;
&lt;p&gt;This means that Pulumi has a semantic understanding of not only &lt;em&gt;what&lt;/em&gt; resources are in your stack but also how they relate to one another.&lt;/p&gt;
&lt;p&gt;If you navigate to a stack’s Resources tab, by default you see them listed in a table. You can filter this list by resource type, or by providing a custom filter:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150619318-9d452d1f-dc30-4907-af6a-9941c4c5fa68.png" alt="Filtering the resources list with a string matching the resource type (e.g., &amp;ldquo;bucket&amp;rdquo;)"&gt;&lt;/p&gt;
&lt;p&gt;However, in order to see the expanded resource graph, click the Graph View button. This will switch to rendering the resources as an interactive graph.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150619812-e32419b9-db31-489f-b132-df59b4da2c9f.png" alt="All resources in a stack, rendered as a graph"&gt;&lt;/p&gt;
&lt;p&gt;Notice here that the resources that are part of a &lt;a href="https://www.pulumi.com/docs/concepts/resources/#components"&gt;&lt;em&gt;component&lt;/em&gt;&lt;/a&gt; are grouped together. Also, you can double click on those nodes in the graph to expand or collapse them!&lt;/p&gt;
&lt;h2 id="feature-6-drilling-into-resource-properties"&gt;Feature 6: Drilling into Resource Properties&lt;/h2&gt;
&lt;p&gt;But you don’t need to just settle for a &amp;ldquo;top-level view&amp;rdquo; of your resources. You can click on any specific resource on the Resources tab, and see all of the properties of that resource.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150619959-7025d772-14e5-45a7-b660-78a1fc8d769b.png" alt="The Resource details view, showing all properties of a TargetGroup resource"&gt;&lt;/p&gt;
&lt;p&gt;This allows you to see all of the properties that Pulumi is tracking for that resource. It will also show you any relationships to other resources in the same stack.&lt;/p&gt;
&lt;p&gt;The Pulumi Service also links you to the resource’s cloud provider’s console where possible, so you can see even more details.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/274700/150620181-be3e7a09-3630-4898-89fa-7c7b775e1d35.png" alt="Linking directly to an ECS Cluster resource in the AWS Console"&gt;&lt;/p&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;Is your resource missing a link to the cloud provider console? With new services being launched from the myriad providers Pulumi supports every day, it’s hard to keep up. So if you would like us to add cloud provider links, please file an issue over in the &lt;a href="https://github.com/pulumi/console-requests/"&gt;pulumi/console-requests&lt;/a&gt; GitHub repository so we can update our database.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There are plenty of other features to check out in the &lt;a href="https://www.pulumi.com/product/pulumi-service/"&gt;Pulumi Service&lt;/a&gt;, and we have exciting improvements on the way! As always, feel free to stop by the &lt;a href="https://slack.pulumi.com"&gt;Pulumi Community Slack&lt;/a&gt; to learn more, ask questions, or share anything cool you’re up to!&lt;/p&gt;</description><author>Chris Smith</author><author>Christian Nunciato</author><author>Laura Santamaria</author><category>announcements</category><category>features</category><category>cloud-engineering</category><category>policy-as-code</category><category>pulumi-cloud</category><category>infrastructure-as-code</category><category>pulumi-enterprise</category><category>continuous-delivery</category></item><item><title>2021 End of Year Review</title><link>https://www.pulumi.com/blog/2021-end-of-year-review/</link><pubDate>Fri, 31 Dec 2021 10:26:47 -0600</pubDate><guid>https://www.pulumi.com/blog/2021-end-of-year-review/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/2021-end-of-year-review/index.png" /&gt;
&lt;p&gt;It’s the end of the 2021 calendar year here at Pulumi, and like everyone, we’re counting down until 2022 while looking back at our year. We’ve had a very exciting year! In case you missed anything from our past year, here’s a rundown of the top stories from Pulumi:&lt;/p&gt;
&lt;h3 id="january"&gt;January&lt;/h3&gt;
&lt;p&gt;Pulumi became &lt;a href="https://www.pulumi.com/blog/pulumis-soc-2-milestone/"&gt;SOC2 certified&lt;/a&gt; in early January 2021.&lt;/p&gt;
&lt;h3 id="february"&gt;February&lt;/h3&gt;
&lt;p&gt;We brought support for all four official Pulumi languages to &lt;a href="https://www.pulumi.com/blog/create-eks-clusters-in-your-favorite-language/"&gt;EKS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We released &lt;a href="https://www.pulumi.com/blog/automation-api-python/"&gt;Python support&lt;/a&gt; for our powerful Automation API.&lt;/p&gt;
&lt;h3 id="march"&gt;March&lt;/h3&gt;
&lt;p&gt;We immediately followed up with releasing &lt;a href="https://www.pulumi.com/blog/automation-api-dotnet"&gt;C# support&lt;/a&gt; for the Automation API.&lt;/p&gt;
&lt;p&gt;The Azure Native provider, which communicates directly with the Azure resource model, &lt;a href="https://www.pulumi.com/blog/full-coverage-of-azure-resources-with-azure-native/"&gt;went GA&lt;/a&gt; (general availability) after a period of being in beta.&lt;/p&gt;
&lt;h3 id="april"&gt;April&lt;/h3&gt;
&lt;p&gt;We had a bit of fun on April Fool’s Day with &lt;a href="https://www.pulumi.com/blog/pulumi-interstellar/"&gt;Pulumi Interstellar&lt;/a&gt; (if you don’t understand April Fool’s Day because it’s not something you have in your country, please know this is a joke for fun).&lt;/p&gt;
&lt;p&gt;The biggest news for April, though, was our PulumiUP event, where we showcased new releases for the Pulumi platform. Here are the big announcements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-3-0/"&gt;Pulumi 3.0&lt;/a&gt;: Automation API, native Providers, Packages and Components, improved SDKs for Python and Go, and new integrations and features.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumiup-pulumi-packages-multi-language-components/"&gt;Pulumi Packages and multi-language Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.pulumi.com/blog/pulumiup-google-native-provider/"&gt;Google Cloud Native Provider&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="may"&gt;May&lt;/h3&gt;
&lt;p&gt;We took a bit of a break in May from the blog to be heads down working on the next features after the excitement of PulumiUP. We did talk a bit about &lt;a href="https://www.pulumi.com/blog/deploy-applications-with-aws-app-runner/"&gt;integration with App Runner&lt;/a&gt;, though!&lt;/p&gt;
&lt;h3 id="june"&gt;June&lt;/h3&gt;
&lt;p&gt;We started posting our &lt;a href="https://www.pulumi.com/blog/pulumi-release-notes-m57/"&gt;release notes as regular updates&lt;/a&gt; to the blog.&lt;/p&gt;
&lt;p&gt;We took some time to &lt;a href="https://www.pulumi.com/blog/infrastructure-testing-concepts/"&gt;dive into testing infrastructure&lt;/a&gt; in one of our many educational articles.&lt;/p&gt;
&lt;p&gt;We worked with the community for a &lt;a href="https://www.pulumi.com/blog/multi-lang-hackathon/"&gt;hackathon on multi-language components&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We announced Pulumi Team Edition with usage-based pricing and a free tier to get you started and Pulumi Enterprise Edition with access control and more on the same &lt;a href="https://www.pulumi.com/blog/announcing-new-usage-based-pricing-for-your-whole-team/"&gt;usage-based pricing system&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="july"&gt;July&lt;/h3&gt;
&lt;p&gt;July was a month of education, with articles on Cloud Engineering as a concept, more on testing, and a new series on Kubernetes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/what-exactly-is-cloud-engineering/"&gt;Cloud Enginering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/testing-in-practice/"&gt;Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/kubernetes-fundamentals-part-one/"&gt;Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="august"&gt;August&lt;/h3&gt;
&lt;p&gt;We kicked off an entire series on Azure developers for this month. &lt;a href="https://www.pulumi.com/blog/top-5-things-for-azure-devs-intro/"&gt;Start here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="september"&gt;September&lt;/h3&gt;
&lt;p&gt;September saw preparations for Cloud Engineering Summit, with blog posts talking about the upcoming event. Still, we had time for more features!&lt;/p&gt;
&lt;p&gt;We announced a public preview of a &lt;a href="https://www.pulumi.com/blog/full-access-to-helm-features-through-new-helm-release-resource-for-kubernetes/"&gt;Helm Release resource&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We launched a &lt;a href="https://www.pulumi.com/blog/snowflake-provider-launch/"&gt;Provider for Snowflake&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We shipped the &lt;a href="https://www.pulumi.com/blog/pulumi-rest-api/"&gt;public release of the Pulumi REST API&lt;/a&gt;, which had been a behind-the-scenes powerhouse.&lt;/p&gt;
&lt;p&gt;We started supporting AWS Lambdas on &lt;a href="https://www.pulumi.com/blog/aws-lambda-functions-powered-by-graviton2/"&gt;Gravitron2 processors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We opened up our &lt;a href="https://www.pulumi.com/blog/relaunching-pulumis-public-roadmap/"&gt;roadmap to the public&lt;/a&gt; to vote on and discuss upcoming projects.&lt;/p&gt;
&lt;p&gt;And finally, just squeezing into the end of September, we launched the &lt;a href="https://www.pulumi.com/blog/announcing-aws-native/"&gt;public preview of the AWS Native Provider&lt;/a&gt;, powered by AWS&amp;rsquo;s Cloud Control API, so you can use Pulumi to work directly with the AWS resource model.&lt;/p&gt;
&lt;h3 id="october"&gt;October&lt;/h3&gt;
&lt;p&gt;Cloud Engineering Summit was our biggest event of the year, and you can enjoy all of the sessions over on &lt;a href="https://youtube.com/playlist?list=PLyy8Vx2ZoWlodkVaCTO3Y-3vya68J2c6y"&gt;PulumiTV&lt;/a&gt;. That being said, we still had a lot to share on the blog.&lt;/p&gt;
&lt;p&gt;We introduced &lt;a href="https://www.pulumi.com/blog/resource-methods-for-pulumi-packages/"&gt;resource methods for Pulumi Packages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We shipped the &lt;a href="https://www.pulumi.com/blog/pulumi-kubernetes-operator-1-0/"&gt;1.0 release of the Kubernetes Operator&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We delivered the &lt;a href="https://www.pulumi.com/blog/introducing-pulumi-registry/"&gt;Pulumi Registry&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="november"&gt;November&lt;/h3&gt;
&lt;p&gt;We started providing same-day support for &lt;a href="https://www.pulumi.com/blog/azure-container-apps/"&gt;Azure Container Apps&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We reworked &lt;a href="https://www.pulumi.com/blog/functions-accept-outputs/"&gt;functions to accept outputs&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="december"&gt;December&lt;/h3&gt;
&lt;p&gt;We started some more educational series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/cloud-systems-part-one/"&gt;Cloud Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/organizational-patterns-infra-repo/"&gt;Organizational Patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/improving-gitops-with-pulumi-operator/"&gt;GitOps with the Pulumi Operator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-and-beyond"&gt;… and Beyond&lt;/h3&gt;
&lt;p&gt;As we look forward to 2022, we’re not done yet! We’ve done a lot of things in 2021, and we’re on course to do a lot more in the next year. I’m excited that we’re all along for the ride, and we can’t wait to share more features and launches with you. Thanks for being with us, and here’s to 2022.&lt;/p&gt;
&lt;p&gt;By the way, did you know &lt;a href="https://www.pulumi.com/careers"&gt;we’re hiring&lt;/a&gt;?&lt;/p&gt;</description><author>Laura Santamaria</author><category>announcements</category></item><item><title>Announcing the Pulumi REST API</title><link>https://www.pulumi.com/blog/pulumi-rest-api/</link><pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-rest-api/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-rest-api/index.png" /&gt;
&lt;p&gt;Pulumi was designed to be highly extensible from the outset. That includes core languages and cloud providers, of course, but our community is often using Pulumi as a central part of building and connecting their cloud engineering and automation systems, using features like the Automation API. Today we are happy to announce the next major step in enabling these kind of scenarios: the Pulumi REST API. This REST API offers functionality to manage projects and stacks, cloud resources, policies, and more. It has, in fact, been there all along, powering the Pulumi SDK, CLI, and Console behind the scenes, although we haven&amp;rsquo;t fully documented or supported it until now. That changes today! We&amp;rsquo;ve already seen some amazing things built with this API and we&amp;rsquo;re excited to see what you build with it too.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Pulumi provides a lot of functionality out of the box. But we understand that modern cloud engineering systems are highly interconnected and complex, and that many teams have unique needs. Therefore, we set out to design the Pulumi platform to be extensible in many ways. The Pulumi client (SDK, CLI, etc) was designed to interoperate with the Pulumi server and, though the SDK has a specific set of needs, this protocol has always been designed to be public and easy to consume for custom scenarios and integrations.&lt;/p&gt;
&lt;h2 id="manage-stacks-updates-teams-and-more"&gt;Manage Stacks, Updates, Teams, and More&lt;/h2&gt;
&lt;p&gt;The Pulumi REST API is available at https&lt;nolink&gt;://api.pulumi.com and includes functionality to interact with and manipulate any kind of metadata managed by Pulumi. That includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Projects and Stacks&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;List all projects and stacks for a user or organization&lt;/li&gt;
&lt;li&gt;Get metadata about a specific stack, including stack config and resource states&lt;/li&gt;
&lt;li&gt;Transfer a stack between a user and/or organization&lt;/li&gt;
&lt;li&gt;Delete a stack&lt;/li&gt;
&lt;li&gt;Manage stack tags&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Previews and Updates&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;List all stack previews and updates&lt;/li&gt;
&lt;li&gt;Get the status of an ongoing or past stack preview or update&lt;/li&gt;
&lt;li&gt;List the detailed events occurring during a stack&amp;rsquo;s update, such as the resource changes, policy checks, or stdout/stderr messages&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organizations&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;List or manage users of an organization&lt;/li&gt;
&lt;li&gt;Manage RBAC teams and user roles within an organization&lt;/li&gt;
&lt;li&gt;List or manage access tokens within an organization&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Logs&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Get audit log events as JSON&lt;/li&gt;
&lt;li&gt;Export audit log events as CSV or CEF&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Authentication and authorization is governed by the Pulumi identity and RBAC systems. As we add functionality to the Pulumi SDK and Service, we are committed to shipping and supporting the underlying REST APIs. If it&amp;rsquo;s used in our web console or CLI, we want it to be available to so you can add custom features and functionality.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/pulumi-cloud/cloud-rest-api/"&gt;Read complete details about the REST API&lt;/a&gt; or keep reading for examples and scenarios.&lt;/p&gt;
&lt;h2 id="the-rest-api-for-cloud-engineering"&gt;The REST API for Cloud Engineering&lt;/h2&gt;
&lt;p&gt;We have already seen Cloud Engineering teams using the Pulumi REST API to build all sorts of custom functionality. These new capabilities are especially powerful when used in combination with the &lt;a href="https://www.pulumi.com/automation/"&gt;Automation API&lt;/a&gt;, which lets you use infrastructure as code as a library embedded into a larger system, and &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/webhooks/"&gt;Webhooks&lt;/a&gt;, which lets you invoke your own REST API in response to a Pulumi event such as a stack update.&lt;/p&gt;
&lt;p&gt;Examples of scenarios we&amp;rsquo;ve seen include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Custom dashboards, including &amp;ldquo;click to deploy&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Programmatically getting stack outputs to integrate with other automation needs.&lt;/li&gt;
&lt;li&gt;Making more metadata-driven Automation API projects that consume project, stack, config, resource, or other service state to make provisioning decisions.&lt;/li&gt;
&lt;li&gt;Exposing a full set of projects and stacks into other systems, such as a portal for managed service providers.&lt;/li&gt;
&lt;li&gt;Querying resource metadata to find stacks containing resources with certain properties (such as, for example, in response to a security incident).&lt;/li&gt;
&lt;li&gt;Managing teams, users, and access tokens for specific automation needs.&lt;/li&gt;
&lt;li&gt;Pulling audit logs into other systems (e.g., SIEM).&lt;/li&gt;
&lt;li&gt;Enforcing certain policies such as ensuring that stack tags are applied consistently.&lt;/li&gt;
&lt;li&gt;Performing automated resource drift and remediation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With the Pulumi cloud engineering platform, if you can dream it, you can build it!&lt;/p&gt;
&lt;h2 id="example-finding-stacks-with-rds-databases"&gt;Example: Finding Stacks with RDS Databases&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s take a look at the Pulumi REST API in action. This example will demonstrate querying stacks and resource metadata across an entire organization.&lt;/p&gt;
&lt;p&gt;Imagine that there is suddenly a MySQL vulnerability or EOL notice that we need to respond to. We use Amazon RDS and would like to query our entire organization to find projects and stacks that currently have RDS databases deployed using version 5.6 of MySQL. Thankfully the Pulumi REST API makes all metadata about all of my cloud projects and stacks — across all clouds — available for easy querying and inspection. So a dozen lines of bash will do the trick!&lt;/p&gt;
&lt;p&gt;The first step is to &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/accounts#access-tokens"&gt;generate an API access token&lt;/a&gt;. The Pulumi Service lets you manage many access tokens (the same as what&amp;rsquo;s used for &lt;code&gt;pulumi login&lt;/code&gt;) and it&amp;rsquo;s easiest to just create one specific to this project&amp;rsquo;s purpose. This will let us revoke that token after we&amp;rsquo;re done and know that there is no lingering access.&lt;/p&gt;
&lt;p&gt;To do that, go to &lt;a href="https://app.pulumi.com/account/tokens"&gt;https://app.pulumi.com/account/tokens&lt;/a&gt; (or click your avatar in the upper right and go to Settings, where you&amp;rsquo;ll see Access Tokens on the left-hand nav):&lt;/p&gt;
&lt;p&gt;&lt;img src="access-tokens-1.png" alt="Access Tokens"&gt;&lt;/p&gt;
&lt;p&gt;Click the Create Token button. That will pop a box that lets us enter a description:&lt;/p&gt;
&lt;p&gt;&lt;img src="access-tokens-2.png" alt="Create a Token"&gt;&lt;/p&gt;
&lt;p&gt;This then gives us the access token text. We need to copy it and put it somewhere for safekeeping, because once we leave this page, we won&amp;rsquo;t be able to recover it:&lt;/p&gt;
&lt;p&gt;&lt;img src="access-tokens-3.png" alt="Access Token Created"&gt;&lt;/p&gt;
&lt;p&gt;We will use this token for all API calls and the token dictates what authorization we will have to perform actions within a given user or organization account. As we will see, all APIs pertain to given permission scopes, much like GitHub, which will determine the permissions granted. If we&amp;rsquo;re using &lt;code&gt;curl&lt;/code&gt;, for example, we will pass the &lt;code&gt;&amp;quot;Authorization: token XYZ&amp;quot;&lt;/code&gt; header, with &lt;code&gt;-H&lt;/code&gt;, as &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/cloud-rest-api/#authentication"&gt;described in the Authorization section of the REST API documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If we forget to do that, we&amp;rsquo;ll receive a 4xx error. For instance, 401:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;code&amp;#34;&lt;/span&gt;:401,&lt;span class="s2"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;Unauthorized: No credentials provided or are invalid.&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To test that this is working, let&amp;rsquo;s curl the /api/user endpoint, which gives us information about the currently &amp;ldquo;logged in&amp;rdquo; user (i.e., the user to which the token we&amp;rsquo;re using belongs):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Authorization: token pul-fa..REDACTED..fa&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://api.pulumi.com/api/user
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;githubLogin&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;joeduffy&amp;#34;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;Joe Duffy&amp;#34;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;joe@pulumi.com&amp;#34;&lt;/span&gt;,...&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OK, looks like everything&amp;rsquo;s working! Let&amp;rsquo;s get back to our scenario of finding unpatched RDS instances. To do that, well use a combination of &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, and &lt;code&gt;jq&lt;/code&gt; (payloads are JSON).&lt;/p&gt;
&lt;p&gt;Here is the full script. We set up the auth header as noted above, enumerate all stacks in the &lt;code&gt;acmecorp&lt;/code&gt; organization, export the stack&amp;rsquo;s metadata including its resources, and then check to see if there are any RDS instances with &lt;code&gt;&amp;quot;mysql&amp;quot;&lt;/code&gt; version &lt;code&gt;&amp;quot;5.7&amp;quot;&lt;/code&gt; that we need to patch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Set up our auth token info.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;AUTH_HEAD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Authorization: token &lt;/span&gt;&lt;span class="nv"&gt;$PAPI_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ORG_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;acmecorp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enumerate all stacks in our organization.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; stack in &lt;span class="k"&gt;$(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; curl -s -H &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$AUTH_HEAD&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://api.pulumi.com/api/user/stacks?organization&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ORG_NAME&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; jq -c &lt;span class="s1"&gt;&amp;#39;.stacks[]&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;ORG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$stack&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.orgName&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;PROJ&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$stack&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.projectName&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;STACK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$stack&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.stackName&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Query each stack to see if we have RDS instances.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;RDS_INSTANCES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;curl -s -H &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$AUTH_HEAD&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://api.pulumi.com/api/stacks/&lt;span class="nv"&gt;$ORG&lt;/span&gt;/&lt;span class="nv"&gt;$PROJ&lt;/span&gt;/&lt;span class="nv"&gt;$STACK&lt;/span&gt;/export &lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; jq -c &lt;span class="s1"&gt;&amp;#39;.deployment?.resources[]? | select (.type == &amp;#34;aws:rds/instance:Instance&amp;#34;)&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; ! -z &lt;span class="nv"&gt;$RDS_INSTANCES&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; rds in &lt;span class="nv"&gt;$RDS_INSTANCES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# For each RDS instance, warn on any instance that is &amp;#39;mysql&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# version &amp;#39;5.7&amp;#39;, and error out so we can patch our instances!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;URN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$rds&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.urn&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;ENGINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$rds&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.engine&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;ENGINE_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$rds&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.engineVersion&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ENGINE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mysql&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ENGINE_VERSION&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;5.7&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;#34;error: vulnerable MySQL 5.7 RDS instance found:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;#34; URN=&lt;/span&gt;&lt;span class="nv"&gt;$URN&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;#34; ORG/PROJ/STACK=&lt;/span&gt;&lt;span class="nv"&gt;$ORG&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$PROJ&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$STACK&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;#34; DETAILS=&lt;/span&gt;&lt;span class="nv"&gt;$rds&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now all we need to do is generate a token, set our &lt;code&gt;PAPI_TOKEN&lt;/code&gt; environment variable to contain it, and run this script — voila, all of our vulnerable RDS databases will be revealed. Now we can go update those stacks, perhaps programmatically with the &lt;a href="https://www.pulumi.com/automation/"&gt;Automation API&lt;/a&gt;, and then possibly even &lt;a href="https://www.pulumi.com/crossguard/"&gt;write a Policy as Code rule&lt;/a&gt; to prohibit new 5.6 instances from getting created in the future.&lt;/p&gt;
&lt;h2 id="give-it-a-try-today"&gt;Give It a Try Today&lt;/h2&gt;
&lt;p&gt;As we have seen, the Pulumi REST API gives us easy access to projects, stacks, cloud resources, teams, and more. It is now generally available to all users of the Pulumi Service, both free and paying customers. To give it a try today, &lt;a href="https://app.pulumi.com/signup"&gt;sign up for your free account now&lt;/a&gt;, give our &lt;a href="https://www.pulumi.com/docs/get-started/"&gt;Getting Started guide&lt;/a&gt; a try, and then check out the &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/cloud-rest-api/"&gt;Pulumi REST API documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We can&amp;rsquo;t wait to see the powerful automation you build for your team using the Pulumi REST API! Have fun spelunking in the cloud.&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>rest-api</category></item><item><title>Pulumi Interstellar</title><link>https://www.pulumi.com/blog/pulumi-interstellar/</link><pubDate>Thu, 01 Apr 2021 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-interstellar/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-interstellar/index.png" /&gt;
&lt;p&gt;Earth is just the beginning. We are putting down the foundations of space so our children can build their future. At Pulumi, we are committed to making life multi-planetary. We are excited to announce Pulumi Interstellar, a collection of resource providers that will help us reach the future of a space-faring and multi-planet species.&lt;/p&gt;
&lt;p&gt;For our first offering of space related resource providers, we have aligned closely with the current priorities in the space industry today:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Getting to New Planets&lt;/li&gt;
&lt;li&gt;Making Planets Habitable&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We believe that solving those two areas for our customers will enable people to build the future they imagine, on the planets they desire to inhabit. One challenging aspect of achieving our goals is that each new planet represents a different operational environment.&lt;/p&gt;
&lt;p&gt;One might think the right solution for provisioning and managing resources in space would be a proprietary domain-specific language designed from the ground up to operate in these new environments. However 10 out of 10 leading rocket scientists confirm that the heterogeneous diversity of existing programming languages allows us to move faster and with less frustration.&lt;/p&gt;
&lt;p&gt;In the following sections we will take a closer look at the two main areas defined above and how you too can begin building the future in a familiar programming language like JavaScript, TypeScript, Python, Go, or .NET.&lt;/p&gt;
&lt;h2 id="rockets-as-code"&gt;Rockets As Code&lt;/h2&gt;
&lt;p&gt;Rockets are the first step to making humans a multi-planet species, they enable you and your resources to travel to new planets. Today, we are extremely excited to introduce the Pulumi Rocket Provider, which allows users to configure rocket fuel requirements, initiation sequences, configure deployment payloads, reserve seats, and much more.&lt;/p&gt;
&lt;p&gt;In the initial release of the Rocket Provider we are happy to enable two key use cases: Resource Deployment and Planetary Travel.&lt;/p&gt;
&lt;h3 id="resource-deployment"&gt;Resource Deployment&lt;/h3&gt;
&lt;div&gt;
&lt;pulumi-chooser type="language" options="typescript,python,csharp,go" mode=""&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="typescript" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;tyrell&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/tyrell&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;engineId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getEngine&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;owners&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;420&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;mostRecent&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;SuperDraco&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tyrell/engines/super-draco-15.03-*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;spaceship&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Edward Isreal&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;instanceType&lt;/span&gt;: &lt;span class="kt"&gt;tyrell.spaceship.InstanceTypes.interplanetary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;engine&lt;/span&gt;: &lt;span class="kt"&gt;engineId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;capability&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kuiper_belt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="python" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pulumi_tyrell&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;rocket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;spaceship&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;engine_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rocket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;owners&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;420&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;most_recent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;filters&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;[
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; {name: &amp;#34;SuperDraco&amp;#34;, values: [&amp;#34;tyrell/engines/super-draco-15.03-*&amp;#34;]}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; ]&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;spaceship&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spaceship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Edward Isreal&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instanceType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;spaceship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instance_types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;interplanetary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;engineId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;capability&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;kuiper_belt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="csharp" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Pulumi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Tyrell&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyStack&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;MyStack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;engineId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Rocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Rocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetEngineArgs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Owners&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;420&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;MostRecent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Filters&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;SuperDraco&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;values&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;tyrell/engines/super-draco-15.03-*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;spaceship&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InstanceArgs&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;InstanceType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InstanceTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Interplanetary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;EngineId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;engineId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Capability&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;kuiper_belt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="go" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/pulumi/pulumi-tyrell/sdk/v3/go&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/pulumi/pulumi/sdk/v2/go/pulumi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;engineId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Rocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Rocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GetEngineArgs&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Owners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;420&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MostRecent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nx"&gt;RocketEngineFilter&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;RocketEngineFilter&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SuperDraco&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;tyrell/engines/super-draco-15.03-*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spaceship&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Edward Isreal&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceArgs&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Interplanetary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;EngineId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;engineId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Capability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;kuiper_belt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;/pulumi-chooser&gt;
&lt;/div&gt;
&lt;p&gt;On Day 1 you can deploy resources via reusable rockets. By declaring a payload on your Rocket, you tell Pulumi to deliver the payload to the location specified. Resource Deployments will be particularly useful when configuring a new planet in the initial stages, as you can deploy new resources and terraforming equipment in a consistent, repeatable, and scalable manner.&lt;/p&gt;
&lt;p&gt;Once the rocket arrives at its destination, Pulumi’s Space AI Assistant, nicknamed IRWIN, will take control to ensure your resources are deployed efficiently and correctly. By using Resource Deployments you can ensure your infrastructure and workloads are up and running before arriving on your new planet.&lt;/p&gt;
&lt;p&gt;&lt;img src="spaceship.png" alt="Spaceship"&gt;&lt;/p&gt;
&lt;h3 id="planetary-travel"&gt;Planetary Travel&lt;/h3&gt;
&lt;div&gt;
&lt;pulumi-chooser type="language" options="typescript,python,csharp,go" mode=""&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="typescript" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passengers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;passengers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;seats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PassengerGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Robinsons&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;spaceshipId&lt;/span&gt;: &lt;span class="kt"&gt;spaceship.then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;seats&lt;/span&gt;: &lt;span class="kt"&gt;passengers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;departure&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Luna&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Mars&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;berth&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Colonist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="python" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pulumi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;passengers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;passengers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;seats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tyrell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tyrell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PassengerGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Robinsons&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;spaceshipId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;spaceship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;seats&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;passengers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;departure&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Luna&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Mars&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;berth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Colonist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="csharp" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;passengers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;passengers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;seats&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PassengerGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Robinsons&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PassengerGroupArgs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SpaceshipId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Seats&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;passengers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Departure&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Luna&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Destination&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Mars&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Berth&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Colonist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="go" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;passengers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;passengers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;seats&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PassengerGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Robinsons&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;tyrell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PassengerGroupArgs&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SpaceshipId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spaceship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Seats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;passengers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Departure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Luna&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mars&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Berth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Colonist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;/pulumi-chooser&gt;
&lt;/div&gt;
&lt;p&gt;Once a planet is habitable and configured to your specifications, you will need a way to travel to your new home. Simply adding a &lt;code&gt;seats&lt;/code&gt; argument to any Rocket will reserve those seats (as they eventually become available).&lt;/p&gt;
&lt;p&gt;When your program completes deployment, you will receive a reservation confirmation via the email you used to register for the Pulumi Service. If you are an open source user, you will need to provide a valid email address via the &lt;code&gt;--confirmation-email&lt;/code&gt; flag to receive your confirmation email.&lt;/p&gt;
&lt;h2 id="terraforming-as-code"&gt;Terraforming As Code&lt;/h2&gt;
&lt;p&gt;One of the most challenging obstacles preventing humans from becoming a multi-planet species is that Earth is the only planet in the known solar system that supports life. While there are many options for making other planets liveable, the team at Pulumi believes in the two step model towards habitability.&lt;/p&gt;
&lt;p&gt;First, we need to provision dome-based communities in a repeatable and scalable manner. Once we have established our dome communities, we can then terraform any planet using the latest technology, i.e., nuclear missiles.&lt;/p&gt;
&lt;h3 id="dome-based-communities"&gt;Dome-Based Communities&lt;/h3&gt;
&lt;div&gt;
&lt;pulumi-chooser type="language" options="typescript,python,csharp,go" mode=""&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="typescript" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;weyland&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/weyland-yutani&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;domeId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDome&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;owners&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;099720109477&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;mostRecent&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;weyland-yutanu/terraforming/acheron-*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;terradome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hadley&amp;#39;s Hope&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;instanceType&lt;/span&gt;: &lt;span class="kt"&gt;weyland.dome.InstanceType.LV_246&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;dome&lt;/span&gt;: &lt;span class="kt"&gt;domeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;atmospheric-processor&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="python" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pulumi_weyland_yutani&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dome&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dome&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_dome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;owners&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;099720109477&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;most_recent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;filters&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;[
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; {name: &amp;#34;BasicDome&amp;#34;, values: [&amp;#34;weyland-yutanu/terraforming/acheron-*&amp;#34;]}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; ]&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;terradome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dome&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hadley&amp;#39;s Hope&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instance_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dome&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instance_type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lv_246&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dome&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dome&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;atmospheric-processor&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="csharp" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Pulumi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;WeylandYutani&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WeylandYutani&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyStack&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;MyStack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dome&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WeylandYutani&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WeylandYutani&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDomeArgs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Owners&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;099720109477&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;MostRecent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Filters&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;BasicDome&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;values&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;weyland-yutanu/terraforming/acheron-*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;terradome&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WeylandYutani&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hadley&amp;#39;s Hope&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Yutani&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InstanceArgs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;InstanceType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LV_246&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Dome&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;atmospheric-processor&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pulumi-choosable type="language" values="go" mode=""&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/pulumi/pulumi-weyland-yutani/sdk/v3/go&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/pulumi/pulumi/sdk/v2/go/pulumi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetDome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GetDomeArgs&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Owners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;099720109477&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MostRecent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nx"&gt;RocketEngineFilter&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;RocketEngineFilter&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;BasicDome&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;weyland-yutanu/terraforming/acheron-*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;terradome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceArgs&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;weyland&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LV_246&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Dome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;atmospheric-processor&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pulumi-choosable&gt;
&lt;/div&gt;
&lt;/pulumi-chooser&gt;
&lt;/div&gt;
&lt;p&gt;The first step to establish humanity on other planets is to provision dome-based communities and build critical infrastructure and resources while we work to terraform the planet. Out of the box, Pulumi provides boilerplate communities that are flexible and resilient enough to support any use case.&lt;/p&gt;
&lt;p&gt;&lt;img src="dome.png" alt="Domes"&gt;&lt;/p&gt;
&lt;h3 id="nuclear-terraforming"&gt;Nuclear Terraforming&lt;/h3&gt;
&lt;p&gt;While we will not be able to support nuclear terraforming on Day 1, we are working extremely diligently to ensure our customers have access to state of the art terraforming techniques. We hope to bring a preview of Nuclear Terraforming to customers in early Q3 of 2022. Be on the lookout for monthly updates as we develop this new groundbreaking technology.&lt;/p&gt;
&lt;p&gt;&lt;img src="nuke.png" alt="Terraforming"&gt;&lt;/p&gt;
&lt;h2 id="how-to-get-started"&gt;How To Get Started&lt;/h2&gt;
&lt;p&gt;Getting started is as simple as getting started with any other Pulumi resource provider, you just need to download the package with your preferred language’s package manager, configure the provider, and then start building. All space resources are billed via Dogecoin, so you will need to provide a wallet address in your provider’s arguments.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pulumi config &lt;span class="nb"&gt;set&lt;/span&gt; --secret doge DilB3JrTyGm55FiMyRlhM7NZmfj0J9QVX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Don&amp;rsquo;t worry, we&amp;rsquo;ll encrypt your wallet address. Your Dogecoin wallet will go straight to your provider and Pulumi never receives or handles your secrets.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary&lt;/h2&gt;
&lt;p&gt;Today is one of the most exciting days in Pulumi&amp;rsquo;s short history and we are incredibly excited to partner with our customers and leading space companies to make our multi-planetary dreams a reality. We cannot wait to see what you’ll build!&lt;/p&gt;
&lt;div class="rounded shadow-md" style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe
src="//www.youtube.com/embed/oHg5SJYRHA0?rel=0"
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;"
title="Pulumi Interstellar"
srcdoc="&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img{position:absolute;width:100%;top:0;bottom:0;margin:auto}&lt;/style&gt;&lt;a href=https://www.youtube.com/embed/oHg5SJYRHA0?autoplay=1&gt;&lt;img src='https://www.pulumi.com/blog/pulumi-interstellar/youtube-preview-interstellar.png' alt='Pulumi Interstellar'&gt;&lt;/a&gt;"
&gt;&lt;/iframe&gt;
&lt;/div&gt;</description><author>Zack Chase</author><author>Sophia Parafina</author><category>announcements</category><category>april-fools</category></item><item><title>Pulumi raises Series B to build the future of Cloud Engineering</title><link>https://www.pulumi.com/blog/series-b/</link><pubDate>Tue, 27 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/series-b/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/series-b/index.png" /&gt;
&lt;p&gt;Today I&amp;rsquo;m thrilled to &lt;a href="https://info.pulumi.com/press-release/series-b-announcement"&gt;announce&lt;/a&gt; that we&amp;rsquo;ve raised $37.5 million in Series B funding led by NEA with participation from existing investors, Madrona Venture Group and Tola Capital. We will use this funding to continue serving our fast-growing community of developers and infrastructure practitioners, making Cloud Engineering the new reality for organizations embracing the modern cloud in all aspects of how they ship software.&lt;/p&gt;
&lt;blockquote style="font-size: 1.5rem; background-color: #745687; color: #fff; text-align: center"&gt;
All software is cloud software,&lt;br&gt;
All developers are cloud developers,&lt;br&gt;
Infrastructure teams enable innovation.
&lt;/blockquote&gt;
&lt;h2 id="our-vision-for-the-modern-cloud-era"&gt;Our vision for the modern cloud era&lt;/h2&gt;
&lt;p&gt;All software is cloud software, all developers are cloud developers, and infrastructure teams enable innovation. This is Cloud Engineering. The cloud has become a competitive advantage for many companies, enabling new disruptive business models and end user experiences. Pulumi aims to enable this new way of building.&lt;/p&gt;
&lt;p&gt;We set out over three years ago to fundamentally rethink how teams create cloud software, with a belief that by standing on the shoulders of giants—leveraging our industry&amp;rsquo;s best languages, tools, and ecosystems for infrastructure—we could build a platform that uniquely enables developers and infrastructure experts alike to leverage the cloud in new ways. Despite having created languages like C# and TypeScript in our past lives, it struck our founding team that the world didn&amp;rsquo;t need another programming language, DSL, or YAML templating solution; instead, we could unleash creativity and collaboration by embracing the very languages our industry already knows and loves.&lt;/p&gt;
&lt;p&gt;This led to Pulumi&amp;rsquo;s &lt;a href="https://www.pulumi.com/docs/"&gt;unique approach to infrastructure as code&lt;/a&gt;, something we often call &amp;ldquo;&lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-software/"&gt;infrastructure as software&lt;/a&gt;.&amp;rdquo; Bring your own language, fire up your favorite editor, get full access to any or many clouds of your choice, and code away. Use standard libraries, package up and share and reuse your own best practices, or benefit from the community&amp;rsquo;s shared knowledge. Tap into all the goodness surrounding that language including familiar engineering superpowers like refactoring, interactive documentation and error checking in your IDE, debugging, test frameworks, and tools like code formatters and linters. All the while still getting the belts and suspenders of infrastructure as code: plan deployments by previewing them before they happen, get a full history of who deployed what and when, enforce security, compliance, and cost controls using policy as code, and more, all open source with an &lt;a href="https://www.pulumi.com/docs/iac/concepts/state-and-backends/"&gt;easy to use, but optional, SaaS backend&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to turbocharging infrastructure as code, this new approach has enabled new ways to program the cloud. When we were starting, we often heard that infrastructure is &amp;ldquo;too boring&amp;rdquo; or that general purpose languages instead of YAML was &amp;ldquo;too powerful.&amp;rdquo; On the contrary, the day that AWS put a REST API in front of spinning up a new virtual machine, the world changed irreversibly forever. By having an entire programming and resource model for interacting with cloud infrastructure, we can layer rich abstractions on top, and build bigger things out of smaller things, as we&amp;rsquo;ve always done with operating systems and the hardware/software interface. As a recent example and preview of things to come, &lt;a href="https://www.pulumi.com/blog/automation-api/"&gt;check out our new Automation API&lt;/a&gt;, something that simply isn&amp;rsquo;t possible with traditional YAML, JSON, or DSL-based infrastructure as code approaches.&lt;/p&gt;
&lt;p&gt;We also took an approach of integrating with many incredible partners. Pulumi now supports &lt;a href="https://www.pulumi.com/registry/"&gt;over 50 infrastructure providers&lt;/a&gt; including AWS, Azure, Google Cloud, Kubernetes, Alibaba, Auth0, Cloudflare, Datadog, Fastly, GitHub, GitLab, MongoDB, New Relic, and more; &lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/"&gt;over a dozen CI/CD integrations&lt;/a&gt; including Azure DevOps, CircleCI, GitHub Actions, GitLab CI, Jenkins, Octopus Deploy, and Spinnaker, for seamless and continuous delivery; and many identity providers, including Atlassian, Azure Active Directory, G Suite, GitHub, GitLab, and Okta. We &lt;a href="https://www.pulumi.com/docs/iac/clouds/kubernetes/guides/"&gt;embraced the Kubernetes ecosystem&lt;/a&gt; from day one, with great support for the entire Kubernetes API, managed clusters in all the major clouds (AWS EKS, AKS, GKE, etc.), Helm 2 and 3, Kustomize, Open Policy Agent (OPA)&amp;rsquo;s Rego language for policy as code, and a Kubernetes Operator, to name a few key features that are helping customers go to production with Pulumi and Kubernetes.&lt;/p&gt;
&lt;p&gt;Three years after starting on this journey, &lt;a href="https://www.pulumi.com/case-studies/"&gt;hundreds of customers&lt;/a&gt; and tens of thousands of end users have used Pulumi to leverage the cloud in transformative new ways, and we regularly hear from developers and infrastructure practitioners about how Pulumi has enabled them to do things previously thought impossible.&lt;/p&gt;
&lt;h2 id="cloud-engineering-is-here--and-growing-fast"&gt;Cloud Engineering is here — and growing fast&lt;/h2&gt;
&lt;p&gt;Cloud Engineering is bigger than just Pulumi. Last month, thousands of us tuned in to learn from industry leaders and expert practitioners at &lt;a href="https://www.youtube.com/playlist?list=PLyy8Vx2ZoWlpE6LxGPnfLfBQLbC7zX8FT"&gt;our first annual Cloud Engineering Summit&lt;/a&gt;. It is clear that Cloud Engineering is already here in a big way and becoming a standard for the most forward-thinking software teams.&lt;/p&gt;
&lt;p&gt;A lot has changed in only three years. At the time we conceived of Pulumi, there was significant fragmentation, uncertainty, and difficulty in adopting Kubernetes, Serverless, Docker, and continuous delivery for production workloads. Developers seldom touched infrastructure. Fast forward to today, and we now have managed container orchestrators, including Kubernetes, across all the major cloud providers, most organizations are shipping daily, and it&amp;rsquo;s evident that mixed workloads of containers, serverless, VMs, and data services are here to stay. And &lt;a href="https://www.cncf.io/blog/2020/08/14/state-of-cloud-native-development/"&gt;6.5 million developers have gone cloud native&lt;/a&gt;. Teams are now looking for solutions that help them go from idea to production faster than ever before, and Cloud Engineering is emerging as the best way to do just that.&lt;/p&gt;
&lt;p&gt;Cloud Engineering teams are also standardizing on platforms and workflows that go beyond ad-hoc &amp;ldquo;walls of YAML and mountains of Bash&amp;rdquo; approaches, taming cloud software complexity while also improving reliability and security with technologies like &lt;a href="https://www.pulumi.com/crossguard/"&gt;policy as code&lt;/a&gt;. Teams are also increasingly looking for cloud-agnostic platforms due the reality of multi-cloud, whether that&amp;rsquo;s because they need to ship code to multiple cloud providers, manage Kubernetes resources in addition to cloud infrastructure, manage hosted SaaS infrastructure services by vendors like Cloudflare, Datadog, MailChimp, or MongoDB alongside their cloud infrastructure, or all of the above.&lt;/p&gt;
&lt;p&gt;Because all software is cloud software, every software organization in the world needs a Cloud Engineering Platform. We are happy to be that very platform for many of the world&amp;rsquo;s most innovative companies, and look forward to helping many more customers disrupt their own industries as the cloud continues to transform modern businesses.&lt;/p&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;We remain focused on Pulumi&amp;rsquo;s mission to enable Cloud Engineers of all backgrounds, developers and infrastructure experts alike, to collaborate and do their best work together. We have made great progress in three years, laying a foundation that helps to democratize access to cloud infrastructure. But we&amp;rsquo;re only just getting started.&lt;/p&gt;
&lt;p&gt;So, where do we go from here?&lt;/p&gt;
&lt;p&gt;We will continue ensuring Pulumi is unquestionably the best infrastructure as code platform available. Features like the Automation API are enabling groundbreaking ways to use cloud infrastructure, powering entire platforms that themselves are powering entire organizations and new cloud products. We are also hard at work creating libraries with built-in best practices, new workshops and educational material, and simpler user experiences, all with the aim of making the cloud easier to use than ever before.&lt;/p&gt;
&lt;p&gt;We aren&amp;rsquo;t going to stop there. This foundation also enables new and exciting product experiences. Although all software is becoming cloud software in a meaningful way, the cloud&amp;rsquo;s capabilities aren&amp;rsquo;t yet as easy to harness in our applications as a standard operating system&amp;rsquo;s are. The next phase of our journey will tackle this problem.&lt;/p&gt;
&lt;p&gt;Pulumi is and will continue to be the Cloud Engineering Platform powering the world&amp;rsquo;s most innovative companies and teams. All software is cloud software, all developers are cloud developers, and infrastructure teams are central to enabling this innovation—and this Series B fundraise will help to ensure we realize the full potential of this vision!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to take a moment to thank our customers. Our community has grown into an inclusive and collaborative place, reflecting our own company values. One of those values says, &amp;ldquo;our own success is directly enabled by the success of our customers,&amp;rdquo; which we remember every day by helping you transform and innovate. We could not have done it without your support and you will continue to be our guiding light for the future.&lt;/p&gt;
&lt;p&gt;To the clouds and beyond!&lt;/p&gt;
&lt;p&gt;Joe&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Pulumi Wins 2020 Gartner Cool Vendor Award</title><link>https://www.pulumi.com/blog/gartner-cool-vendor-award/</link><pubDate>Thu, 28 May 2020 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/gartner-cool-vendor-award/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/gartner-cool-vendor-award/index.png" /&gt;
&lt;p&gt;Pulumi is honored to be named as one of only three vendors in the &lt;a href="https://info.pulumi.com/press-release/gartner-cool-vendor-5_28_2020"&gt;2020 Gartner Cool Vendor for Agile and DevOps report, published on May 28th, 2020&lt;/a&gt;. Being recognized in this way is a strong validation of Pulumi&amp;rsquo;s impact thanks to our more modern approach to Infrastructure as Code and approaches to building cloud software. Vendors can only be selected once and in only one category making this an exclusive award.&lt;/p&gt;
&lt;h2 id="what-makes-a-cool-vendor"&gt;What Makes a Cool Vendor&lt;/h2&gt;
&lt;p&gt;To be a Gartner Cool vendor, a product must be considered innovative, impactful, and intriguing. Vendors are scored on a scale of 1-10 across the following areas: technology, use of technology, business model, transformative nature, and newness. Vendor claims are rigorously verified by Gartner analysts who speak to customers to confirm that the technology works.&lt;/p&gt;
&lt;p&gt;By using common programming languages such as JavaScript, TypeScript, Python, C#, and Go to deploy infrastructure to any cloud, Pulumi has fundamentally changed the Infrastructure as Code landscape, enabling developers and operators to work better together. The impact on organizations is immediate. Instead of copying YAML or using a DSL, companies can write code to deploy infrastructure using industry best practices for development such as unit and integration testing, versioning, and error correction in IDEs. Moreover, infrastructure can be abstracted into reusable components to standardize on best practices while shipping faster with confidence.&lt;/p&gt;
&lt;h2 id="cool-features"&gt;Cool Features&lt;/h2&gt;
&lt;p&gt;Here is what we think makes Pulumi stand out from the rest.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open-source meets SaaS.&lt;/strong&gt; We do everything in the open, and the entire platform is available on &lt;a href="https://github.com/pulumi"&gt;GitHub&lt;/a&gt;. The Individual Edition includes the core provisioning engine, language and cloud providers, testing, Policy as Code, secrets management, and over a dozen CI/CD integrations. You can use Pulumi entirely offline or &lt;a href="https://www.pulumi.com/pricing/"&gt;our SaaS for state management and team collaboration&lt;/a&gt;. We see strong community growth, and in fact, our community members are sharing and reusing best practices of their own!.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Any cloud, any language.&lt;/strong&gt; Pulumi pool chiller a consistent programming model for the breadth of every major cloud provider, including AWS, Azure, and GCP, among over three dozen more, and supporting cloud resources ranging from virtual machines to Kubernetes and everything in between. You have the freedom to choose your language and deploy on one cloud provider or any combination of providers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing.&lt;/strong&gt; Pulumi enables infrastructure unit tests with resource mocking, which massively accelerates testing and increases deployment velocity. You can perform integration testing by quickly spinning up an ephemeral environment with only the resources you need to test or test long-lived environments in your CI/CD pipelines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy as Code.&lt;/strong&gt; Go beyond IAMs and ACLs and write policies that enforce compliance, cost control, and security. You can even secure your software supply chain by requiring the latest cloud resource versions to ensure vulnerabilities have been patched. Pulumi’s policy engine is open source, and the Enterprise Edition SaaS offers advanced features for organization-wide controls.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And we like to think that our mascot, Pulumipus, is also pretty cool.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/gartner-cool-vendor-award/teenagerpus_2x.png" alt="&amp;ldquo;Pulumipus&amp;rdquo;"&gt;&lt;/p&gt;
&lt;p&gt;Although Pulumi is cool, we have hundreds of organizations worldwide that have decided to run their production infrastructure using Pulumi. &lt;a href="https://www.pulumi.com/case-studies/"&gt;Check out some select stories here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Be one of the cool kids today by &lt;a href="https://www.pulumi.com/docs/get-started/"&gt;giving Pulumi a try today&lt;/a&gt; &amp;ndash; it’s not just cool, but the future of Infrastructure as Code and, we think, the way all developers and operations teams will collaborate in the future.&lt;/p&gt;</description><author>Sophia Parafina</author><category>announcements</category></item><item><title>Announcing Pulumi 2.0, Now with Superpowers</title><link>https://www.pulumi.com/blog/pulumi-2-0/</link><pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-2-0/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-2-0/index.png" /&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;p&gt;This blog post announces Pulumi 2.0, which has been superseded by newer versions. For information about the latest Pulumi release, please refer to the &lt;a href="https://www.pulumi.com/docs/"&gt;current documentation&lt;/a&gt; and &lt;a href="https://github.com/pulumi/pulumi/releases"&gt;recent release notes&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Today we are excited to announce Pulumi 2.0, the next major stage in our journey as an open source project, company, and community. This release expands on our original vision of using your favorite languages and tools to do all things infrastructure as code, now with new cloud engineering superpowers that will help you and your team adopt modern cloud architectures.&lt;/p&gt;
&lt;div class="header-hero-actions mt-8 mb-4 text-center"&gt;
&lt;a class="btn btn-lg mr-2" href="https://www.pulumi.com/docs/quickstart"&gt;
Get Started
&lt;/a&gt;
&lt;a class="btn btn-lg btn-orange ml-2" href="https://www.pulumi.com/docs/"&gt;
Learn More
&lt;/a&gt;
&lt;/div&gt;
&lt;h2 id="what-is-pulumi"&gt;What is Pulumi?&lt;/h2&gt;
&lt;p&gt;We call Pulumi&amp;rsquo;s unique approach &lt;em&gt;Modern Infrastructure as Code&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Familiar Languages&lt;/strong&gt;. Use the best languages and tools to declare infrastructure and gain best-in-class productivity and engineering capabilities. Connect to existing communities and ecosystems and leverage world-class language and tooling innovation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multi-Cloud&lt;/strong&gt;. Adopt consistent workflows across any cloud(s) — public, private, or hybrid — while still using the full breadth and depth of your target cloud&amp;rsquo;s services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modern Architectures&lt;/strong&gt;. Although Pulumi works great for legacy workloads, it was born in a world of modern container, serverless, and cloud-native architectures. Feel free to mix and match these approaches as you modernize over time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cloud Engineering Teams&lt;/strong&gt;. By choosing Pulumi, you&amp;rsquo;re betting on your team. The whole team, in fact: developers, infrastructure and operations teams, and security engineers alike. Tackle cloud solutions together without technology or team silos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introducing-superpowers"&gt;Introducing Superpowers!&lt;/h2&gt;
&lt;p&gt;The main theme of 2.0 is something we&amp;rsquo;ve taken to calling &amp;ldquo;superpowers.&amp;rdquo; This isn&amp;rsquo;t just a buzzword we came up with — it&amp;rsquo;s something we keep hearing from happy end users.&lt;/p&gt;
&lt;h2 id="what-is-pulumi-20"&gt;What is Pulumi 2.0?&lt;/h2&gt;
&lt;p&gt;After &lt;a href="https://www.pulumi.com/blog/pulumi-1-0/"&gt;shipping 1.0 last year&lt;/a&gt;, we&amp;rsquo;ve been hard at work helping customers to succeed at their modern cloud projects. This has taken us beyond the basics to include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Provisioning&lt;/strong&gt;. All core language SDKs are now at parity, including all existing languages — &lt;a href="https://www.pulumi.com/docs/languages-sdks/javascript"&gt;Node.js (JavaScript, TypeScript)&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/languages-sdks/python/"&gt;Python&lt;/a&gt; — as well as the new additions to the family — &lt;a href="https://www.pulumi.com/docs/languages-sdks/dotnet"&gt;.NET (C#, F#, etc)&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/languages-sdks/go/"&gt;Go&lt;/a&gt;. We&amp;rsquo;ve also significantly expanded upon the supported cloud resource providers in the &lt;a href="https://www.pulumi.com/registry/"&gt;Registry&lt;/a&gt;, totalling above three dozen, and rolled out &lt;a href="https://www.pulumi.com/registry/"&gt;entirely new API documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Delivery&lt;/strong&gt;. As we&amp;rsquo;ve worked with customers to go from development to production, we&amp;rsquo;ve added &lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/"&gt;more CI/CD integrations&lt;/a&gt; as well as &lt;a href="https://www.pulumi.com/blog/pulumi-service-improvements_02-2020/"&gt;environment management capabilities to help at scale&lt;/a&gt;, such as &lt;a href="https://www.pulumi.com/docs/concepts/stack#stack-tags"&gt;project and stack tagging and filtering&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;. Customers are building their own platforms that use abstraction and packaging mechanisms, including our component model, to codify their own best practices. &lt;a href="https://www.pulumi.com/docs/iac/adopting-pulumi/migrating-to-pulumi/"&gt;New coexistence and migration options&lt;/a&gt; help to build larger systems out of many component parts, including those you haven&amp;rsquo;t been able to port to Pulumi yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Policy&lt;/strong&gt;. &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/"&gt;Our new policy as code framework, CrossGuard&lt;/a&gt;, lets you define policies using familiar languages and then apply those policies at deployment-time. This prevents mistakes from ever getting out the door, including cost, security, and compliance. &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/configuration/"&gt;Configurable policy packs&lt;/a&gt; let you write a single policy and apply it flexibly across your projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt;. Many customers are using a spectrum of techniques to &lt;a href="https://www.pulumi.com/docs/iac/concepts/testing/"&gt;validate their infrastructure in new ways&lt;/a&gt;. This includes &lt;a href="https://www.pulumi.com/docs/iac/concepts/testing/unit/"&gt;unit testing using familiar frameworks and new mocking capabilities&lt;/a&gt; through &lt;a href="https://www.pulumi.com/docs/iac/concepts/testing/integration/"&gt;integration testing for short- and long-lived environments&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="welcome-to-the-team-pulumipus"&gt;Welcome to the Team, Pulumipus!&lt;/h2&gt;
&lt;img src="https://www.pulumi.com/images/mascot/legacy/pulumipus.svg" style="max-width: 240px; float: right; margin-top: -80px; padding: 4px;"&gt;
&lt;p&gt;We&amp;rsquo;re also taking the opportunity to have a little fun with the launch and introducing a new mascot, &lt;em&gt;The Pulumipus&lt;/em&gt;. You may have met them already at an event or at PulumiHQ, and we&amp;rsquo;re happy to welcome them as the official mascot going forward.&lt;/p&gt;
&lt;p&gt;Expect The Pulumipus to pop up from time to time to help you out with your infrastructure superpowers!&lt;/p&gt;
&lt;h2 id="give-it-a-try-today"&gt;Give it a Try Today&lt;/h2&gt;
&lt;p&gt;Today is an exciting day for us, our customers, and our community — your passionate support and feedback shaped this release, and we thank you.&lt;/p&gt;
&lt;p&gt;To learn more, join us for our launch event next Wednesday, or just &lt;a href="https://www.pulumi.com/docs/get-started/"&gt;download Pulumi and give it a try&lt;/a&gt;. If you&amp;rsquo;re upgrading from Pulumi 1.0, &lt;a href="https://www.pulumi.com/docs/install/migrating-2.0"&gt;please see our migration guide&lt;/a&gt;.&lt;/p&gt;
&lt;div class="header-hero-actions mt-8 mb-8 text-center"&gt;
&lt;a class="btn btn-lg mr-2" href="https://www.pulumi.com/docs/quickstart"&gt;
Get Started
&lt;/a&gt;
&lt;a class="btn btn-lg btn-orange ml-2" href="https://www.pulumi.com/docs/"&gt;
Learn More
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Please tell your friends and colleagues — we will see you in &lt;a href="https://slack.pulumi.com"&gt;the Community Slack&lt;/a&gt;, where we look forward to hearing what you&amp;rsquo;re doing with your new superpowers!&lt;/p&gt;
&lt;p&gt;Joe&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Pulumi’s Coronavirus Plan</title><link>https://www.pulumi.com/blog/coronavirus-plan/</link><pubDate>Wed, 18 Mar 2020 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/coronavirus-plan/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/coronavirus-plan/index.png" /&gt;
&lt;p&gt;Together, we’re facing an unprecedented situation with the COVID-19 pandemic. In this note, I&amp;rsquo;d like to tell you about the steps we&amp;rsquo;ve taken to ensure the health of our employees, community, and to ensure business continuity throughout.&lt;/p&gt;
&lt;h2 id="to-our-customers"&gt;To our customers&lt;/h2&gt;
&lt;p&gt;First and foremost, our thoughts are with anyone impacted by the virus either directly or indirectly. We are taking the utmost precautions necessary to ensure the health of our employees and the community.&lt;/p&gt;
&lt;p&gt;At Pulumi, we are entirely customer and community-driven and have taken a number of steps to ensure business continuity. We know that stable infrastructure is critical to keeping your own business running smoothly and want you assure you that Pulumi is here for you as you focus on your own response to the situation.&lt;/p&gt;
&lt;p&gt;Cloud infrastructure can be an essential component in the fight against this pandemic — something we are keenly aware of as we have government and healthcare customers that must scale up their response. If you or someone you know may be able to benefit from our technology, please &lt;a href="https://pulumi.com/contact"&gt;contact us directly&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A cross-functional leadership team at Pulumi met early on and acted quickly, moving to remote work over 2 weeks ago. This same team regularly assesses recent developments and monitors local, state, federal, and international guidelines, to ensure that we react appropriately to the ever-changing situation.&lt;/p&gt;
&lt;p&gt;Here are some of the concrete steps we have taken.&lt;/p&gt;
&lt;h2 id="remote-work"&gt;Remote work&lt;/h2&gt;
&lt;p&gt;The Pulumi team is fortunate enough to have been remote-friendly since our inception, with many employees already outside of our Seattle HQ, including international employees who are ready to help our customers. Over 2 weeks ago, we made the quick decision to move to 100% remote temporarily so that employees are safe and to support social distancing initiatives.&lt;/p&gt;
&lt;p&gt;This shift ensures we are doing our utmost to support the containment of the disease spreading. Moving from remote-friendly to all-remote has required some changes, however, our own team has felt that it has overall pushed us to improve communication and knowledge sharing. &lt;a href="https://handbook.gitlab.com/handbook/company/culture/all-remote/"&gt;GitLab’s all-remote guide&lt;/a&gt; has been very helpful in this transition.&lt;/p&gt;
&lt;h2 id="software-as-a-service-continuity"&gt;Software as a service continuity&lt;/h2&gt;
&lt;p&gt;From day one, the Pulumi service was architected for continuous delivery without manual processes. We ship new features and improvements multiple times a week, every week, and this situation has not impacted that cadence. We have strong operations policies and procedures to respond to any situations that may arise.&lt;/p&gt;
&lt;p&gt;Expect to see the same great dependable service you’ve come to know with a steady stream of new features and improvements in the weeks ahead as we get ready for our major product launch in early April.&lt;/p&gt;
&lt;h2 id="leveraging-digital-channels"&gt;Leveraging digital channels&lt;/h2&gt;
&lt;p&gt;The demand for Pulumi content and education continues to grow and, even in the face of restricted travel, we will ramp it up further. Although many events worldwide we’d planned to sponsor or otherwise participate in have been canceled, we have shifted to working with customers through digital channels wherever we can.&lt;/p&gt;
&lt;p&gt;Our &lt;a href="https://pulumi.com/blog"&gt;blog&lt;/a&gt;, &lt;a href="https://slack.pulumi.com"&gt;Community Slack&lt;/a&gt;, and &lt;a href="https://www.youtube.com/channel/UC2Dhyn4Ev52YSbcpfnfP0Mw"&gt;PulumiTV YouTube channel&lt;/a&gt; are already great online resources, but we have significant new efforts in the works. We’re starting a &lt;a href="https://www.youtube.com/channel/UC2Dhyn4Ev52YSbcpfnfP0Mw"&gt;weekly live video stream called Modern Infrastructure as Code Wednesday&lt;/a&gt; featuring learnings from our deepest technical experts. We are having &lt;a href="https://pulumi-community.slack.com/archives/C01090N194P/p1584492996000400"&gt;our first online Hackathon&lt;/a&gt; this Thursday. Our major upcoming launch on April 22nd has now turned into a day full of online infrastructure content from our team, customers, and partners. &lt;a href="https://pulumi.com/events"&gt;Learn more details about these digital events and more here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please &lt;a href="https://pulumi.com/contact"&gt;drop us a note&lt;/a&gt; if you’d like us to participate in an online event, host a joint webinar, or want to see a specific topic covered.&lt;/p&gt;
&lt;h2 id="in-the-weeks-ahead"&gt;In the weeks ahead&lt;/h2&gt;
&lt;p&gt;We will continue meeting regularly as a leadership team, and talking to our customers and partners, so that we can evolve our strategy and take new measures for health, safety, and continuity purposes as appropriate. We will keep you updated.&lt;/p&gt;
&lt;p&gt;We are confident in what we are doing to keep our employees safe, continue delivering value and reliability in our products, and to keep Pulumi’s business functioning normally for our valued customers. Even as we deal with this pandemic, our entire team remains laser-focused on your success and, as always, if there is anything we can ever to do help with your own ever-changing needs, please &lt;a href="https://pulumi.com/contact"&gt;get in touch with us&lt;/a&gt;.&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>An Update on our Roadmap</title><link>https://www.pulumi.com/blog/pulumi-2020-update/</link><pubDate>Mon, 09 Mar 2020 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-2020-update/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-2020-update/index.png" /&gt;
&lt;p&gt;2020 is off to a big start for us! The .NET and Go SDKs are now more idiomatic and easier to use, Policy as Code is ready for prime-time, and many other useful features and foundational improvements have been released. I&amp;rsquo;d like to take a moment to highlight these improvements and ask for feedback — we want to make sure these new features work great for you!&lt;/p&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/languages-sdks/dotnet/"&gt;Our .NET SDK&lt;/a&gt; has come a long way. We recently tidied up the API surface area to feel more familiar to .NET developers, added C# getting started guides for &lt;a href="https://www.pulumi.com/docs/iac/get-started/aws/?language=csharp"&gt;AWS&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/iac/get-started/azure/?language=csharp"&gt;Azure&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/iac/get-started/aws/?language=csharp"&gt;GCP&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/iac/get-started/aws/?language=csharp"&gt;Kubernetes&lt;/a&gt;, and added many new examples. We also closed the gap on core Pulumi features missing from the initial release, including &lt;a href="https://www.pulumi.com/docs/concepts/resources/#aliases"&gt;aliases&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/concepts/resources/#transformations"&gt;transformations&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/concepts/stack/#stackreferences"&gt;StackReference&lt;/a&gt;, and .NET versions of the &lt;a href="https://github.com/pulumi/pulumi-kubernetes"&gt;Kubernetes&lt;/a&gt;, &lt;a href="https://github.com/pulumi/pulumi-docker"&gt;Docker&lt;/a&gt;, and &lt;a href="https://github.com/pulumi/pulumi-terraform"&gt;Terraform remote state&lt;/a&gt; packages.&lt;/p&gt;
&lt;p&gt;The remaining areas to improve for the .NET SDK include making the API documentation available in C# (details are below in the &amp;ldquo;still to come&amp;rdquo; section), migrating to .NET Core 3.1, and enabling you to test your infrastructure using familiar C# tools more easily.&lt;/p&gt;
&lt;h2 id="go"&gt;Go&lt;/h2&gt;
&lt;p&gt;We completely overhauled &lt;a href="https://www.pulumi.com/docs/languages-sdks/go/"&gt;our Go SDK&lt;/a&gt; to be more idiomatic and easier to use. &lt;a href="https://www.pulumi.com/blog/go-sdk-road-to-2/"&gt;This blog post&lt;/a&gt; provides an overview of this new programming model.&lt;/p&gt;
&lt;p&gt;The major change in the Go SDK is that we previously used &lt;code&gt;map[string]interface{}&lt;/code&gt; types in many places instead of properly-typed data structures. No more! Instead, you now get strong typing for all Go resource APIs across all providers, including AWS, Azure, GCP, and Kubernetes. The improvements here are huge, as you can see &lt;a href="https://github.com/pulumi/examples/commit/b88f385a8951f81fe41cb4f40eb940b074e9263b#diff-07803f7bc3bff97871e6e3eea7287cb8"&gt;in this before/after PR&lt;/a&gt;. Examples and documentation have been updated to this new style.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/reference/pkg?language=golang"&gt;GoDocs are now here&lt;/a&gt; for all of our providers and we&amp;rsquo;ve also added Go versions to our getting started guides for &lt;a href="https://www.pulumi.com/docs/iac/get-started/aws/?language=golang"&gt;AWS&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/iac/get-started/azure/?language=golang"&gt;Azure&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/iac/get-started/gcp/?language=golang"&gt;GCP&lt;/a&gt;, and have many more improvements on the way.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve also added support for core Pulumi features, including &lt;a href="https://www.pulumi.com/docs/concepts/resources#aliases"&gt;aliases&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/concepts/resources#transformations"&gt;transformations&lt;/a&gt;. A few remain to flesh out like adding Go support for our Kubernetes, Docker, and Terraform remote state packages. The biggest change to come is retiring Dep in favor of Go modules everywhere.&lt;/p&gt;
&lt;h2 id="policy-as-code"&gt;Policy as Code&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/"&gt;CrossGuard, our Policy as Code framework&lt;/a&gt;, is now ready to take for a serious test drive. CrossGuard lets you to write policies in real code and enforce them during updates. Policies can check for anything; however, common checks include security, compliance, cost management, and general and team best practices. You can write your policy packages or use off-the-shelf policy packs like our &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/awsguard/"&gt;AWSGuard&lt;/a&gt; package.&lt;/p&gt;
&lt;p&gt;CrossGuard is open source and the functionality is behind &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_policy"&gt;the new &lt;code&gt;pulumi policy&lt;/code&gt; command&lt;/a&gt;, as well as &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_up#options"&gt;the new &lt;code&gt;--policy-pack&lt;/code&gt; flag&lt;/a&gt; for the &lt;code&gt;preview&lt;/code&gt; and &lt;code&gt;up&lt;/code&gt; commands. You can use these features with any edition of Pulumi, without restriction, including the offline backends.&lt;/p&gt;
&lt;p&gt;If you choose to use CrossGuard with the Enterprise Edition of Pulumi, however, you&amp;rsquo;ll get some added functionality. This includes server-side enforcement of policies and organizational policies, including &amp;ldquo;policy groups&amp;rdquo; which let you group and apply many policies together to your stacks, such as applying different policies to production than development environments.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-2020-update/PolicyEnforcement.png" alt="Policy Enforcement in the Console"&gt;&lt;/p&gt;
&lt;p&gt;We recently added the ability to tag policy packs with a semantic version so that you can easily manage and apply packs using user-friendly versions instead of auto-generated numbers.&lt;/p&gt;
&lt;p&gt;The remaining areas of focus between now and launch include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Enabling policy pack authoring in Python. Policies can already apply to stacks written in any language, no matter the language of the policy pack itself, but today policy packs are authored in Node.js. Python is coming soon, with Go and .NET following afterward.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Allowing policy packs to be configured. Configuring policy packs will let you selectively enable or disable specific rules, and/or set configuration variables on them that influence their behavior, on a per stack or policy group basis.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Making reference policy packs available for AWS, Azure, GCP, and Kubernetes. These packs will be usable out-of-the-box with a collection of some of the most important configurable rules we&amp;rsquo;ve seen, in addition to being a starting point for creating your packs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/get-started/"&gt;CrossGuard is ready to try today&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/blog/manage-infrastructure-with-pac"&gt;we&amp;rsquo;ve begun blogging about some example use cases&lt;/a&gt; that you may find interesting.&lt;/p&gt;
&lt;h2 id="other-goodies"&gt;Other Goodies&lt;/h2&gt;
&lt;p&gt;In addition to the major areas above, we&amp;rsquo;ve continued to ship many other improvements. Here are some of our favorite ones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_export/"&gt;Stack export for the CLI and in the service&lt;/a&gt;, enabling you to export any past version of a stack&amp;rsquo;s state file. This helps you debug, restore, or roll back changes, or even just for historical reporting purposes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-service-improvements_02-2020/"&gt;Many quality-of-life improvements in the Pulumi SaaS Console&lt;/a&gt;, including stack tagging, grouping, and sorting; deep linking into CI/CD systems; infrastructure configuration pretty-printing; reverse stack membership lookups; performance improvements; and more.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/auditing-your-organizations-infrastructure-as-code-activity/"&gt;Full audit logs for Pulumi Enterprise&lt;/a&gt; enable you to go back in time and figure out who, when, and why something about your organization, project, or stack changed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/pulumi/pulumi/pull/3738"&gt;Pulumi runtime mocking for infrastructure testing&lt;/a&gt;, developed in partnership with several of our customers leading the charge on &amp;ldquo;test-driven infrastructure.&amp;rdquo; Look for more end-to-end docs and guidance soon!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/kubernetes-yaml-generation/"&gt;The ability to generate Kubernetes YAML&lt;/a&gt; gives you infrastructure authoring capabilities in your language of choice, while still letting you drive deployments using other YAML-based tools, such as &lt;code&gt;kubectl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/registry"&gt;We&amp;rsquo;ve been steadily adding more and more providers and now have over 30 of them&lt;/a&gt;, including Aiven, Cloudflare, Consul, Datadog, DigitalOcean, DNSimple, F5 BIG-IP, Fastly, GitLab, Kafka, Linode, MySQL, New Relic, Okta, Packet, PostgreSQL, RabbitMQ, SignalFX, Vault, and more.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="goodies-still-to-come"&gt;Goodies Still to Come&lt;/h2&gt;
&lt;p&gt;Our API docs are getting a major overhaul! The new design uses a more resource-oriented view, which will make it much easier to navigate and find what you need. This will also ensure all languages are uniform in terms of how documentation is presented as well as coverage of code samples. Expect to see some of this land and evolve in the days to come.&lt;/p&gt;
&lt;p&gt;We continue to make progress on our multi-language library architecture. This will enable us to bring your favorite packages like EKS and AWSX to new languages, including Python, C#, and Go, in addition to eventually letting you write your own. This has been a long journey as we figure out how to correctly build this capability, however we will be bringing &lt;a href="https://github.com/pulumi/pulumi-eks"&gt;EKS&lt;/a&gt; to Python first.&lt;/p&gt;
&lt;p&gt;Our &lt;code&gt;tf2pulumi&lt;/code&gt; tool, which converts any Terraform HCL to Pulumi code, is currently getting a fresh coat of paint. Look for HCL2 support and Python code-generation soon.&lt;/p&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;As of Pulumi CLI v3.71.0, &lt;code&gt;tf2pulumi&lt;/code&gt; has been replaced with &lt;code&gt;pulumi convert --from terraform&lt;/code&gt;. &lt;a href="https://www.pulumi.com/blog/converting-full-terraform-programs-to-pulumi/"&gt;Converting Full Terraform Programs to Pulumi blog&lt;/a&gt; has more details.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We&amp;rsquo;ve made some significant performance improvements and have others still in the works. Recent changes have reduced overall network bandwidth used by an average update in some cases by 100x, as well as reducing startup times by multiple seconds. The net result is that you&amp;rsquo;ll see fewer delays during updates and an overall snappier CLI experience.&lt;/p&gt;
&lt;h2 id="next-steps"&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;A lot of good work has already landed in 2020 — and there is a lot more on its way, including a few surprises!&lt;/p&gt;
&lt;p&gt;We appreciate all the feedback you&amp;rsquo;ve given us that is helping to make sure our work in early 2020 is a major step function in overall features, quality, and capabilities. We&amp;rsquo;re always looking for feedback so please let us know what you think. &lt;a href="https://www.pulumi.com/docs/get-started/"&gt;Give Pulumi a try&lt;/a&gt; today, &lt;a href="https://slack.pulumi.com"&gt;drop into our Community Slack&lt;/a&gt; to share your feedback, and make sure to &lt;a href="https://github.com/pulumi/pulumi/issues/new"&gt;file any suggestions or improvements we can make on GitHub&lt;/a&gt;.&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>2019 Year at a Glance</title><link>https://www.pulumi.com/blog/2019-year-at-a-glance/</link><pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/2019-year-at-a-glance/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/2019-year-at-a-glance/index.png" /&gt;
&lt;p&gt;As we celebrate another incredible year in the books here at Pulumi, I wanted to share some reflections about our most exciting milestones over the past twelve months. The best part has been connecting with more customers worldwide, as we saw more than a 15x growth in our customer base, surely a sign of big things to come in 2020. We couldn&amp;rsquo;t have done it without our amazing community; thank you deeply for your continued support and passion around Pulumi&amp;rsquo;s bold mission to empower every engineer to program the cloud — you make it all worthwhile.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s impossible to highlight everything, but here are some of our favorite milestones:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-1-0/"&gt;Pulumi 1.0&lt;/a&gt;.&lt;/strong&gt; After working with several major organizations to go to production with Pulumi, including multiple Fortune 500 and Global 2000 customers, we felt it was time to focus on a &amp;ldquo;1.0&amp;rdquo; release. To us, that meant significant improvements to quality, rounding out any open design issues, and sticking to compatibility. As such, we finished JavaScript, TypeScript, and Python support, made significant improvements to documentation and examples, and landed on a release we were proud to stand behind. Months later, we are up to version 1.8, and have stuck to our promise of &amp;ldquo;no breaking changes&amp;rdquo;: we understand how fundamental an infrastructure as code tool is to your organization, and how frustrating breaking changes would be. A solid 1.0 serves as a critical foundation for us going forward.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Global community.&lt;/strong&gt; Our community of end users grew significantly during 2019, with thousands of end users sharing best practices on &lt;a href="https://slack.pulumi.com"&gt;our Community Slack&lt;/a&gt;, and we expanded our physical presence globally. This included over two dozen events from big to small, including AWS re:Invent, Microsoft Build, Google Cloud Next, KubeCon EU and NA, and many Devopsdays, as well as several &lt;a href="https://github.com/pulumi/infrastructure-as-code-workshop"&gt;community workshops&lt;/a&gt;. We&amp;rsquo;ve also seen an uptick in community-led user groups and presentations, consulting and integration partnerships, and look forward to expanding our efforts here even more significantly next year. (If you ever need support/swag for your event, &lt;a href="https://www.pulumi.com/contact/"&gt;please contact us&lt;/a&gt;!)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-2-0-roadmap/"&gt;Pulumi 2.0 roadmap&lt;/a&gt;.&lt;/strong&gt; After 1.0, we published a roadmap to our next major release, Pulumi 2.0. The two themes for this release are to continue &lt;a href="https://www.pulumi.com/blog/pulumi-watch-mode-fast-inner-loop-development-for-cloud-infrastructure/"&gt;pushing the boundaries of productivity&lt;/a&gt;, while also giving you &amp;ldquo;belts and suspenders&amp;rdquo; for teams and enterprises. We feel this is the magic of Pulumi: the ability to simultaneously run fast and build out infrastructure productively and using the latest and greatest features in AWS, Azure, Google Cloud, and Kubernetes &amp;hellip; while still ensuring that security, compliance, and cost-related requirements and best practices are adhered to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/announcing-per-user-pricing-and-unlimited-stacks-for-teams/"&gt;Simpler, per-user pricing&lt;/a&gt;.&lt;/strong&gt; When we launched, our pricing was based on the number of stacks you have. Although our hearts were in the right place with this approach, we realized after working with customers that this could force architectural choices based on price, not what was in the best interest of teams and their projects. This didn&amp;rsquo;t feel right — we don&amp;rsquo;t want to penalize teams for doing the right thing! We rolled out per-user pricing in response and have had success with teams of all sizes — from teams of less than 5 engineers all the way up to teams of hundreds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pulumi Crosswalk.&lt;/strong&gt; We introduced the Pulumi Crosswalk brand for our collection of cloud-specific higher level frameworks that simplify many common infrastructure patterns, while also including built-in best practices. Throughout the year, we&amp;rsquo;ve rounded out that support, starting with AWS, then Kubernetes, as well as some initial steps towards frameworks for Azure and Google Cloud:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/introducing-pulumi-crosswalk-for-aws-the-easiest-way-to-aws/"&gt;Pulumi Crosswalk for AWS&lt;/a&gt;&lt;/strong&gt; simplifies common AWS patterns, including &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/vpc/"&gt;creating VPCs&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/running-containers-in-aws-the-lowdown-ecs-fargate-and-eks/"&gt;ECS, EKS, and Fargate clusters&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/building-and-publishing-docker-images-to-a-private-amazon-ecr-repository/"&gt;building and publishing Docker images to ECR registries&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/"&gt;more&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/crosswalk-kubernetes/"&gt;Pulumi Crosswalk for Kubernetes&lt;/a&gt;&lt;/strong&gt; encapsulates battle-tested approaches to running Kubernetes clusters and related infrastructure in production. This includes &lt;a href="https://www.pulumi.com/docs/iac/clouds/kubernetes/guides/playbooks/"&gt;playbooks for running Kubernetes in AWS, Azure, or Google Cloud&lt;/a&gt;, as well as &lt;a href="https://www.pulumi.com/blog/introducing-kx/"&gt;kx&lt;/a&gt;, a highly productive library that eliminates the &amp;ldquo;walls of YAML&amp;rdquo; boilerplate from your Kubernetes applications configurations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Although still works in progress, Pulumi Crosswalk for Azure will include &lt;a href="https://www.pulumi.com/blog/serverless-as-simple-callbacks-with-pulumi-and-azure-functions/"&gt;simple Azure Functions callbacks&lt;/a&gt; and &lt;a href="https://www.pulumi.com/blog/how-to-build-globally-distributed-applications-with-azure-cosmos-db-and-pulumi/"&gt;globally distributed applications that auto-scale alongside Cosmos DB&lt;/a&gt;, and Pulumi Crosswalk for Google Cloud will include &lt;a href="https://www.pulumi.com/blog/simple-serverless-programming-with-google-cloud-functions-and-pulumi/"&gt;simplified Google Functions&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/announcing-crossguard-preview"&gt;Policy as Code (&amp;ldquo;CrossGuard&amp;rdquo;)&lt;/a&gt;.&lt;/strong&gt; We shipped a preview of our new policy as code support, code-named CrossGuard, which allows you to enforce policies at deployment time. CrossGuard brings the same &amp;ldquo;familiar language&amp;rdquo; approach we&amp;rsquo;ve used for infrastructure as code, and applies it to policy as code, enabling you to author your own rich rules to enforce security, compliance, cost, and team best practices. We open sourced previews of out-of-the-box rules by way of &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/awsguard/"&gt;AWSGuard&lt;/a&gt; and &lt;a href="https://github.com/pulumi/pulumi-policy-opa"&gt;OPA integration&lt;/a&gt;. CrossGuard is &lt;a href="https://github.com/pulumi/pulumi-policy"&gt;open source&lt;/a&gt; and Pulumi&amp;rsquo;s &lt;a href="https://www.pulumi.com/pricing/"&gt;Team and Enterprise Editions&lt;/a&gt; support advanced organization-wide controls.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-dotnet-core/"&gt;.NET&lt;/a&gt;.&lt;/strong&gt; We have added initial preview support for writing your infrastructure as code in any .NET Core language, including C#, F#, and VB. This covers any existing Pulumi resource provider, including AWS, Azure, Google Cloud, as well as &lt;a href="https://www.pulumi.com/blog/managing-kubernetes-infrastructure-with-dotnet-and-pulumi/"&gt;support for the entire Kubernetes object model&lt;/a&gt;. .NET, along with Go, will transition out of preview into being generally available as part of the 2.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/docs/pulumi-cloud/accounts/"&gt;More identity options&lt;/a&gt;.&lt;/strong&gt; Out of the gate, we supported GitHub as an identity provider when authenticating with the Pulumi service. Since then, we added &lt;a href="https://www.pulumi.com/blog/welcoming-gitlab-users-to-pulumi/"&gt;GitLab&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/pulumi-now-supports-atlassian-identity/"&gt;Atlassian&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/announcing-support-for-email-based-identities/"&gt;Email&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/saml/"&gt;SAML/SSO&lt;/a&gt;, with user guides for &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/saml/aad/"&gt;Azure ActiveDirectory&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/saml/gsuite/"&gt;Google GSuite&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/saml/okta/"&gt;Okta&lt;/a&gt;. These all integrate with features like history/auditing, RBAC, and policy as code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/blog/managing-secrets-with-pulumi/"&gt;Enhanced, pluggable secrets&lt;/a&gt;.&lt;/strong&gt; We heard that keeping secrets from leaking in plaintext to your start files is a challenge with current infrastructure as code tools. So, we deepend the way secrets integrate with Pulumi&amp;rsquo;s engine, including transitive encryption so that, no matter where your secret goes in your program, it won&amp;rsquo;t leak in plaintext. In addition, we added the ability to &lt;a href="https://www.pulumi.com/docs/concepts/secrets#configuring-secrets-encryption"&gt;use your own secrets provider for encryption&lt;/a&gt;, including AWS KMS, Azure KeyVault, Google Cloud KMS, and HashiCorp Vault. This ensures you get great ease-of-use — falling into the &amp;ldquo;pit of success&amp;rdquo; with secrets — while still leveraging your existing organization&amp;rsquo;s approach.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;More state storage options.&lt;/strong&gt; Although the hosted Pulumi SaaS works great for most end users, offering the right mix of convenience and control, we understand it doesn&amp;rsquo;t work for everyone. It is now possible to store state locally using the &lt;code&gt;pulumi login --local&lt;/code&gt; command, or to &lt;a href="https://www.pulumi.com/docs/iac/concepts/state-and-backends#using-a-diy-backend"&gt;configure Pulumi to store state in AWS S3, Azure Blob Storage, or Google Cloud Storage&lt;/a&gt;. Additionally, &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/self-hosted/"&gt;Pulumi Enterprise offers a self-hosted option&lt;/a&gt;, so that you can still benefit from the Pulumi SaaS&amp;rsquo;s features around identity, policies, and controls, while hosting it in your own cloud account or behind your firewall.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/"&gt;More CI/CD integrations&lt;/a&gt;.&lt;/strong&gt; In partnership with customers, and in some cases the CI/CD vendors themselves, we have continued adding more CI/CD integrations, to enable automated delivery of your infrastructure. This includes &lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/jenkins/"&gt;Jenkins&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/cd-made-easy-with-pulumi-and-azure-pipelines/"&gt;Azure DevOps Pipelines&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/octopus-deploy/"&gt;Octopus Deploy&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/codefresh/"&gt;Codefresh&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/github-actions/"&gt;revised support for GitHub Actions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Coexistence and conversion tools.&lt;/strong&gt; We know that many teams have existing infrastructure in place. We want to make it a easy as possible to choose Pulumi and, as we&amp;rsquo;ve worked with major customers to transition away from existing infrastructure tools, we&amp;rsquo;ve built tools to help ease the adoption process. This includes the following approaches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Coexist&lt;/strong&gt; with existing infrastructure, including &lt;a href="https://www.pulumi.com/blog/using-terraform-remote-state-with-pulumi/"&gt;referencing existing Terraform remote state&lt;/a&gt;, &lt;a href="https://github.com/pulumi/pulumi-kubernetes/blob/master/tests/sdk/nodejs/examples/yaml-guestbook/index.ts"&gt;deploying Kubernetes YAML as-is&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/using-helm-and-pulumi-to-define-cloud-native-infrastructure-as-code/"&gt;deploying Kubernetes Helm charts&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/aws/api-docs/cloudformation/stack/"&gt;deploying AWS CloudFormation stacks&lt;/a&gt;, or &lt;a href="https://github.com/pulumi/examples/tree/846811de2c7faa4694454c64edc9bbcdb31d533e/classic-azure-ts-arm-template"&gt;deploying Azure Resource Manager (ARM) templates&lt;/a&gt; — in each case, enabling you to consume output properties from infrastructure deployed via other tools, for either temporary or permanent coexistence of Pulumi with these other tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Convert&lt;/strong&gt; your existing infrastructure so that it comes under the control of Pulumi. This includes &lt;a href="https://www.pulumi.com/blog/adopting-existing-cloud-resources-into-pulumi/"&gt;adopting existing cloud resources&lt;/a&gt;, no matter how they were provisioned (even if done manually by pointing and clicking in your cloud&amp;rsquo;s UI), as well as the &lt;a href="https://www.pulumi.com/blog/from-terraform-to-infrastructure-as-software/"&gt;tf2pulumi&lt;/a&gt; tool, which converts existing HCL programs to Pulumi, preserving your existing Terraform project and code structure.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;As of Pulumi CLI v3.71.0, &lt;code&gt;tf2pulumi&lt;/code&gt; has been replaced with &lt;code&gt;pulumi convert --from terraform&lt;/code&gt;. &lt;a href="https://www.pulumi.com/blog/converting-full-terraform-programs-to-pulumi/"&gt;Converting Full Terraform Programs to Pulumi blog&lt;/a&gt; has more details.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Support for large-scale projects.&lt;/strong&gt; As we&amp;rsquo;ve seen bigger and bigger Pulumi projects, we have put together &lt;a href="https://www.pulumi.com/blog/continuous-delivery-with-gitlab-and-pulumi-on-amazon-eks/"&gt;guidance&lt;/a&gt; for multi-project approaches. This includes adding &lt;a href="https://www.pulumi.com/blog/architect-aws-application-infra-with-pulumi-stack-references/"&gt;the ability for stacks to reference one another&lt;/a&gt;, an essential building block when, for instance, one project depends on a piece of infrastructure provisioned by another project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lots of providers!&lt;/strong&gt; We&amp;rsquo;ve added more than 20 new providers for managing resources across many cloud and service providers. This includes the existing core cloud providers for &lt;a href="https://www.pulumi.com/registry/packages/aws/"&gt;AWS&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/azure/"&gt;Azure&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/gcp/"&gt;Google Cloud&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/registry/packages/kubernetes/"&gt;Kubernetes&lt;/a&gt;, in addition to newly added providers &lt;a href="https://www.pulumi.com/registry/packages/digitalocean/"&gt;DigitalOcean&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/linode/"&gt;Linode&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/openstack/"&gt;OpenStack&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/equinix-metal/"&gt;Packet&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/registry/packages/vsphere/"&gt;vSphere&lt;/a&gt;. Modern cloud infrastructures include components managed by SaaS or other service providers alongside and connected to your core cloud infrastructure, and for those, we have added support for &lt;a href="https://www.pulumi.com/registry/packages/aiven/"&gt;Aiven&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/cloudamqp/"&gt;CloudAMQP&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/cloudflare/"&gt;Cloudflare&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/consul/"&gt;Consul&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/datadog/"&gt;Datadog&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/dnsimple/"&gt;DNSimple&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/docker/"&gt;Docker&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/fastly/"&gt;Fastly&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/f5bigip/"&gt;F5 BigIP&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/gitlab/"&gt;GitLab&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/kafka/"&gt;Kafka&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/mysql/"&gt;MySQL&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/newrelic/"&gt;New Relic&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/okta/"&gt;Okta&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/postgresql/"&gt;PostgreSQL&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/rabbitmq/"&gt;RabbitMQ&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/signalfx/"&gt;SignalFX&lt;/a&gt;, &lt;a href="https://www.pulumi.com/registry/packages/spotinst/"&gt;Spotinst&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/registry/packages/vault/"&gt;Vault&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s impossible to overstate how big an impact you, the community, have had on Pulumi. In fact, every feature on this list was delivered in response to a real community, customer, or partner need.&lt;/p&gt;
&lt;p&gt;2019 has been a major year for the Pulumi community by any measure. As we look forward, we anticipate even more accelerated growth and capabilities. We wish you all a wonderful New Year, and want to again thank you for the love and support — here&amp;rsquo;s to an incredible 2020!&lt;/p&gt;
&lt;p&gt;— Joe&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Pulumi 2.0 Roadmap</title><link>https://www.pulumi.com/blog/pulumi-2-0-roadmap/</link><pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-2-0-roadmap/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-2-0-roadmap/index.png" /&gt;
&lt;p&gt;Today we&amp;rsquo;ve published &lt;a href="https://github.com/pulumi/pulumi/issues/3591"&gt;Pulumi&amp;rsquo;s 2.0 roadmap&lt;/a&gt;. 2.0 is the next major phase in Pulumi&amp;rsquo;s journey, and will include better productivity through languages, libraries, and tools, in addition to advanced features for teams in production. And, though we are excited to share our own thoughts, more than anything else, we&amp;rsquo;d love to hear your feedback to help make sure it&amp;rsquo;s right.&lt;/p&gt;
&lt;p&gt;Since &lt;a href="https://www.pulumi.com/blog/pulumi-1-0/"&gt;releasing Pulumi 1.0 in September&lt;/a&gt;, we have heard loud and clear that you appreciate the commitment to compatibility, as well as the completeness and stability of the platform, and we have been hard at work making sure we honor those promises.&lt;/p&gt;
&lt;p&gt;As we look to 2.0, we are aiming to help you be more successful with modern cloud architectures, by implementing features that we&amp;rsquo;ve heard are missing or could be better, as well as doing better at the fundamentals. Although this is a &amp;ldquo;2.0&amp;rdquo; release, we do not plan any major breaking changes, so that we can continue honoring our promise to provide a stable platform to you.&lt;/p&gt;
&lt;h2 id="two-themes-for-20"&gt;Two Themes for 2.0&lt;/h2&gt;
&lt;p&gt;The two themes we have chosen for Pulumi 2.0 are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Best in class productivity.&lt;/strong&gt; Pulumi&amp;rsquo;s foundation of general-purpose languages has already enabled great productivity gains thanks to ecosystems of tools, sharing and reuse, and familiarity. But we have ideas for more. This includes more languages, features that bring deployments closer to the inner development loop like watch mode, more libraries of off-the-shelf patterns and practices, and the ability to test your infrastructure more easily.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Belts and suspenders for teams and enterprises.&lt;/strong&gt; As we work with more teams and enterprises to deliver demanding many-cloud workloads to public, private, and hybrid clouds — increasingly involving Kubernetes, and often spanning developers and operations teams — we have heard about many features that would maximize Pulumi&amp;rsquo;s effectiveness and utility. This includes advanced security and compliance capabilities, more organization-wide controls and policies, and more flexible self- and on-premises hosting of the Pulumi service.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Several major 2.0 features are available to try out today and we&amp;rsquo;d love to hear what you think. &lt;a href="https://github.com/pulumi/pulumi/issues/3591"&gt;The 2.0 roadmap is on GitHub&lt;/a&gt; so that you can easily comment or follow along as we make progress.&lt;/p&gt;
&lt;h2 id="trying-out-20-preview-features"&gt;Trying Out 2.0 Preview Features&lt;/h2&gt;
&lt;p&gt;A number of new features are already available in &amp;ldquo;preview&amp;rdquo;; the preview tag simply means we expect possibly-significant changes to them between now and the 2.0 release.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many features require you to set the &lt;code&gt;PULUMI_EXPERIMENTAL&lt;/code&gt; environment variable to &lt;code&gt;true&lt;/code&gt; before you can use them.
This can be done by running &lt;code&gt;export PULUMI_EXPERIMENTAL=true&lt;/code&gt; in your macOS or Linux shell, or by running
&lt;code&gt;$env:PULUMI_EXPERIMENTAL = &amp;quot;true&amp;quot;&lt;/code&gt; in your Windows PowerShell console.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="better-language-support"&gt;Better Language Support&lt;/h3&gt;
&lt;p&gt;Support for Go and .NET Core (C#/F#/VB) languages is currently marked preview because there is known work before we&amp;rsquo;re comfortable calling them &amp;ldquo;done.&amp;rdquo; This includes improving the programming models to be more idiomatic for their respective ecosystems — such as stronger typing in Go instead of &lt;code&gt;interface{}&lt;/code&gt; and &lt;code&gt;StackReference&lt;/code&gt; support in .NET — as well as improving the documentation, availability of samples, templates, and tutorials, written in those languages.&lt;/p&gt;
&lt;p&gt;Expect to see a steady stream of improvements between now and 2.0 being finished; to follow along, see these work items on GitHub: &lt;a href="https://github.com/pulumi/pulumi/issues/1614"&gt;Go&lt;/a&gt; and &lt;a href="https://github.com/pulumi/pulumi/issues/3470"&gt;.NET&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="policy-as-code-crossguard"&gt;Policy as Code (&amp;ldquo;CrossGuard&amp;rdquo;)&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/announcing-crossguard-preview/"&gt;Today we have released preview support for a new policy as code offering that we call CrossGuard&lt;/a&gt;. Just as you can write your infrastructure as code in your favorite language, so too can you now write your policies. These policies run whenever you do a Pulumi deployment, enabling CrossGuard to restrict deployments that violate security, compliance, cost, or stylistic requirements.&lt;/p&gt;
&lt;p&gt;You can write custom policies, or use off-the-shelf policies authored by the community, including our preview &lt;a href="https://github.com/pulumi/pulumi-policy-aws"&gt;AWS pack&lt;/a&gt; and &lt;a href="https://github.com/pulumi/pulumi-policy-opa"&gt;Open Policy Agent (OPA) integration&lt;/a&gt;. Just as you can share your own infrastructure creations using your language&amp;rsquo;s package manager, you can share your policies too.&lt;/p&gt;
&lt;p&gt;CrossGuard is 100% open source, enabled by &lt;code&gt;pulumi up&lt;/code&gt;&amp;rsquo;s new &lt;code&gt;--policy-pack&lt;/code&gt; flag, and advanced organization-wide controls are available in the Team and Enterprise Editions. To learn more, &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/"&gt;read the CrossGuard user guide&lt;/a&gt;; or, to dive straight in, try out &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/get-started/"&gt;the getting started tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="testing"&gt;Testing&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/unit-testing-infrastructure-in-nodejs-and-mocha"&gt;We&amp;rsquo;ve blogged previously about how to test your infrastructure&lt;/a&gt;. However, we hear all the time about new scenarios and ways in which Pulumi could do a better job here, including removing many of the rough edges currently hit when testing Pulumi code.&lt;/p&gt;
&lt;p&gt;Pulumi 2.0 will support a spectrum of testing scenarios, including unit testing, integration testing, and post-deployment runtime validation. The addition of CrossGuard also means you can validate your infrastructure configuration integrated into your existing CI/CD processes. As part of the 2.0 release, we will be publishing comprehensive guides and tutorials for testing your infrastructure.&lt;/p&gt;
&lt;h3 id="watch-mode"&gt;Watch Mode&lt;/h3&gt;
&lt;p&gt;We recently added the ability to deploy changes to your applications and infrastructure continuously, straight from your IDE. This brings infrastructure as code to your core inner development loop in a major way and is guaranteed to change the way you think about the essential differences between the way you approach engineering modern cloud applications versus the requisite infrastructure.&lt;/p&gt;
&lt;p&gt;To give watch mode a try, simply run &lt;code&gt;pulumi watch&lt;/code&gt;. Or, to see a demo of watch mode in action, check out this video:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/X96EMLi8uJY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h3 id="self-host-and-on-premises"&gt;Self-Host and On-Premises&lt;/h3&gt;
&lt;p&gt;Although we&amp;rsquo;ve worked hard to make the Pulumi service easy and affordable to use by default, we understand that some customers can&amp;rsquo;t depend on a multi-tenanted SaaS website for their infrastructure deployments. For these customers, Pulumi already offers &lt;a href="https://www.pulumi.com/docs/iac/concepts/state-and-backends/"&gt;custom state hosting&lt;/a&gt; in AWS S3, Azure Blob Storage, GCP Cloud Storage, or even as a manually managed JSON file. However, by hosting the state this way, you lose out on what makes the Pulumi service so great: identity, teams, RBAC, policies, webhooks, and more.&lt;/p&gt;
&lt;p&gt;Today we are releasing preview support for the self-hosted Pulumi service. This gives you the full capabilities of the Pulumi Enterprise SaaS, while also giving you the flexibility to run it anywhere. Self-hosted Pulumi Enterprise can run on-premises behind your firewall on a VM or in Kubernetes, in your AWS, Azure, or GCP account — virtually anywhere that can run VMs or containers. For more information, see the &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/self-hosted/"&gt;tutorial about how to configure self-hosted Pulumi Enterprise&lt;/a&gt;, or &lt;a href="https://www.pulumi.com/contact/"&gt;contact us for pricing information and a demo&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="a-lot-more-"&gt;A Lot More &amp;hellip;&lt;/h3&gt;
&lt;p&gt;This is just a sampling of what&amp;rsquo;s already ready to try out. Expect a lot more, including many features and stability improvements that are driven by ongoing customers and community feedback.&lt;/p&gt;
&lt;h2 id="from-modern-infrastructure-to-modern-architecture"&gt;From Modern Infrastructure to Modern Architecture&lt;/h2&gt;
&lt;p&gt;Pulumi 1.0 gave us a solid foundation of modern infrastructure as code. As we see the things you are building with Pulumi, we understand that challenges don&amp;rsquo;t stop at infrastructure provisioning. Pulumi is also about the applications themselves, as modern cloud architectures demand infrastructure and applications to coexist in harmony and unique ways that Pulumi enables.&lt;/p&gt;
&lt;p&gt;In addition to many great features, Pulumi 2.0 will also further advance the &lt;a href="https://www.pulumi.com/docs/guides/crosswalk/"&gt;Pulumi Crosswalk family of offerings&lt;/a&gt; to bring more of these modern application architecture patterns to your fingertips. This includes support for additional languages beyond JavaScript and TypeScript, improved documentation, interactive tutorials, and more extensive libraries of patterns and practices.&lt;/p&gt;
&lt;h2 id="two-asks"&gt;Two Asks&lt;/h2&gt;
&lt;p&gt;Although a lot of 2.0 is already underway, we are still planning out the concrete roadmap and there is a lot of room for feedback. We have two asks for you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Please give the preview features a try, and let us know what you think.&lt;/li&gt;
&lt;li&gt;Please let us know what is missing from our list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please give us feedback by &lt;a href="https://github.com/pulumi/pulumi/issues/3591"&gt;commenting on the GitHub tracking issue&lt;/a&gt; or &lt;a href="https://slack.pulumi.com"&gt;in the Community Slack&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="next-steps"&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;1.0 was a major milestone for us and 2.0 is going to be better. 2.0 will make modern cloud architectures even more approachable and productive to create, while also deepening support for modern teams and workloads running in production, often across many-clouds.&lt;/p&gt;
&lt;p&gt;We want to thank you for your continued support and feedback — it&amp;rsquo;s what makes Pulumi tick!&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Announcing CrossGuard Preview</title><link>https://www.pulumi.com/blog/announcing-crossguard-preview/</link><pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/announcing-crossguard-preview/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/announcing-crossguard-preview/index.png" /&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;p&gt;This blog post discusses CrossGuard in &amp;ldquo;preview&amp;rdquo; status. CrossGuard is now fully released and integrated into Pulumi. For current information about Pulumi&amp;rsquo;s policy as code capabilities, please refer to the &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/"&gt;latest CrossGuard documentation&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Over the past few months, we have been hard at work on Pulumi CrossGuard, a Policy as Code solution. Using CrossGuard, you can express flexible business and security rules using code. CrossGuard enables organization administrators to enforce these policies across their organization or just on specific stacks. CrossGuard allows you to verify or enforce custom policies on changes before they are applied to your resources. CrossGuard is 100% open source and available to all users of Pulumi, including the Individual Edition. Advanced organization-wide policy management features are available to Enterprise customers.&lt;/p&gt;
&lt;p&gt;You can run policies against any Pulumi stack, independent of the stack&amp;rsquo;s language. This means you can have policies written in TypeScript and run them against a Python-based stack. Policies are grouped in &lt;em&gt;Policy Packs&lt;/em&gt; and run against a stack during both &lt;code&gt;pulumi preview&lt;/code&gt; and &lt;code&gt;pulumi up&lt;/code&gt;. Each resource in a stack is run through the Policy Pack prior to creation, meaning you can block the creation of out-of-compliance resources.&lt;/p&gt;
&lt;h2 id="why"&gt;Why&lt;/h2&gt;
&lt;p&gt;Using Pulumi, developers and operators are empowered to self-provision their infrastructure and move quickly. One of our core goals is to allow you to codify best practices and share them with your team. We often hear from organization leaders that they are concerned about enforcing security and compliance best-practices. CrossGuard provides a way to automatically enforce compliance, allowing teams to operate self-sufficiently while still ensuring organization-wide requirements are met.&lt;/p&gt;
&lt;p&gt;As an organization administrator, you may want to encourage use of smaller compute instances to optimize for cost. As a security engineer, you may want to ensure databases and other storage solutions are not publicly accessible. As a team lead, you may want to ensure your containers have reserved an appropriate amount of memory and CPU to meet your team&amp;rsquo;s requirements. Whether you&amp;rsquo;re an organization administrator, security engineer or team lead, CrossGuard provides you the capability to enforce best practice for cost, compliance, security, team practices, and much more.&lt;/p&gt;
&lt;h2 id="key-features"&gt;Key Features&lt;/h2&gt;
&lt;p&gt;The key features available during the CrossGuard preview are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pulumi/pulumi-policy"&gt;Policy SDK&lt;/a&gt; to express custom policies using TypeScript or JavaScript&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/get-started#running-locally"&gt;Run Policy Packs locally&lt;/a&gt; using the &lt;code&gt;--policy-pack&lt;/code&gt; flag, available to all users&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pulumi/pulumi-awsguard"&gt;AWSGuard&lt;/a&gt; codifies best practices for AWS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/get-started#enforcing-a-policy-pack"&gt;Enforce Policy Packs&lt;/a&gt; across your organization or particular stacks in the Pulumi Service, for Team and Enterprise users&lt;/li&gt;
&lt;li&gt;View policy errors and Policy Packs for an update in the Pulumi Service&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pulumi-crossguard-for-everyone"&gt;Pulumi CrossGuard for Everyone&lt;/h2&gt;
&lt;p&gt;Pulumi CrossGuard has something to offer everyone in your organization.&lt;/p&gt;
&lt;h3 id="for-organization-administrators"&gt;For Organization Administrators&lt;/h3&gt;
&lt;p&gt;You want your organization to be able to move quickly and deliver business value. To do so, your team needs to be able to self-service their infrastructure. Pulumi CrossGuard gives you the peace of mind that you need to allow your team to work independently. Codify business and security policies to ensure your team meets the requirements you set forth.&lt;/p&gt;
&lt;h3 id="for-security-engineers"&gt;For Security Engineers&lt;/h3&gt;
&lt;p&gt;There&amp;rsquo;s a lot of complexity to security and often the rest of your organization does not have all the knowledge they need to deliver software securely. Express security policies that allow you to share your knowledge and prevent issues from ending up in production.&lt;/p&gt;
&lt;h3 id="for-developers-and-operators"&gt;For Developers and Operators&lt;/h3&gt;
&lt;p&gt;There are a ton of moving pieces in our ecosystems today. It is difficult to know everything about the cloud resources we use. Pulumi CrossGuard ensures you do not fall into the trap of insecure or unreasonable defaults.&lt;/p&gt;
&lt;h2 id="crossguard-in-action"&gt;CrossGuard in Action&lt;/h2&gt;
&lt;p&gt;With an understanding of what CrossGuard enables, let&amp;rsquo;s look at what that means in practice. The following is a policy pack definition that prohibits creating an AWS S3 bucket that is public readable. Our Policy Pack is not complicated. It uses a &lt;code&gt;validateResourceOfType&lt;/code&gt; helper function to filter for the resource type we care about and reports a violation if present.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PolicyPack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;aws-typescript&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;policies&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;s3-no-public-read&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Prohibits setting the publicRead or publicReadWrite permission on AWS S3 buckets.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enforcementLevel&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mandatory&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;validateResource&lt;/span&gt;: &lt;span class="kt"&gt;validateResourceOfType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reportViolation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;acl&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;public-read&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;acl&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;public-read-write&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;reportViolation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;You cannot set public-read or public-read-write on an S3 bucket. &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Read more about ACLs here: https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We initially run &lt;code&gt;pulumi preview&lt;/code&gt; for an S3 bucket that will pass the policy.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create an AWS resource (S3 Bucket)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-bucket&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We then modify the bucket to have its access control list (ACL) set to &lt;code&gt;public-read&lt;/code&gt;, which will cause our bucket to be out-of-compliance.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create an AWS resource (S3 Bucket)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-bucket&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;acl&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;public-read&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://www.pulumi.com/uploads/content/blog/announcing-crossguard-preview/pac-demo.gif" alt="Demo of Policy as Code"&gt;&lt;/p&gt;
&lt;p&gt;While this is a simple demonstration of what you can do with Policy as Code, the framework is very flexible and supports much more complex policies. Our &lt;a href="https://github.com/pulumi/pulumi-awsguard"&gt;AWSGuard library&lt;/a&gt; is a great example of how you can use Policy as Code to write configurable policies.&lt;/p&gt;
&lt;h2 id="try-it-today"&gt;Try it Today&lt;/h2&gt;
&lt;p&gt;Pulumi CrossGuard empowers everyone to build better, safer applications and infrastructure. Today, Pulumi CrossGuard is available to preview for all Pulumi users. For Enterprise organizations, administrators can opt-in to the preview via the &amp;ldquo;Policies&amp;rdquo; tab in the &lt;a href="https://app.pulumi.com/signin"&gt;Pulumi Service&lt;/a&gt;. To get started with CrossGuard today, here are some resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If haven&amp;rsquo;t played around with Pulumi yet, here is &lt;a href="https://www.pulumi.com/docs/get-started"&gt;Pulumi&amp;rsquo;s Getting Started tutorial&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/get-started/"&gt;Policy as Code Getting Started tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;ve initially released the capability to create policies with TypeScript or JavaScript (that work with Pulumi programs written in any supported language) and plan to add policy SDKs for other supported languages. We would love to hear any feedback you have! You can submit feedback via our &lt;a href="https://www.pulumi.com/contact/"&gt;Contact Us form&lt;/a&gt; or in our &lt;a href="https://slack.pulumi.com/"&gt;community slack&lt;/a&gt;.&lt;/p&gt;</description><author>Erin Krengel</author><category>policy-as-code</category><category>features</category><category>announcements</category></item><item><title>A Year of Helping Build Production-Ready Kubernetes</title><link>https://www.pulumi.com/blog/crosswalk-kubernetes/</link><pubDate>Thu, 14 Nov 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/crosswalk-kubernetes/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/crosswalk-kubernetes/index.png" /&gt;
&lt;p&gt;Today we announced &lt;a href="https://www.pulumi.com/crosswalk/kubernetes/"&gt;Pulumi Crosswalk for Kubernetes&lt;/a&gt;, a collection of open source tools, libraries, and playbooks to help developers and operators work together to bring Kubernetes into their organizations. They capture the lessons we learned this past year working with organizations to go from zero to Kubernetes in production for their infrastructure and application workloads. By releasing these as open source, we hope to help everybody be more successful with their Kubernetes projects — as we have learned through experience, it isn&amp;rsquo;t easy going!&lt;/p&gt;
&lt;p&gt;If you want to dive straight in, &lt;a href="https://www.pulumi.com/docs/iac/clouds/kubernetes/guides/"&gt;browse to the documentation&lt;/a&gt;. Below is the backstory and why we’re so excited about this release.&lt;/p&gt;
&lt;h2 id="applying-infrastructure-as-code-to-kubernetes"&gt;Applying infrastructure as code to Kubernetes&lt;/h2&gt;
&lt;p&gt;A little over a year ago, we launched support for managing Kubernetes resources using Pulumi’s open source infrastructure as code tools. The entire Kubernetes object model across all supported versions is available in your language of choice — including JavaScript, TypeScript, and Python — in addition to the entire ecosystem of Helm Charts. This offers 100% API resource compatibility, and same-day support for newly released Kubernetes versions.&lt;/p&gt;
&lt;p&gt;By leveraging general purpose languages, you get rich capabilities like for loops, functions, and classes, the ability to share and reuse best practices — eliminating copy and paste — as well as access to your favorite tools, including editors, test frameworks, and static analysis tools.&lt;/p&gt;
&lt;p&gt;&lt;img src="k8s-ide.png" alt="Use Your Favorite Tools"&gt;&lt;/p&gt;
&lt;p&gt;This is exciting for any of us who have struggled with “walls of YAML or JSON” — but this alone isn’t the whole story.&lt;/p&gt;
&lt;p&gt;A unified approach to infrastructure as code delivers a robust delivery workflow, and enables managing configuration across not only just Kubernetes resources, but also any of the cluster’s underlying public or private cloud infrastructure, including AWS, Azure, Google Cloud, vSphere, and others.&lt;/p&gt;
&lt;p&gt;At the time, we didn’t realize how powerful this unified approach would turn out to be. For instance, properly provisioning an Amazon EKS cluster requires not only orchestrating deployments across AWS, but also going back and forth with Kubernetes resources. We designed Pulumi to let you do this using a single consistent platform and workflow, replacing the “mountains of Bash” that are typically required to integrate multiple tools.&lt;/p&gt;
&lt;p&gt;This was an exciting foundation to start from, and we had a number of end users and organizations who soon came to our doors to adopt Kubernetes, with our help.&lt;/p&gt;
&lt;h2 id="why-kubernetes-in-production-is-hard"&gt;Why Kubernetes in production is hard&lt;/h2&gt;
&lt;p&gt;If I had to summarize the challenges that we faced and which we worked to help solve, they are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes infrastructure is not an island.&lt;/strong&gt; Although AWS, Azure, and GCP offer managed Kubernetes services, most organizations with existing infrastructure maturity find it difficult to provision and manage cluster infrastructure. This is often because going to production requires connecting a cluster to a lot of surrounding infrastructure — including IAM, networking, encryption services, private Docker registries, and more. Kubernetes-specific tools only help with a fraction of this problem and create silos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empowering an entire organization is tough.&lt;/strong&gt; Most organizations adopting Kubernetes are attempting to harmonize the “two sides of the house” &amp;ndash; developers and operators. The infrastructure operations team is responsible for managing the cluster and underlying infrastructure, while the developers are trying to deliver applications and services to the cluster (often also using other public cloud services, like object stores). Although the Kubernetes architecture is well-suited to this, teams struggle to standardize on tools, workflows, and practices around both infrastructure and application delivery.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Day Two is even harder than Day One.&lt;/strong&gt; Many teams decide to go “all in” on Kubernetes &amp;hellip; only to find out that securing, scaling, and operationalizing Kubernetes is far more of a full-time job than they imagined. Can you perform zero-downtime upgrades? How do you perform failover between regions? How fast can you promote new container images from dev, to staging, to dozens of production clusters?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Adding to the complexity, these challenges tend to differ depending on which cloud environment you’re targeting. Although Kubernetes has helped to standardize the container compute layer, and what it means to scale out a load balanced service, for example, it does not abstract away all of the infrastructure capabilities between the clouds, like IAM, container registries, and data services.&lt;/p&gt;
&lt;p&gt;We experienced this first hand with many customers over the past year. There are three specific areas we’ve worked to develop into turnkey solutions for customers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Infrastructure playbooks&lt;/li&gt;
&lt;li&gt;Making Kubernetes more accessible to developers&lt;/li&gt;
&lt;li&gt;Operationalizing delivery and observability insights at-scale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let me tell you about each of these in turn.&lt;/p&gt;
&lt;h2 id="developing-playbooks-for-cluster-infrastructures"&gt;Developing playbooks for cluster infrastructures&lt;/h2&gt;
&lt;p&gt;Most practitioners are left to discover solutions to the hardest problems with Kubernetes infrastructure on their own. After helping dozens of customers go to production with AWS EKS, Azure AKS, Google Cloud GKE, and on-premises Kubernetes infrastructures, we decided to develop best practices into a set of playbooks. This helps organizations to avoid reinventing the wheel, in addition to mitigating potential pitfalls around security, reliability, and maintainability.&lt;/p&gt;
&lt;p&gt;These playbooks cover a lot of ground, including topics like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control planes.&lt;/strong&gt; Each Kubernetes cluster has a control plane comprised of controllers, state management, and other centralized services. Each provider offers a distinct and unique way of creating, deploying, and managing the control plane.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worker nodes.&lt;/strong&gt; Each cluster also requires worker nodes to actually run compute. Depending on your compute, storage, and security needs, the provisioning and management of these nodes — often using multiple node pools — differs greatly. Getting this right is essential to attaining a good tradeoff between cost and performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity.&lt;/strong&gt; All of the above also needs to integrate with your team’s security policies, including Identity and Access Management (IAM) and Role Based Access Controls (RBAC). If you’re in AWS, you undoubtedly want to connect to AWS IAM; if you’re in Azure, you want to leverage existing ActiveDirectory settings; if you’re in GCP, you’ll want to use GCP IAM; and if you’re using a custom configuration, it can be even more complicated. This is an essential part of deploying Kubernetes within an organization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cluster services.&lt;/strong&gt; Each cluster needs cluster-wide services deployed into the cluster, including performance and monitoring services (AWS CloudWatch, Azure Log Analytics and Monitoring, Datadog, Prometheus, etc.), service meshes, container registries, CRDs, and operators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application delivery.&lt;/strong&gt; Applications need to be Dockerized, packaged up and deployed to private container registries, and rolled out to the cluster, often continuously.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application services.&lt;/strong&gt; In addition to the applications themselves, often cloud native applications require additional services to come along for the ride. This includes ingress controllers, DNS and certificate management services, and more.
Upgrading clusters. Last but not least, cluster upgrades are an essential part of the overall playbook. Kubernetes is fast-moving, so upgrades are a regular occurrence, and yet it’s not always easy to deploy upgrades with confidence, especially when you are worried about zero downtime and persistent workloads.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This layer cake of concerns can be visualized using the following diagram:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/images/docs/quickstart/kubernetes/cake.svg" alt="Kubernetes infrastructure Architecture Layers"&gt;&lt;/p&gt;
&lt;p&gt;We are confident that anybody looking to create production-ready infrastructure in any of the public clouds, or even on-premises, will benefit from this material. It is also open source so we hope to improve and evolve it in partnership with the community in the weeks to come.&lt;/p&gt;
&lt;h2 id="making-kubernetes-more-accessible-to-developers"&gt;Making Kubernetes more accessible to developers&lt;/h2&gt;
&lt;p&gt;Besides having to navigate walls of YAML, there is a significant amount of repetition on most idiomatic Kubernetes configurations. In fact, it often feels like hand-authoring Kubernetes YAML is akin to writing software in assembly language, rather than higher level languages.&lt;/p&gt;
&lt;p&gt;Pulumi exposes 100% of the Kubernetes API, which means you can use modern language practices to start taming some of this low-level chaos. But new library constructs available in Crosswalk take this to another level by eliminating common boilerplate patterns.&lt;/p&gt;
&lt;p&gt;For example, this wall of YAML:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;very important data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Secret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app-password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;JikkMz9mK2hIRDo3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;database-password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Y29uZmlnLmRhdGFiYXNlUGFzc3dvcmQ=&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-secrets&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Opaque&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;APP_CONFIG_PATH&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/app/config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;APP_USER&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config.user&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;APP_PASSWORD&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;valueFrom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretKeyRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-password&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-secrets&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;APP_DATABASE_PASSWORD&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;valueFrom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretKeyRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;database-password&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-secrets&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;imagePullPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Always&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/app/config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-config-rsg88x4g&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restartPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Always&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;configMap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;LoadBalancer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Is distilled down to its essence, with far less ceremony and repetition&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Define the application configuration and secrets.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;configs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;kx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ConfigMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;app-config&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;config&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;very important data&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secrets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;kx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Secret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;app-secrets&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;stringData&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;app-password&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;kx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RandomPassword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;app-password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;database-password&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;databasePassword&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Define the application Pod.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appConfigPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/app/config&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appPod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;kx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PodBuilder&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;containers&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;app:1.0.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;APP_CONFIG_PATH&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;appConfigPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;APP_USER&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;APP_PASSWORD&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;asEnvValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;app-password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;APP_DATABASE_PASSWORD&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;asEnvValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;database-password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;volumeMounts&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;appConfigPath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create a Kubernetes Deployment using the previous Pod definition.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deployment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;kx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Deployment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;nginx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;spec&lt;/span&gt;: &lt;span class="kt"&gt;appPod.asDeploymentSpec&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;replicas&lt;/span&gt;: &lt;span class="kt"&gt;3&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Expose the Deployment with a load balancer using a Kubernetes Service.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createService&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;kx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ServiceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LoadBalancer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These library extensions have been designed to live alongside your existing Kubernetes configuration, so that you can gradually reduce complexity, while the result still feels familiar and integrated.&lt;/p&gt;
&lt;p&gt;In addition to making Kubernetes configuration more accessible in these ways, there are other benefits to application configuration that we have seen emerge. This includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data Services.&lt;/strong&gt; For many of us, managing persistent workloads in Kubernetes is not worth the hassle. Although it’s possible to manage the delicate dance of tainting, draining, and migration, many of our customers rely on hosted offerings for data stores — such as Amazon S3, RDS, Azure Cosmos DB or Google Cloud BigTable — and Kubernetes for stateless compute. Using managed services brings the advantage of intrinsic scaling, backups, and management, without the tedium. Pulumi lets you mix and match Kubernetes and public cloud infrastructure as code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container Registries.&lt;/strong&gt; Most end users need to use private container registries to host application images. Furthermore, most of us want to use our cloud provider’s native offering, such as Amazon Elastic Container Registry, Azure Container Registry, or Google Container Registry, because it integrates with IAM. Using Pulumi, you don’t need separate deployment pipelines for containers compared to the supporting application infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serverless.&lt;/strong&gt; If you want to use the best and most cost effective serverless capabilities, you likely want to use AWS Lambda, Azure Functions, or Google Cloud Functions. We see end users augmenting container-based applications with serverless extensions all the time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architecture as Code.&lt;/strong&gt; Thanks to Pulumi’s use of general-purpose languages for infrastructure as code, end users have been able to abstract and encapsulate complexity into reusable forms, such as functions and classes. This helps you go beyond even the basic Kubernetes configuration challenges that Kx solves, to codifying recurring patterns in your cloud native architectures.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition to all of that, we’ve been hard at work on a new experimental “watch mode” feature which, in conjunction with the above, brings all of Kubernetes to your fingertips in a radically new way. We’re excited to show this off at our booth at KubeCon next week!&lt;/p&gt;
&lt;h2 id="operationalizing-delivery-at-scale"&gt;Operationalizing delivery at-scale&lt;/h2&gt;
&lt;p&gt;After you’ve mastered the infrastructure and application authoring challenges, the difficulties move to Day Two and beyond. At this stage, organizations need to figure out how to deliver changes continuously to an ever-increasing number of environments.&lt;/p&gt;
&lt;p&gt;Since our initial launch last year, we have added many different CI/CD integrations, including support for GitLab, Codefresh, Azure DevOps, Octopus Deploy, GitHub Actions, and more. This enables delivery at global scale. In fact, one of our customers continuously deploys to 80 different environments across their development and infrastructure operations teams.&lt;/p&gt;
&lt;p&gt;Finally, we are excited to release a new technology in preview today, a new &lt;code&gt;query&lt;/code&gt; command, and library of Kubernetes queries, that leverages the Pulumi object model to ask operational queries about your cluster and its applications. This includes queries like “How many distinct versions of MySQL are running in my cluster?”, “Which Pods are exposed to the Internet via a load-balanced Service?”, and so on.&lt;/p&gt;
&lt;p&gt;For instance, this query shows the distinct versions of MySQL inside your cluster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;kq&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/query-kubernetes&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Find all distinct versions of MySQL running in your cluster.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mySqlVersions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;kq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;v1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Pod&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;flatMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pod&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;pod&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageName&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;imageName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mysql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;distinct&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mySqlVersions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CQL also supports live streaming queries, which the CLI will display results from in real time. &lt;a href="https://github.com/pulumi/pulumi-query-kubernetes"&gt;Read more and get started with Pulumi Query for Kubernetes here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="join-a-growing-community"&gt;Join a growing community&lt;/h2&gt;
&lt;p&gt;Everything above is &lt;a href="https://github.com/pulumi"&gt;open source&lt;/a&gt; and has been battle-tested with many end users and organizations over the last year — all the way from startups to ISVs to the largest enterprises in the world. We are excited to share these best practices in reusable forms, leveraging the foundation uniquely provided by Pulumi’s infrastructure as code platform using familiar languages.&lt;/p&gt;
&lt;p&gt;To get started, check out the &lt;a href="https://www.pulumi.com/docs/iac/clouds/kubernetes/guides/"&gt;documentation&lt;/a&gt;, or &lt;a href="https://www.pulumi.com/docs/iac/get-started/kubernetes/"&gt;get started with the open source SDK now&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We sincerely hope that your team can be successful in your Kubernetes journey as a result of these lessons learned from others. Additionally, Pulumi offers training and services, so if we can help in any way, please &lt;a href="https://slack.pulumi.com"&gt;join our entire team and thousands of practitioners on our Community Slack&lt;/a&gt; — or simply &lt;a href="https://www.pulumi.com/contact/"&gt;contact us&lt;/a&gt; and we’ll be in touch.&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>kubernetes</category></item><item><title>Pulumi 💜 .NET Core</title><link>https://www.pulumi.com/blog/pulumi-dotnet-core/</link><pubDate>Mon, 11 Nov 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-dotnet-core/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-dotnet-core/index.png" /&gt;
&lt;p&gt;Today we are excited to announce the Preview of .NET Core support for all of your modern infrastructure as code needs. This means you can create, deploy, and manage your infrastructure, on any cloud, using your favorite .NET language, including C#, F#, and VB.NET.&lt;/p&gt;
&lt;p&gt;This is a heartwarming milestone for the entire Pulumi team. It’s no secret that several of our founding members had a hand in shaping the early .NET project over a decade ago. In fact, before leaving Microsoft to found Pulumi, I had the privilege of helping to kick off the .NET Core effort to take .NET open source and add macOS and Linux support alongside Windows. It’s truly wonderful to build on top of this amazing and vibrant ecosystem, and reconnect with old friends!&lt;/p&gt;
&lt;p&gt;Please &lt;a href="https://devblogs.microsoft.com/dotnet/building-modern-cloud-applications-using-pulumi-and-net-core/"&gt;head on over to the .NET blog to read more&lt;/a&gt;, or &lt;a href="https://pulumi.com/dotnet"&gt;check out our new .NET Core landing page&lt;/a&gt; if you can’t wait to dive in.&lt;/p&gt;
&lt;p&gt;True to the spirit of Pulumi, our .NET support and the associated libraries are &lt;a href="https://github.com/pulumi/pulumi"&gt;open source on GitHub&lt;/a&gt;. We are releasing .NET support in preview first so we can gather feedback over the next few weeks and make sure everything is just right. &lt;a href="https://slack.pulumi.com"&gt;Join us in our Community Slack&lt;/a&gt; — we can’t wait to hear what you think!&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>dotnet</category></item><item><title>Pulumi 1.0</title><link>https://www.pulumi.com/blog/pulumi-1-0/</link><pubDate>Thu, 05 Sep 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-1-0/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-1-0/index.png" /&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;p&gt;This blog post announces Pulumi 1.0, which has been superseded by newer versions. For information about the latest Pulumi release, please refer to the &lt;a href="https://www.pulumi.com/docs/"&gt;current documentation&lt;/a&gt; and &lt;a href="https://github.com/pulumi/pulumi/releases"&gt;recent release notes&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Today we are excited to announce the general availability of Pulumi 1.0. Pulumi is a modern infrastructure as code tool that lets you declare infrastructure using familiar, general-purpose languages, with a SaaS management console for configuring identities, organizations, and related policies. By using familiar languages, developers and operators are able to work better together, sharing and reusing best practices, accomplishing new levels of automation, and unlocking access to ecosystems of existing tools. The 1.0 release is a significant milestone for us, our community, and our customers, and signals completeness, stability, and compatibility.&lt;/p&gt;
&lt;h2 id="what-is-pulumi"&gt;What is Pulumi?&lt;/h2&gt;
&lt;p&gt;Using Pulumi, you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Declare infrastructure&lt;/strong&gt; in TypeScript, JavaScript, Python, or Go.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leverage tools&lt;/strong&gt; such as libraries, package managers, IDEs, and test frameworks from your language of choice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access all of the services from many clouds&lt;/strong&gt;, including AWS, Azure, GCP, Kubernetes, and DigitalOcean.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use the Pulumi CLI or CI/CD integrations&lt;/strong&gt; to perform deployments predictably and reliably.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build modern, reliable, and scalable applications&lt;/strong&gt; using a multitude of cloud architectures, including containers, serverless functions, and static websites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use higher level frameworks&lt;/strong&gt; that abstract away tedious aspects of cloud development.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This functionality is delivered through an open source SDK consisting of a CLI and assorted libraries. Pulumi also provides a hosted service for improved usability, reliability, security, and other management features.&lt;/p&gt;
&lt;h2 id="additional-features"&gt;Additional Features&lt;/h2&gt;
&lt;p&gt;In addition to the core infrastructure as code features, Pulumi&amp;rsquo;s SDK offers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stack management&lt;/strong&gt;: deploy to and promote between multiple environments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;State storage&lt;/strong&gt;: use the free Pulumi service or choose instead to manually manage state in AWS S3, Azure Storage, Google Cloud Storage, or the filesystem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration&lt;/strong&gt;: easily manage different configuration between environments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encrypted secrets&lt;/strong&gt;: use the free Pulumi KMS service to encrypt sensitive configuration, such as passwords or tokens, or plug in AWS KMS, Azure KeyVault, GCP KMS, or HashiCorp Vault.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using Pulumi in conjunction with the Pulumi service delivers the following additional features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pulumi Service&lt;/strong&gt;: a dashboard for gaining visibility into and managing your deployments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: user and organization identity provider integrations with GitHub, GitLab, Atlassian, or SAML/SSO, including Active Directory, Okta, Google G Suite, and others.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Role based access controls&lt;/strong&gt;: team management, also integrated with your identity provider.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REST API and Webhooks&lt;/strong&gt;: a fully programmable web API for advanced automation scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI/CD Integrations&lt;/strong&gt;: automated deployment integrations with Azure DevOps, AWS Code Services, CircleCI, Codefresh, GitHub, GitLab, Google Cloud Build, Jenkins, Travis, and others.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Pulumi Service is available as a free Individual Edition as well as advanced Team and Enterprise SaaS editions for larger teams looking for robust enterprise capabilities.&lt;/p&gt;
&lt;h2 id="why-pulumi"&gt;Why Pulumi?&lt;/h2&gt;
&lt;p&gt;Using familiar languages offers significant advantages for declaring your infrastructure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control flow&lt;/strong&gt;: use if statements, for loops, case statements, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstractions and reuse&lt;/strong&gt;: leverage classes and functions to avoid repeating the same boilerplate over and over again&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Package managers&lt;/strong&gt;: share libraries with your team or the community&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IDEs&lt;/strong&gt;: use your favorite IDE and get statement completion, live error checking, and interactive documentation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project organization&lt;/strong&gt;: use modules and well known techniques for managing complex projects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt;: apply standard test tools, frameworks, and techniques to infrastructure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code review&lt;/strong&gt;: use existing code review practices for infrastructure changes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach unlocks access to entire ecosystems that aren&amp;rsquo;t available to markup DSLs. This approach also helps developers and operators work better together using a shared foundation.&lt;/p&gt;
&lt;h2 id="how-pulumi-works"&gt;How Pulumi Works&lt;/h2&gt;
&lt;p&gt;Although Pulumi uses general-purpose imperative languages, it is declarative. The program simply declares a set of resources and the Pulumi engine orchestrates all CRUD operations.&lt;/p&gt;
&lt;p&gt;Packages in your language of choice provide full access to many clouds, including AWS, Azure, GCP, Kubernetes, DigitalOcean, and more. Each package projects the full set of services from the underlying cloud provider as classes and APIs. Declaring a new S3 bucket is as easy as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-bucket&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;acl&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;private&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Because of higher level components, even creating a new Kubernetes cluster is this easy:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-cluster&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kubeconfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kubeconfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;pulumi up&lt;/code&gt; CLI command runs this program using Pulumi&amp;rsquo;s multi-language engine, and presents a plan for review — including an overview of the resources to create, update, and/or delete. After you choose to apply those changes, the Pulumi engine coordinates those API calls in parallel to accomplish your deployment.&lt;/p&gt;
&lt;p&gt;To see this workflow in action, watch this short 5 minute video:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/QfJTJs24-JM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="how-to-get-it"&gt;How to Get It&lt;/h2&gt;
&lt;p&gt;The Pulumi 1.0 milestone signals completeness, stability, and compatibility, and is the result of two years of work helping 1,000s of customers take modern cloud architectures across many clouds into production. This includes startups and Global 2000s looking to innovate faster using the cloud.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re already a Pulumi user, simply upgrade in the usual ways.&lt;/p&gt;
&lt;p&gt;If this is your first time using Pulumi, &lt;a href="https://pulumi.com/docs/quickstart"&gt;give it a try today&lt;/a&gt;. It is open source and free to use.&lt;/p&gt;
&lt;p&gt;For more information about Pulumi Team and Enterprise editions, visit &lt;a href="https://pulumi.com/product"&gt;our products page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;d like to sincerely thank our community and customers for coming along on this journey with us. Without you, we couldn&amp;rsquo;t have reached this milestone. We hope you enjoy Pulumi 1.0!&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Happy Birthday to Pulumi open source!</title><link>https://www.pulumi.com/blog/happy-birthday-to-pulumi-open-source/</link><pubDate>Tue, 18 Jun 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/happy-birthday-to-pulumi-open-source/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/happy-birthday-to-pulumi-open-source/index.png" /&gt;
&lt;p&gt;One year ago today &amp;ndash; on June 18, 2018 &amp;ndash;
&lt;a href="https://www.pulumi.com/blog/introducing-pulumi-a-cloud-development-platform/"&gt;we open sourced Pulumi&lt;/a&gt;,
a new approach to multi-cloud infrastructure as code using your favorite
languages. And what a year it has been!&lt;/p&gt;
&lt;p&gt;Here are some highlights we&amp;rsquo;ve added in partnership with the community
since launching:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Over 100 &lt;a href="https://github.com/pulumi/examples"&gt;examples&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/registry/"&gt;tutorials&lt;/a&gt;, and a brand new
&lt;a href="https://www.pulumi.com/docs/get-started/"&gt;Getting Started guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-a-better-way-to-kubernetes"&gt;A native Kubernetes provider with 100% Kubernetes API/version coverage.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A steady stream of improvements across
&lt;a href="https://www.pulumi.com/docs/iac/get-started/aws/"&gt;AWS&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/docs/iac/get-started/azure/"&gt;Azure&lt;/a&gt;, and
&lt;a href="https://www.pulumi.com/docs/iac/get-started/gcp/"&gt;Google Cloud&lt;/a&gt; providers.&lt;/li&gt;
&lt;li&gt;Pulumi Crosswalk for AWS, a framework with built-in AWS infrastructure best practices.&lt;/li&gt;
&lt;li&gt;Over 20 additional providers, including
&lt;a href="https://github.com/pulumi/pulumi-cloudflare"&gt;CloudFlare&lt;/a&gt;,
&lt;a href="https://github.com/pulumi/pulumi-digitalocean"&gt;Digital Ocean&lt;/a&gt;, and
&lt;a href="https://www.pulumi.com/blog/managing-your-mysql-databases-with-pulumi/"&gt;MySQL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Brought our &lt;a href="https://www.pulumi.com/docs/reference/pkg/python/"&gt;Python 3 SDK&lt;/a&gt;
to parity with our
&lt;a href="https://www.pulumi.com/docs/reference/pkg/nodejs/"&gt;Node.js-based JavaScript and TypeScript SDKs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/pricing/"&gt;Team and Enterprise SaaS editions for teams managing infrastructure in production&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/pulumi-cloud/admin/organizations/"&gt;GitHub, GitLab, Atlassian, and SAML/SSO identity providers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/"&gt;CI/CD integrations with GitHub, GitLab, Codefresh, CircleCI, major clouds, and more&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/managing-secrets-with-pulumi/"&gt;Pluggable secrets management and transitive state encryption&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/iac/concepts/state-and-backends/"&gt;Pluggable state backends for AWS S3, Azure Blob Store, and Google Cloud Store&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/using-terraform-remote-state-with-pulumi/"&gt;Tools for managing complex, multi-stack environments, including Terraform integration&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Numerous engine reliability and performance improvements, including parallelism.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/"&gt;75 blogs, increasingly focused on end to end solutions we see working with customers&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition to the steady stream of product improvements, the community
has grown fast:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1,000s of cloud engineers&lt;/strong&gt; trying out Pulumi across over &lt;strong&gt;1,000
companies&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1,000 end users&lt;/strong&gt; collaborating in our Community Slack &amp;ndash;
including emerging MVPs!&lt;/li&gt;
&lt;li&gt;Open source contributions from &lt;strong&gt;over 100 community members&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Nearly &lt;strong&gt;5,000 commits&lt;/strong&gt;, across &lt;strong&gt;over 100 open source Git
repositories&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What we&amp;rsquo;ve enjoyed most is hearing about the innovation you, the end
user and customer, have accomplished thanks to Pulumi&amp;rsquo;s unique approach.
These experiences range from enabling better collaboration between
application and infrastructure engineers; vastly improved productivity;
more secure, robust, and reliable delivery pipelines; and an improved
ability to go to production in multiple clouds, including by leveraging
the cloud native Kubernetes stack.&lt;/p&gt;
&lt;p&gt;A few notable success stories include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mercedes-Benz R&amp;amp;D North America&lt;/strong&gt; used Python infrastructure as
code to break down team silos between developers and infrastructure
engineers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tableau&lt;/strong&gt; was able to get up and running with Kubernetes in AWS,
using Amazon EKS, and make progress on their journey to bringing
continuous delivery to their organization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning Machine&lt;/strong&gt; went from 25KLOC YAML to 500 lines of
JavaScript, got containers running in AWS and Kubernetes, and halved
their cloud bill along the way.
&lt;a href="https://www.pulumi.com/blog/delivering-cloud-native-infrastructure-as-code-a-pulumi-white-paper/Pulumi-Delivering-CNI-as-Code.pdf"&gt;Read more&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mapbox&lt;/strong&gt; built a scalable IoT tracking solution with serverless
Lambdas. &lt;a href="https://www.pulumi.com/blog/mapbox-iot-as-code-with-pulumi-crosswalk-for-aws/"&gt;Read more.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Multiple early stage startups, including &lt;strong&gt;Jargon&lt;/strong&gt;, a TechStars
company, have used Pulumi to get up and running quickly in the cloud
&amp;ndash; doing in days what used to take weeks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dozens&lt;/strong&gt; of more great stories that we can&amp;rsquo;t wait to share in the
weeks to come!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We want to sincerely thank our community and our customers and partners
&amp;ndash; without you, the year wouldn&amp;rsquo;t have nearly been as successful. The
best part is that we&amp;rsquo;re only just getting started. Expect another year
of more innovation, growing community engagement, customer success, and
more focus on end to end solutions borne out of experience.&lt;/p&gt;
&lt;p&gt;Whether it&amp;rsquo;s adopting infrastructure as code on your favorite cloud,
deploying containers to Kubernetes, or architecting and executing on
your multi-cloud journey, Pulumi is here for you!&lt;/p&gt;
&lt;p&gt;Sincerely,&lt;/p&gt;
&lt;p&gt;Joe and the Pulumi Team&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Introducing Pulumi Crosswalk for AWS: The Easiest Way to AWS</title><link>https://www.pulumi.com/blog/introducing-pulumi-crosswalk-for-aws-the-easiest-way-to-aws/</link><pubDate>Mon, 10 Jun 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/introducing-pulumi-crosswalk-for-aws-the-easiest-way-to-aws/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/introducing-pulumi-crosswalk-for-aws-the-easiest-way-to-aws/index.png" /&gt;
&lt;div class="note note-warning"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.70121449e0dde6f8c01ff68423fffaa0336ecc73c7bbc87506404126694ca58c.svg#p-warning-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;Some of the code in this post is out of date. See the &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/"&gt;AWS guides&lt;/a&gt; for an updated overview and examples.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Amazon Web Services provides an incredible platform for developers to
build cloud-native applications, and is used by millions of customers of
all sizes. The building block services that AWS offers enable teams to
offload undifferentiated heavy-lifting to AWS. To maximally benefit from
these services though, cloud engineering teams must learn how to compose
all of these building blocks together to build and deliver their own
applications. Today, this is still too hard. Getting from your laptop to
a production-ready AWS deployment frequently takes days or weeks instead
of minutes or hours. And AWS building block services frequently leave
you to re-implement (and re-discover) best-practices instead of
providing these as smart defaults.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/"&gt;Pulumi Crosswalk for AWS&lt;/a&gt; is a
new open source library of infrastructure-as-code components that make
it easier to get from zero to production on AWS, easier to adopt AWS
best practices by default, and easier to evolve your AWS infrastructure
as your application needs mature.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/introducing-pulumi-crosswalk-for-aws-the-easiest-way-to-aws/crosswalk-for-aws.png" alt="Pulumi Crosswalk for AWS"&gt;&lt;/p&gt;
&lt;p&gt;Crosswalk for AWS offers higher-level components for a wide range of the
AWS platform - from serverless (Lambda, API Gateway and more) to
containers (ECS, Fargate) to Kubernetes (EKS) and across networking
(VPCs, SecurityGroups), monitoring (Cloudwatch Dashboards and Alarms)
and load balancing (ALB and NLB). Because Crosswalk builds on the
primitive building blocks of the AWS platform, you can use 100% of what
AWS offers, and can seamlessly move between high-level components and
low-level platform primitives, mixing-and-matching as needed.&lt;/p&gt;
&lt;p&gt;In some of these domains, there have been successful tools that have
helped developers more easily work with one specific aspect of AWS -
&lt;a href="https://serverless.com/"&gt;Serverless Framework&lt;/a&gt; for serverless,
&lt;a href="https://docs.docker.com/compose/"&gt;Docker Compose&lt;/a&gt; for ECS,
&lt;a href="https://github.com/weaveworks/eksctl"&gt;&lt;code&gt;eksctl&lt;/code&gt;&lt;/a&gt; for EKS. But these
tools have traditionally been limited to one specific kind of compute,
limiting what users can accomplish, fragmenting development of complete
cloud solutions, and leading to sharp cliffs when application needs
evolve. Crosswalk for AWS offers the same kind of simpler and more
productive developer interface as these tools, but applied uniformly
across the entire AWS platform. Simple things are simple, and
arbitrarily complex things are possible.&lt;/p&gt;
&lt;p&gt;Whether you are starting a new SaaS project at a startup, migrating an
enterprise application to cloud-native infrastructure, or delivering a
new service as part of an established cloud application, Crosswalk for
AWS provides the easiest way to get from zero to production, and to then
evolve with your projects&amp;rsquo; needs. You can
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/"&gt;get started with Crosswalk for AWS&lt;/a&gt; today!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; Crosswalk for AWS projects are authored using the Pulumi
infrastructure-as-code tools. Pulumi allows you to define your
infrastructure using code. As your infrastructure code evolves, Pulumi
makes the minimal required changes to your cloud resources, ensuring
that your infrastructure is updated without downtime (if possible).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="from-zero-to-production-and-beyond-with-crosswalk-for-aws"&gt;From Zero to Production And Beyond with Crosswalk for AWS&lt;/h2&gt;
&lt;h3 id="serverless-lambda-api-gateway"&gt;Serverless (Lambda, API Gateway)&lt;/h3&gt;
&lt;p&gt;When getting started with a new cloud project, the starting point is
often just serving a simple API on the internet. With just a few lines
of code and tens of seconds to deploy, Crosswalk for AWS gives us our
API.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/awsx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;eventHandler&lt;/span&gt;: &lt;span class="kt"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;statusCode&lt;/span&gt;: &lt;span class="kt"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;body&lt;/span&gt;: &lt;span class="kt"&gt;JSON.stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By building on top of great AWS building blocks like Lambda, API
Gateway, IAM and more, we avoid needing to worry about infrastructure,
pay nearly zero fixed costs, and gain the ability to iterate quickly.
With just a few more lines of code, we can
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/api-gateway#configuring-api-gateway-custom-domains-and-ssl-using-route53-and-acm"&gt;wire up to our own domain&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/api-gateway#controlling-and-managing-access-to-apis"&gt;add authorization&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/registry/packages/aws/api-docs/dynamodb/table/"&gt;provision a database&lt;/a&gt;,
or &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/lambda#available-aws-services-with-event-sources"&gt;chain together a more complex event-driven application&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="containers-ecs-fargate"&gt;Containers (ECS, Fargate)&lt;/h3&gt;
&lt;p&gt;As our needs grow, we might find we need to deploy containers - either
custom applications or existing Docker images. Again, just a few lines
of code gets our container running in production in AWS.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/awsx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create the cluster
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cluster&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Configure a Load Balancer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;alb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ApplicationLoadBalancer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;lb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;securityGroups&lt;/span&gt;: &lt;span class="kt"&gt;cluster.securityGroups&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;web&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;alb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;web&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt;: &lt;span class="kt"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;external&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Define the scaled-out Fargate service
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appService&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FargateService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;app-svc&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;taskDefinitionArgs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;image&lt;/span&gt;: &lt;span class="kt"&gt;awsx.ecs.Image.fromPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;app&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./app&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;portMappings&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nx"&gt;web&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;desiredCount&lt;/span&gt;: &lt;span class="kt"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Using ECS, Fargate, ECR and ELB, we get a robust production-ready
container deployment - horizontally scaled out, load-balanced, and
integrated with a private image repository. With just a few more lines
of code, we can &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/ecs#creating-an-auto-scaling-group-for-ecs-cluster-instances"&gt;add autoscaling&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/ecs#explicitly-creating-ecs-clusters-for-ec2-or-fargate"&gt;customize our ECS cluster&lt;/a&gt;,
or &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/ecs#ecs-tasks-containers-and-services"&gt;wire through advanced container configuration&lt;/a&gt;
(volumes, environment variables, and more).&lt;/p&gt;
&lt;h3 id="networking-vpc"&gt;Networking (VPC)&lt;/h3&gt;
&lt;p&gt;To adopt best practices security posture, we may want to move our
cluster into a custom VPC, and run our containers in private subnets. We
can define and configure our VPC, and then redeploy our containers into
this new VPC with ease:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/awsx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Vpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;vpc&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;numberOfAvailabilityZones&lt;/span&gt;: &lt;span class="kt"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cluster&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;: &lt;span class="kt"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ... same as before ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;Vpc&lt;/code&gt; component builds on best-practices Virtual Private Cloud
design patterns based on &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html"&gt;AWS guidance and documentation&lt;/a&gt;.
By building in simple defaults for routing, subnet structure, NATs and
multi-AZ you can get started quickly without having to re-discover these
best practices. And as your needs grow, you can deeply customize and
evolve your VPC structure - &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/vpc#configuring-cidr-blocks-for-a-vpc"&gt;defining custom CIDR blocks&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/vpc#configuring-internet-and-nat-gateways-for-subnets-in-a-vpc"&gt;customizing Internet and NAT Gateways&lt;/a&gt;
or &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/vpc#configuring-subnets-for-a-vpc"&gt;additional additional private subnets&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="kubernetes-eks"&gt;Kubernetes (EKS)&lt;/h3&gt;
&lt;p&gt;As our project continues to evolve, we may want to move our container
workloads into Kubernetes using EKS. We can stand up an EKS cluster with
just a few lines of code, then customize our cluster and deploy
Kubernetes workloads into our cluster.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/awsx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/eks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create a VPC for our cluster.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Vpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;vpc&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create the EKS cluster itself.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cluster&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;vpcId&lt;/span&gt;: &lt;span class="kt"&gt;vpc.id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;subnetIds&lt;/span&gt;: &lt;span class="kt"&gt;vpc.privateSubnetIds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;instanceType&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;m5.large&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;desiredCapacity&lt;/span&gt;: &lt;span class="kt"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;minSize&lt;/span&gt;: &lt;span class="kt"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;maxSize&lt;/span&gt;: &lt;span class="kt"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;deployDashboard&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Export the cluster&amp;#39;s kubeconfig.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kubeconfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kubeconfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Building on EKS we get all the benefits of managed Kubernetes paired
with the platform capabilities of AWS. With Crosswalk for AWS, we can
get started quickly, and then evolve to take advantage of all of these
platform features, like &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/eks#configuring-your-eks-cluster-s-worker-nodes-and-node-groups"&gt;customized node groups&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/eks#configuring-your-eks-cluster-s-networking"&gt;private networking&lt;/a&gt;,
and even &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/eks#deploying-existing-kubernetes-yaml-config-to-your-eks-cluster"&gt;deploying Kubernetes YAML and Helm charts&lt;/a&gt;
to our cluster.&lt;/p&gt;
&lt;h3 id="monitoring-cloudwatch"&gt;Monitoring (CloudWatch)&lt;/h3&gt;
&lt;p&gt;Getting our infrastructure up and running in AWS is great, but we also
want to be able to monitor it. We can add a few lines to any of the
solutions above to define metrics, dashboards, alerting and more to
monitor our AWS infrastructure.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/aws&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/awsx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create a bucket and a function to log all new object created events
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onObjectCreated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;newObject&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Create a CloudWatch Dashobard for our functions invocations
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dashboardName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;funcDashboard&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dashboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cloudwatch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Dashboard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dashboardName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;widgets&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;awsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cloudwatch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LineGraphMetricWidget&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Lambda invocations&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;width&lt;/span&gt;: &lt;span class="kt"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;metrics&lt;/span&gt;: &lt;span class="kt"&gt;awsx.lambda.metrics.invocations&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;statistic&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Sum&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;period&lt;/span&gt;: &lt;span class="kt"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Export the URL of the dashboard in the AWS console
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dashboardUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="sb"&gt;`https://&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;.console.aws.amazon.com/cloudwatch/home?`&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="sb"&gt;`region=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;#dashboards:name=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;dashboardName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With CloudWatch being deeply integrated into all AWS services, we can
easily build up robust logging, alerting and dashboarding solutions
across our AWS infrastructure. With just a few more lines of code we can
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/cloudwatch#configuring-cloudwatch-logging"&gt;get logs for our functions and containers&lt;/a&gt;,
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/cloudwatch#creating-cloudwatch-alarms"&gt;create alarms when we cross critical thresholds&lt;/a&gt;,
and &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/cloudwatch#defining-cloudwatch-dashboards-in-code"&gt;create rich dashboard layouts&lt;/a&gt;
all of which will version along with our infrastructure!&lt;/p&gt;
&lt;h2 id="early-feedback"&gt;Early Feedback&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve been working on pieces of Crosswalk for AWS since before we
launched Pulumi, and we&amp;rsquo;re excited to be launching Crosswalk for AWS
today to bring these together for all AWS users. Over the last few
months, users have built on Crosswalk for AWS for all of the scenarios
above and more.&lt;/p&gt;
&lt;p&gt;Tableau has used Crosswalk for AWS to accelerate their Kubernetes
migration on AWS, building on the networking and EKS capabilities of
Crosswalk for AWS.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;We&amp;rsquo;ve been happily using Pulumi&amp;rsquo;s EKS support for more than three
months now. Our team was looking for an end-to-end solution to tame
the complexity of Kubernetes on AWS and ensure we adhere to AWS best
practices. Pulumi&amp;rsquo;s Crosswalk effort has equipped our team to scale
far better, our delivery is now automated, and we can now deliver new
application and infrastructure features with much faster turn-around,
sometimes in just a few hours. Pulumi is a key contributor to our
team&amp;rsquo;s improvement in productivity.&amp;rdquo;&lt;/em&gt; - &lt;strong&gt;Pankaj Dhingra&lt;/strong&gt;, Sr
Director, Cloud Engineering, Tableau&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Compute Software has used Crosswalk for AWS to go from zero to
production, and then to evolve their infrastructure in AWS, all without
needing a dedicated cloud infrastructure engineering team.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;We use Crosswalk for AWS with Fargate. It&amp;rsquo;s been instrumental in
getting us into production. Deploying to the cloud is necessarily
complex. Crosswalk streamlines the process by exposing the controls
you care about, always allowing you to dive deeper when needed.&amp;rdquo;&lt;/em&gt; -
&lt;strong&gt;Kenny Williams&lt;/strong&gt;, Co-Founder, Compute Software&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We&amp;rsquo;re excited by the success these teams and many more have already had
with Crosswalk for AWS, but even more excited about the potential to
truly democratize access to the AWS platform and unlock highly
productive cloud development for all kinds of engineering organizations.&lt;/p&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s Next?&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re still just scratching the surface of what&amp;rsquo;s possible with
Crosswalk. We&amp;rsquo;re continuing to evolve the open source projects to
simplify additional features of the AWS platform. And we&amp;rsquo;re also working
to bring the same approach to other cloud platforms, including Azure,
GCP and Kubernetes.&lt;/p&gt;
&lt;p&gt;We believe that making it easier for cloud engineers to develop and
deploy natively in the cloud will unlock creativity and empower
developers to take advantage of more of the rich capabilities of AWS. We
can&amp;rsquo;t wait to see what you build with Crosswalk!&lt;/p&gt;
&lt;p&gt;Crosswalk for AWS is free and open source, and you can &lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/"&gt;get started today&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more on Crosswalk for AWS see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/"&gt;Pulumi Crosswalk for AWS documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/get-started-with-docker-on-aws-fargate-using-pulumi/"&gt;Get Started with Docker on AWS Fargate using Pulumi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/easy-serverless-apps-and-infrastructure-real-events-real-code/"&gt;Easy Serverless Apps and Infrastructure &amp;ndash; Real Events, Real Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/easily-create-and-manage-aws-eks-kubernetes-clusters-with-pulumi/"&gt;Easily Create and Manage AWS EKS Kubernetes Clusters with Pulumi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/serving-a-static-website-on-aws-with-pulumi/"&gt;Serving a Static Website on AWS with Pulumi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/mapbox-iot-as-code-with-pulumi-crosswalk-for-aws/"&gt;IoT as Code with MapBox and Pulumi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Luke Hoban</author><category>serverless</category><category>aws</category><category>containers</category><category>announcements</category><category>kubernetes</category><category>eks</category><category>lambda</category><category>api-gateway</category><category>docker</category></item><item><title>Announcing Support for Email-based Identities</title><link>https://www.pulumi.com/blog/announcing-support-for-email-based-identities/</link><pubDate>Thu, 21 Mar 2019 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/announcing-support-for-email-based-identities/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/announcing-support-for-email-based-identities/index.png" /&gt;
&lt;p&gt;We have been hard at work the past few months providing our users with
more ways to connect to Pulumi. Here are some our past announcements
related to identities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/pulumi-now-supports-atlassian-identity/"&gt;Support for Atlassian identity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/connecting-multiple-identities-to-pulumi/"&gt;Connecting multiple identities to an existing Pulumi account&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/welcoming-gitlab-users-to-pulumi/"&gt;Support for GitLab identity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Today&lt;/strong&gt;, we are pleased to announce that we are launching support for
email-based identities. You no longer need to use a social identity to
sign-up for an account on Pulumi. Just fill out
the &lt;a href="https://app.pulumi.com/signup/email"&gt;signup&lt;/a&gt; form, and you are
ready to go.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/announcing-support-for-email-based-identities/email-signup.png" alt="Email Signup"&gt;&lt;/p&gt;
&lt;h2 id="quickstart"&gt;Quickstart&lt;/h2&gt;
&lt;p&gt;Get started quickly by creating a new &lt;a href="https://app.pulumi.com/site/new-project"&gt;template-based project&lt;/a&gt;.
This creates a project, and a &lt;a href="https://www.pulumi.com/docs/concepts/stack/"&gt;stack&lt;/a&gt; ready to be used by the Pulumi CLI.
The wizard also shows you the commands you need to run in the CLI.&lt;/p&gt;
&lt;p&gt;Haven&amp;rsquo;t setup your CLI for a specific cloud yet? Check out this docs page on how to do that.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/uploads/content/blog/announcing-support-for-email-based-identities/new-project-wizard.gif" alt="New Project Wizard"&gt;&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve deployed your first stack, the next step is up to you. You can refer to our documentation on integrating Pulumi into your CI/CD pipeline, setting up chat-ops workflows via Webhooks, or taking your Kubernetes solutions to the next level!&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;d love to hear what you&amp;rsquo;re up to. Say 👋 in the &lt;a href="https://slack.pulumi.com/"&gt;Pulumi Community Slack&lt;/a&gt;
or &lt;a href="https://www.pulumi.com/contact/"&gt;drop us a line&lt;/a&gt;.&lt;/p&gt;</description><author>Praneet Loke</author><category>announcements</category><category>features</category></item><item><title>2018 Year at a Glance</title><link>https://www.pulumi.com/blog/2018-year-at-a-glance/</link><pubDate>Mon, 31 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/2018-year-at-a-glance/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/2018-year-at-a-glance/index.png" /&gt;
&lt;p&gt;As we close out 2018, and enter into
a New Year, I was reflecting on our progress here at Pulumi this past year and wanted to share some thoughts.
It’s been an incredible year and we are hugely thankful to our passionate community, customers, and
partners.&lt;/p&gt;
&lt;p&gt;Here are some of the exciting things that happened:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Launching our open source
community.&lt;/strong&gt; After being hard at work for a little over a year,
&lt;a href="https://www.pulumi.com/blog/introducing-pulumi-a-cloud-development-platform/"&gt;we launched our open source project&lt;/a&gt;,
with the aim of making it considerably easier and more enjoyable to create and operate
cloud software. This was a major moment for us. We had previously only shown Pulumi to a few select friends,
family, and private beta users, and the reception was beyond our wildest expectations. We got passionate +1’s
from cloud engineers of all roles and responsibilities &amp;ndash; developers, infrastructure engineers, operators, and
managers alike. The Pulumi community has since grown to thousands of users across hundreds of companies of all
sizes spread across the globe. The community is now a warm, welcoming, and collaborative place with significant
open source contributions and passionate community leaders emerging who are helping one another while also
helping us to make Pulumi even better.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Support for major public, private, and hybrid clouds.&lt;/strong&gt; We launched with support for the three major public
clouds, &lt;a href="https://www.pulumi.com/docs/clouds/aws/"&gt;AWS&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/clouds/azure/"&gt;Azure&lt;/a&gt;, and
&lt;a href="https://www.pulumi.com/docs/clouds/gcp/"&gt;Google Cloud&lt;/a&gt;, and have since added capabilities across all
of them, including adding &lt;a href="https://www.pulumi.com/registry/packages/aws/how-to-guides/rest-api/"&gt;serverless&lt;/a&gt;,
&lt;a href="https://github.com/pulumi/examples/blob/master/aws-ts-containers/index.ts"&gt;containers&lt;/a&gt;, and
&lt;a href="https://github.com/pulumi/examples/blob/master/aws-js-webserver/index.js"&gt;infrastructure&lt;/a&gt;
productivity libraries &amp;ndash; it is here where we believe Pulumi’s unique approach of using general purpose languages truly
shines. We immediately had a wave of inbound interest in applying the Pulumi approach to infrastructure as code in other
areas, and quickly added other providers including OpenStack, VMWare vSphere, Alibaba Cloud, F5 BigIP, and more. In
September, we unveiled &lt;a href="https://www.pulumi.com/registry/packages/kubernetes/"&gt;a native Kubernetes provider&lt;/a&gt; with support for the
entire API surface area across all versions, plus an operations tool, &lt;a href="https://github.com/pulumi/kubespy"&gt;KubeSpy&lt;/a&gt; &amp;ndash;
both of which continue to lead to significant community growth. Many customers are loving that they can achieve a
consistent engineering workflow across multi-cloud environments &amp;ndash; often spanning public, private, and/or hybrid clouds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Launching our commercial SaaS product.&lt;/strong&gt; In October, &lt;a href="https://www.pulumi.com/blog/building-a-future-of-cloud-engineering"&gt;we launched our commercial SaaS
product&lt;/a&gt;, with reasonable
&lt;a href="https://www.pulumi.com/pricing/"&gt;pricing&lt;/a&gt; so that teams of all sizes are able to get their code to the cloud
productively, securely, and collaboratively. If Pulumi is like Git &amp;ndash; a local CLI and SDK &amp;ndash; then the Pulumi SaaS is
like GitHub &amp;ndash; a hosted service to ensure you can use Pulumi in a team setting. In addition to the Team Edition, which
is meant for the “Fortune 500,000,” we also launched the Enterprise Edition, for the Fortune 500. We already have
multiple Fortune 500 customers moving into production with Pulumi, and expect this to be a significant area of future
growth. Since launching, we’ve added support for more identity providers &amp;ndash; including GitHub, GitLab, and SSO/SAML (for
Okta, ADFs, and others) &amp;ndash; as well as team management capabilities, such as RBAC, our GitHub App, GitHub Actions
partnership, and more.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Closing our Series A funding.&lt;/strong&gt; Also in October, &lt;a href="https://www.geekwire.com/2018/pulumi-raises-15m-series-funding-round-launches-multicloud-app-deployment-service/"&gt;we secured $15MM in additional
funds&lt;/a&gt;,
which will enable us to scale to meet the incredible opportunity in front of us. The funds will ensure that our open
source projects are constantly improving and achieving production quality; that our commercial product can meet the most
rigorous business requirements, small or large; and that we can grow our organization in areas necessary to meet our
customers’ needs. When we set out to make it 10x easier for teams to do cloud engineering, we saw many facets in need of
attention, and these funds will help us take concrete steps towards realizing the vision.&lt;/p&gt;
&lt;p&gt;What an incredible year! It can still hardly believe it’s been just six months since launching.&lt;/p&gt;
&lt;p&gt;As we look to 2019, we plan to continue engaging with and growing our open source community, built on the same tenets of openness and collaboration &amp;ndash; the best part of
my job. We have heard loud and clear that what customers need today are solutions, not just raw technologies, and we
will continue to deliver commercial value in our Team and Enterprise Edition SaaS products that cloud engineering
easier, more secure, and more collaborative.&lt;/p&gt;
&lt;p&gt;We are just getting started and we can’t wait to continue on the journey of
reimagining cloud engineering together. Thank you for your passionate support &amp;ndash; and here’s to a wonderful 2019!&lt;/p&gt;
&lt;p&gt;— Joe&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Delivering Cloud Native Infrastructure as Code</title><link>https://www.pulumi.com/blog/delivering-cloud-native-infrastructure-as-code-a-pulumi-white-paper/</link><pubDate>Wed, 05 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/delivering-cloud-native-infrastructure-as-code-a-pulumi-white-paper/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/delivering-cloud-native-infrastructure-as-code-a-pulumi-white-paper/index.png" /&gt;
&lt;p&gt;&lt;strong&gt;Enterprise software has undergone a slow shift from containerless
servers to serverless containers.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The evolution of the cloud, combined with the shift to increasingly
ephemeral infrastructure, and the connection of application code and
infrastructure code, demands a different view of cloud development and
devops.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/delivering-cloud-native-infrastructure-as-code-a-pulumi-white-paper/graph.png" alt="infrastructure - cloud native - functions"&gt;&lt;/p&gt;
&lt;p&gt;To a first approximation, all developers are cloud developers, all
applications are cloud native, and all operations are cloud-first. Yet,
there is a lack of a consistent approach to delivering cloud native
applications and infrastructure. The tools and processes differ by
technology generation, and even by cloud vendor, and so deny the full
potential of cloud native application delivery.&lt;/p&gt;
&lt;p&gt;In our latest white paper,
&lt;a href="https://www.pulumi.com/blog/delivering-cloud-native-infrastructure-as-code-a-pulumi-white-paper/Pulumi-Delivering-CNI-as-Code.pdf"&gt;Delivering Cloud Native Infrastructure as Code&lt;/a&gt;,
we make the case for a consistent programming model for the cloud and examine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How the cloud has already evolved three times as it increasingly
moves toward stateless compute to deliver on the opportunities
afforded by unprecedented economies of scope and scale.&lt;/li&gt;
&lt;li&gt;How stateless compute has shifted infrastructure management concerns
from &amp;lsquo;at rest&amp;rsquo; to &amp;lsquo;in motion&amp;rsquo;, and moved these concerns up the stack
to development.&lt;/li&gt;
&lt;li&gt;How the growth of DSL-based tools has lead to complexity for DevOps
teams, failed to deliver on the promised collaboration between
development and operations functions, and does not satisfy the need
for increasing delivery speed in the cloud.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can read the paper in full &lt;a href="https://www.pulumi.com/blog/delivering-cloud-native-infrastructure-as-code-a-pulumi-white-paper/Pulumi-Delivering-CNI-as-Code.pdf"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let us know what you think!&lt;/p&gt;</description><author>Marc Holmes</author><category>announcements</category><category>cloud-native</category></item><item><title>Meet the Pulumi team at AWS re:Invent</title><link>https://www.pulumi.com/blog/meet-the-pulumi-team-at-aws-reinvent/</link><pubDate>Thu, 15 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/meet-the-pulumi-team-at-aws-reinvent/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/meet-the-pulumi-team-at-aws-reinvent/index.png" /&gt;
&lt;p&gt;Heading to AWS re:Invent? Concerned about how you&amp;rsquo;ll manage to get
&lt;a href="https://www.pulumi.com/cloudformation/"&gt;that much YAML&lt;/a&gt; into your carry
on bag? Or maybe you just like purple.&lt;/p&gt;
&lt;p&gt;Whatever the reason, the Pulumi team will be there all week at **Booth
316, Startup Central, Aria Quad, **and we&amp;rsquo;d love to chat with you about
&lt;a href="https://www.pulumi.com/docs/iac/clouds/aws/guides/"&gt;AWS and Pulumi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Catch up with us on serverless functions, containers and
&lt;a href="https://www.pulumi.com/kubernetes/"&gt;Kubernetes&lt;/a&gt;, managed services and
any other cloud native infrastructure as code, and see how you can more
productively manage your AWS cloud resources with general purpose
programming languages. We can even help you
&lt;a href="https://www.pulumi.com/cloudformation/"&gt;migrate your CloudFormation to Pulumi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want to grab a specific time to talk through your needs,
&lt;a href="https://info.pulumi.com/meetings/team-pulumi/aws-reinvent-catchup"&gt;then use this link&lt;/a&gt;,
otherwise we&amp;rsquo;ll just see you at the booth!&lt;/p&gt;</description><author>Marc Holmes</author><category>announcements</category></item><item><title>Building a future of cloud engineering</title><link>https://www.pulumi.com/blog/building-a-future-of-cloud-engineering/</link><pubDate>Mon, 22 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/building-a-future-of-cloud-engineering/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/building-a-future-of-cloud-engineering/index.png" /&gt;
&lt;p&gt;We founded Pulumi because of a deeply held belief that the cloud
promises to change all aspects of software development and that there
remains an incredible opportunity to reimagine the entire experience,
from idea to creation to delivery to management, with one person in
mind: you, the engineer.&lt;/p&gt;
&lt;p&gt;Too often, we still think of the cloud as an afterthought, as though it
were still 1998 with virtual machines and XML configuration. At Pulumi,
we believe instead that the cloud is a first class application
architecture concern. We still use thankless tools, markup languages,
and brittle, homegrown delivery platforms. At Pulumi, we believe instead
in a lovable and productive development experience, with excellent
collaboration and reuse.&lt;/p&gt;
&lt;p&gt;Since getting started just over a year and a half ago, we&amp;rsquo;ve stood on
the shoulders of giants, tapping into decades of progress our industry
has made in programming languages, runtimes, and frameworks, and
marrying it with all the amazing innovation in cloud containers,
orchestrators, managed data and AI services, and serverless
capabilities.&lt;/p&gt;
&lt;p&gt;The best part of this journey has been hearing from our &lt;a href="https://slack.pulumi.com/"&gt;passionate community&lt;/a&gt;. Thousands of engineers, and
hundreds of companies, have created and deployed cloud applications and
infrastructure using Pulumi. We are proud to be &lt;a href="https://github.com/pulumi/pulumi"&gt;an open source company&lt;/a&gt;, and thrive on the daily
collaboration and evolution of the platform.&lt;/p&gt;
&lt;p&gt;And we&amp;rsquo;re just getting started! Today we are thrilled to announce that
we&amp;rsquo;ve raised $15M in additional funding from our partners, Madrona
Venture Group and Tola Capital, both here in Seattle. We are honored by
their shared belief in our vision and our team. &lt;a href="https://info.pulumi.com/press-release/pulumi-announces-15m-in-series-a-funding-to-accelerate-development-and-adoption-of-its-cloud-native-development-platform"&gt;Read more in our press
release.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="how-we-got-here-a-tale-of-cloud-evolution"&gt;How We Got Here, a Tale of Cloud Evolution&lt;/h2&gt;
&lt;p&gt;We have seen stunning advancement in cloud platform capabilities. It&amp;rsquo;s
hard to believe that Docker was launched just five years, and AWS Lambda
only three, ago! And yet, these technologies change all aspects of how
we create, deliver, and manage cloud software. Meanwhile, the cloud has
become more programmable with APIs everywhere.&lt;/p&gt;
&lt;p&gt;At the same time, &amp;ldquo;DevOps&amp;rdquo; as an approach to organizing teams and
developing software has matured greatly, and is now the default for many
organizations. New practices such as infrastructure-as-code, immutable
infrastructure, and Site Reliability Engineering have modernized these
roles, giving us approaches that can leverage a more rigorous software
engineering practices to tasks that used to be more ad-hoc, manual, and
error prone.&lt;/p&gt;
&lt;p&gt;But despite these fundamental changes, the way we engineer the cloud
hasn&amp;rsquo;t fundamentally changed. As cloud engineers, we still think of configuration as an
afterthought and a task best suited for JSON, YAML, or DSLs. Each
individual resource we provision &amp;ndash; even fine-grained ones like
serverless functions &amp;ndash; requires often an equal amount of configuration
as there is actual application code. The lack of expressiveness has led
us to resort to bolting on templating systems, writing mountains of
bash, and overall find ourselves swimming in a sea of complexity.&lt;/p&gt;
&lt;p&gt;The problem is, these are crude approximations of familiar, general-purpose languages. They
lack real abstraction, sharing, and reuse. You can&amp;rsquo;t fire up your editor
and refactor, test, or analyze your code to find bugs ahead of time.
Instead, you find simple syntax errors when it&amp;rsquo;s too late, after
production is on the floor. Developers hate to touch those configuration
languages, and yet simultaneously operators want to be more productive
and empower their teams to collaborate.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s safe to conclude: we have hit the limits of the &amp;ldquo;afterthought&amp;rdquo;
approach.&lt;/p&gt;
&lt;h2 id="towards-cloud-engineering"&gt;Towards Cloud Engineering&lt;/h2&gt;
&lt;p&gt;We believe in a future where developers and operators alike can meet on
common ground to work together. We like to call this combined discipline
&lt;strong&gt;cloud engineering&lt;/strong&gt;. It&amp;rsquo;s not Dev, it&amp;rsquo;s not DevOps, and it&amp;rsquo;s not
SRE; cloud engineering is the best of all of them. In this new future, our teams will
experience more joy, collaboration, and productivity than ever before.&lt;/p&gt;
&lt;p&gt;Enter Pulumi.&lt;/p&gt;
&lt;p&gt;Using your favorite general purpose programming language &amp;ndash; whether it
is JavaScript, TypeScript, Python, Go, or something else &amp;ndash; you can
express the entirety of your cloud software. As a cloud engineer, you can develop it in your
favorite editor, with statement completion, built-in documentation, and
interactive feedback when you&amp;rsquo;ve got something wrong. You can test
things and benefit from static analysis and linters that enforce best
practices. You can reuse packages, publish your own, and refactor your
code just like with application code. In fact, after living in this
world for long enough, the boundary between infrastructure and
application code begins to blur.&lt;/p&gt;
&lt;p&gt;This has led to a phrase we use a lot at Pulumi &amp;ndash; &lt;strong&gt;program the
cloud&lt;/strong&gt; &amp;ndash; our rally cry, if you will.&lt;/p&gt;
&lt;p&gt;Just like code, we can collaborate with source control systems like Git
&amp;ndash; code reviewing changes, pushing and pulling code to perform
deployments &amp;ndash; using easy but robust continuous delivery workflows.
Thanks to familiar languages, a cloud object model, and programmable cloud
APIs, the system has true semantic understanding of your cloud software,
its resources and their relationships, which can be used for rich
deployment statuses and to organize and find information more easily.
It&amp;rsquo;s never been such a breeze to go from idea to production.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve become enamored by this new approach to creating software that is
truly born in the cloud. But it&amp;rsquo;s not just our own belief &amp;ndash; this new age of cloud engineering is
working terrifically in practice. We have worked with organizations of
all sizes &amp;ndash; small ISVs to Fortune 500 Enterprises &amp;ndash; to vastly
improve their team efficiency and velocity. We almost always reduce
configuration sprawl by an order of magnitude thanks to Pulumi, leading
to a level of productivity that these teams previously hadn&amp;rsquo;t imagined
was possible. Developers, operators, and managers alike are loving
living in this future of cloud engineering.&lt;/p&gt;
&lt;h2 id="pulumis-next-chapter"&gt;Pulumi&amp;rsquo;s Next Chapter&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve only just begun. Pulumi supports AWS, Azure, Google Cloud
Platform, and Kubernetes in a big way, with early support for VMWare
vSphere and OpenStack. Our delivery platform works great with your
favorite CI systems. Expect to see continued growth in all of these
areas, in addition to new clouds, languages, and integrations.&lt;/p&gt;
&lt;p&gt;Today we launched &lt;a href="https://www.pulumi.com/pricing/"&gt;the Team Edition&lt;/a&gt; for our
SaaS delivery platform. This includes many features that you, the cloud engineering
community, told us you need to better operationalize Pulumi within your
teams. We already have many happy customers using these features
successfully for organizations big and small. Expect to see a steady
stream of improvements, in addition to Enterprise Edition capabilities
for the largest of organizations needing on-premises, advanced security,
and custom identity. Please always &lt;a href="https://www.pulumi.com/contact"&gt;let us
know&lt;/a&gt; how we can better meet your
needs.&lt;/p&gt;
&lt;p&gt;This new round of funding will allow us to strengthen our commitment to
open source and community, increase our R&amp;amp;D velocity, and also scale our
business to enable organizations of all sizes to successfully achieve
cloud engineering within their teams. We are &lt;a href="https://www.pulumi.com/careers"&gt;hiring in all areas of the
company&lt;/a&gt; as we enter this next exciting
chapter of the company.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/install/"&gt;Download Pulumi&lt;/a&gt; &amp;ndash; we
can&amp;rsquo;t wait to see all the great things you build next with Pulumi!&lt;/p&gt;
&lt;p&gt;Joe &amp;amp; Eric&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item><item><title>Continuous Delivery to Any Cloud using GitHub Actions</title><link>https://www.pulumi.com/blog/continuous-delivery-to-any-cloud-using-github-actions-and-pulumi/</link><pubDate>Wed, 17 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/continuous-delivery-to-any-cloud-using-github-actions-and-pulumi/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/continuous-delivery-to-any-cloud-using-github-actions-and-pulumi/index.png" /&gt;
&lt;p&gt;Today we announced our partnership with GitHub on the &lt;a href="https://github.com/features/actions"&gt;new GitHub
Actions feature&lt;/a&gt;. We are super
excited about this bold and innovative technology, especially as it
relates to Pulumi, and CI/CD more broadly. We truly believe that Pulumi
plus GitHub Actions delivers the easiest, most capable, and
friction-free way to achieve continuous delivery of cloud applications
and infrastructure, no matter your cloud &amp;ndash; AWS, Azure, Google Cloud,
Kubernetes, or even on-premises. In this post, we&amp;rsquo;ll dig deeper to see
why, and how to get up and running. It&amp;rsquo;s refreshingly easy!&lt;/p&gt;
&lt;h2 id="github-actions--pulumi--"&gt;GitHub Actions + Pulumi == ❤️&lt;/h2&gt;
&lt;p&gt;Pulumi lets you write cloud applications and infrastructure in your
favorite language. This includes containers, serverless, and even
VM-based infrastructure. Combined with GitHub Actions, we can get
continuous deployment to any cloud &amp;ndash; AWS, Azure, Google Cloud,
Kubernetes, or even on-premises &amp;ndash; all straight from GitHub.&lt;/p&gt;
&lt;p&gt;GitHub Actions gives us a way to run compute in GitHub&amp;rsquo;s cloud,
triggered by any GitHub event &amp;ndash; commits, pull requests, and more. This
enables us to run Pulumi in response to these events, giving us the
benefits of
&lt;a href="https://en.wikipedia.org/wiki/Infrastructure_as_Code"&gt;infrastructure as code&lt;/a&gt;
seamlessly integrated into a lovable workflow. We can edit any files &amp;ndash;
application- or infrastructure-related &amp;ndash; to do end-to-end continuous
delivery, without any of the YAML, tedious bash scripting, or manual,
error-prone steps.&lt;/p&gt;
&lt;p&gt;This capability enables some exciting scenarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deploy cloud changes anytime a commit is made, including
&lt;ul&gt;
&lt;li&gt;Provisioning entirely new cloud environments&lt;/li&gt;
&lt;li&gt;Updating existing infrastructure, like scaling things up or
modifying config&lt;/li&gt;
&lt;li&gt;Rebuilding and redeploying app containers to your cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Preview deployments before they&amp;rsquo;re actually made, integrated with
Pull Requests&lt;/li&gt;
&lt;li&gt;Use Git branches to achieve GitOps-style promotion from test/staging
to production&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To see things in action, check out the video shown at the GitHub
Universe keynote today:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/59SxB2uY9E0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;In this short video, we see a Ruby on Rails application that is
continuously deployed to our Kubernetes cluster (&lt;a href="https://github.com/pulumi/actions-example-gke-rails"&gt;full code available here&lt;/a&gt;). It&amp;rsquo;s just a
standard Rails application, with a
&lt;a href="https://github.com/pulumi/actions-example-gke-rails/blob/master/app/Dockerfile"&gt;Dockerfile&lt;/a&gt;,
and a
&lt;a href="https://github.com/pulumi/actions-example-gke-rails/tree/master/infra"&gt;complete Pulumi infrastructure specification&lt;/a&gt;,
which are just a collection of TypeScript modules. (We could have used
Python or Go.) This includes a fully functioning
&lt;a href="https://github.com/pulumi/actions-example-gke-rails/blob/master/infra/cluster.ts"&gt;Google Kubernetes cluster&lt;/a&gt;,
&lt;a href="https://github.com/pulumi/actions-example-gke-rails/blob/master/infra/db.ts"&gt;hosted PostgreSQL database&lt;/a&gt;
(for easier management!),
&lt;a href="https://github.com/pulumi/actions-example-gke-rails/blob/46c29ad4fa935398f3b7dc3715c2c56fb4809afc/infra/index.ts#L24"&gt;Kubernetes definitions&lt;/a&gt;,
and
&lt;a href="https://github.com/pulumi/actions-example-gke-rails/blob/46c29ad4fa935398f3b7dc3715c2c56fb4809afc/infra/index.ts#L11"&gt;automatic building and publishing of our Rails Docker image to the Docker Hub&lt;/a&gt;,
which then gets auto-deployed to our cluster. And it works across three
entirely separate testing, staging, and production environments!&lt;/p&gt;
&lt;p&gt;Notice that it&amp;rsquo;s all ordinary code, so that it works great with GitHub,
in addition to our favorite IDEs and tools.&lt;/p&gt;
&lt;p&gt;After committing our changes, Pulumi takes it from there. Deployments
can be previewed, diffed, and are recorded so that you&amp;rsquo;ll always know
who changed what, when, and why &amp;ndash; all very &amp;ldquo;Git-like.&amp;rdquo; Pulumi&amp;rsquo;s
&lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/github-app/"&gt;GitHub App&lt;/a&gt;
adds to this and enables &amp;ldquo;GitOps&amp;rdquo; so that teams can propose, approve,
and promote code from &amp;ldquo;staging&amp;rdquo; to &amp;ldquo;production&amp;rdquo; using pull requests
(more on that below).&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve chosen GKE here as an illustration because it&amp;rsquo;s amazing how
powerful such a simple example can be, but this works just as well if
you&amp;rsquo;re using AKS, EKS, on-premises clusters &amp;ndash; and of course works for
non-Kubernetes scenarios, like VMs, ECS, and Serverless applications.&lt;/p&gt;
&lt;p&gt;All of this with just a handful of TypeScript and GitHub Actions set up to
work with Pulumi &amp;ndash; despite being quite capable, it&amp;rsquo;s super easy to get
all of this up and running. Let&amp;rsquo;s see how!&lt;/p&gt;
&lt;h2 id="getting-up-and-running"&gt;Getting Up and Running&lt;/h2&gt;
&lt;p&gt;The full sequence of steps is available in our &lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/github-actions"&gt;GitHub Actions Getting
Started Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In summary, using GitHub Actions with Pulumi is as easy as &lt;a href="https://app.pulumi.com/signup"&gt;signing up
for Pulumi&lt;/a&gt; (if you haven&amp;rsquo;t already), creating
one or more workflow files in your repo (&lt;a href="https://github.com/pulumi/actions#example-workflows"&gt;see here&lt;/a&gt; for examples),
configuring secrets, and adding a Pulumi program. Afterwards, you can
simply Commit and Pull Request away to deploy All The Things! GitHub
Actions will fire and run Pulumi tasks appropriately; you&amp;rsquo;ll know it&amp;rsquo;s
working if you see Pulumi actions show up alongside your PRs and
commits:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/continuous-delivery-to-any-cloud-using-github-actions-and-pulumi/gh-actions-prs.png" alt="gh-actions-prs"&gt;&lt;/p&gt;
&lt;p&gt;Two sorts of actions, defined the examples referenced above, are&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pulumi Preview&lt;/strong&gt; runs &lt;code&gt;pulumi preview&lt;/code&gt; in response to a Pull Request, showing what
would happen if the PR were merged into the target branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pulumi Up&lt;/strong&gt; runs &lt;code&gt;pulumi up&lt;/code&gt; on the target branch, in response to a commit on that
branch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If either of these fail, you&amp;rsquo;ll see the standard GitHub Checks red &amp;ldquo;x&amp;rdquo;,
whereas success will give a green &amp;ldquo;checkmark&amp;rdquo;; click on either to get
the full Pulumi log output:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/continuous-delivery-to-any-cloud-using-github-actions-and-pulumi/gh-actions-logs.png" alt="gh-actions-logs"&gt;&lt;/p&gt;
&lt;p&gt;GitHub Actions&amp;rsquo; Logs page, plus Pulumi&amp;rsquo;s Console, together give you
total insight into a deployment&amp;rsquo;s status, including the Docker build
logs, Kubernetes status updates, and more &amp;ndash; so you&amp;rsquo;ll always have the
full scoop on what&amp;rsquo;s going on, good or bad, in your cloud deployments.&lt;/p&gt;
&lt;h2 id="pulumis-github-app"&gt;Pulumi&amp;rsquo;s GitHub App&lt;/h2&gt;
&lt;p&gt;GitHub Actions work with Pulumi without needing any extra configuration
beyond the workflow file and GitHub Secrets described above. That&amp;rsquo;s why
it&amp;rsquo;s so easy!&lt;/p&gt;
&lt;p&gt;If you are going to use this setup in a real team setting, you&amp;rsquo;ll
probably also want to use Pulumi&amp;rsquo;s GitHub App. Simply by
&lt;a href="https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/github-app/"&gt;installing it into your repo&lt;/a&gt;,
and combined with the above, you&amp;rsquo;ll instantly get improved GitHub Checks API
integration and, more importantly, context added by the Pulumi bot to
your Pull Requests about what a deployment will do before it&amp;rsquo;s even
done, as shown above.&lt;/p&gt;
&lt;p&gt;Note that this is optional with GitHub Actions, but worthwhile &amp;ndash; it&amp;rsquo;s
much easier for your teams to collaborate on deployments, including
knowing whether a change might lead to downtime before it&amp;rsquo;s even
triggered. &amp;ldquo;GitOps&amp;rdquo; ahoy!&lt;/p&gt;
&lt;h2 id="learning-more"&gt;Learning More&lt;/h2&gt;
&lt;p&gt;There is so much more fun to have, and we&amp;rsquo;re just getting started. Look
for more in the weeks to come. In the meantime, here are some follow up
links in case you want to learn more about GitHub Actions and Pulumi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To learn more, &lt;a href="https://www.pulumi.com/docs/install/"&gt;install Pulumi&lt;/a&gt; and then
check out our &lt;a href="https://www.pulumi.com/docs/get-started/"&gt;Getting Started guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In addition to &lt;a href="https://www.youtube.com/watch?v=59SxB2uY9E0"&gt;the keynote video&lt;/a&gt;, we have two
other videos that you might enjoy watching to learn more:
&lt;ul&gt;
&lt;li&gt;In &lt;a href="https://www.youtube.com/watch?v=MKbDVDBuKUA"&gt;this video&lt;/a&gt;, we
see the GitOps workflow for promoting from staging to
production.&lt;/li&gt;
&lt;li&gt;In &lt;a href="https://www.youtube.com/watch?v=1Et2TkuxqJg"&gt;this longer-form video&lt;/a&gt;, we explore
more nuances of how the entire experience works.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Ruby on Rails App, deployed to Kubernetes, from the keynote, is
&lt;a href="https://github.com/pulumi/actions-example-gke-rails"&gt;available for easy forking here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is an exciting day for developers, DevOps engineers, and SREs
alike. The combination of GitHub Actions and Pulumi gives us all an
easy, automated solution for continuous deployment of cloud applications
and infrastructure to any cloud, purely using code and Git. What&amp;rsquo;s best
about it is that &lt;em&gt;it&amp;rsquo;s fun&lt;/em&gt; in the same way programming is fun.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not yet in the GitHub Actions private beta, but want to try
Pulumi, head on over to our
&lt;a href="https://www.pulumi.com/docs/get-started/"&gt;Pulumi Getting Started guide&lt;/a&gt;. You&amp;rsquo;ll be running CLI commands,
but we think that can be a lot of fun too!&lt;/p&gt;
&lt;p&gt;We want to thank our GitHub partners for the bold and innovative work
that went into GitHub Actions, and for letting us in on the action &amp;ndash; we
can&amp;rsquo;t wait to see what you, the Pulumi community, builds using this
magical combination!&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>features</category><category>continuous-delivery</category></item><item><title>Introducing Pulumi, a Cloud Development Platform</title><link>https://www.pulumi.com/blog/introducing-pulumi-a-cloud-development-platform/</link><pubDate>Mon, 18 Jun 2018 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/introducing-pulumi-a-cloud-development-platform/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/introducing-pulumi-a-cloud-development-platform/index.png" /&gt;
&lt;p&gt;Ahoy!&lt;/p&gt;
&lt;p&gt;Today &lt;a href="https://info.pulumi.com/press-release/pulumi-launches-cloud-development-platform-to-help-teams-get-code-to-the-cloud-faster"&gt;we launched&lt;/a&gt;
&lt;a href="https://www.pulumi.com/"&gt;Pulumi&lt;/a&gt;, an open source cloud development platform,
providing the cloud&amp;rsquo;s first true programming model using real
programming languages.&lt;/p&gt;
&lt;p&gt;We believe that containers, serverless, and hosted cloud services change
everything about how we design and build software and applications. All developers these
days are cloud developers. We saw a big gap in the way people want to
create this software, and how they are required to do it today with
configuration YAML and templating languages, and sought to close that
gap.&lt;/p&gt;
&lt;p&gt;Pulumi brings all the things we know and love with programming languages
&amp;ndash; IDEs, abstraction, encapsulation, sharing and reuse, and more &amp;ndash; to
the creation of all aspects of cloud programs and applications, while retaining the full
power of immutable infrastructure across Amazon Web Services (AWS),
Microsoft Azure, and Google Cloud Platform (GCP), as well as Kubernetes
running in any public, private, or hybrid cloud.  An open ecosystem of
packages promises to eliminate copy-and-paste, and encourage sharing of
best practices within teams and the community.&lt;/p&gt;
&lt;p&gt;We started on Pulumi a little over a year ago, have built an incredible
team, and I&amp;rsquo;m thrilled to announce its availability.  Download or learn
more about this unique cloud development platform &lt;a href="https://www.pulumi.com/docs/"&gt;here&lt;/a&gt;, or read more background on Pulumi&amp;rsquo;s
motivation and world-view &lt;strong&gt;&lt;a href="https://joeduffyblog.com/2018/06/18/hello-pulumi"&gt;over on my personal blog&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The team can&amp;rsquo;t wait to see all the incredible things you will build
using Pulumi.&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category></item></channel></rss>