Sean Holung 026234bdbb
revert get started experience (#3076)
* add back getting started page

* decollapse getting started guide

* update style

* remove quickstart files

scss file

* lint

* assets

* update links

* update links

* update links

* update links

* update link
2023-06-16 14:10:53 -07:00

290 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Announcing Pulumi 0.15"
date: "2018-08-15"
meta_desc: "Pulumi can now deploy and manage Kubernetes resources using the same familiar programming model supported for AWS, Azure, and Google Cloud Platform."
authors: ["luke-hoban"]
tags: ["features", "continuous-delivery"]
---
Just over a month ago we publicly launched
Pulumi, a new cloud native development
platform.  The response has been overwhelming and we've been hard at
work responding to your feedback ever since.
Today, we are excited to release [Pulumi 0.15](https://github.com/pulumi/pulumi/blob/master/CHANGELOG.md#0150-2018-08-13) and make
it [available to download](/docs/install/).  This release
includes improvements across the entire Pulumi development experience.
Pulumi supports more platforms
([Kubernetes](/registry/packages/kubernetes/api-docs/) and
[OpenStack](/registry/packages/openstack/api-docs/), is faster
(Parallelism, simpler (native
TypeScript support), richer
(serverless frameworks for Azure and
Google Cloud),  and is more deeply
integrated into the application lifecycle
([GitHub App for CI/CD integration](/docs/using-pulumi/continuous-delivery/github-app)).
In this post, we'll take a quick tour of these new features. Stay tuned
for follow up blog posts to dive deeper into individual topics.
## Kubernetes
Pulumi can now deploy and manage Kubernetes resources using the same
familiar programming model supported for AWS, Azure, and Google Cloud
Platform. It's also possible to mix resources from multiple clouds in
the same program, such as using an S3 Bucket or RDS database from your
Kubernetes-managed containers.
This release includes dozens of features that make it simple and
productive to create and manage Kubernetes applications and resources
and to perform production-grade deployments.  The `@pulumi/kubernetes`
package provides access to the full Kubernetes API, ensuring you can
deploy any Kubernetes application with Pulumi.
New support for `new helm.v2.Chart(...)` allows deploying existing
[Helm](https://helm.sh/) charts via Pulumi, ensuring you can coordinate
deployment of charts as part of a larger Pulumi deployment.
Complex Kubernetes resources (like Deployments and Services) also
provide rich status updates so that you have complete visibility into
the state of a deployment while it is in progress, including incremental
progress reporting, and significant work was put into making it easy to
diagnose and robustly recover from deployment failures.
The Pulumi Kubernetes provider can be used to deploy to any Kubernetes
cluster, whether cloud hosted (EKS, AKS, GKE) or local (Minikube, Docker
for Mac) or on-premise.  And because Pulumi is already great at
deploying cloud resources, the Pulumi Kubernetes provider can be
combined with, for example, the Pulumi Azure provider to deploy and
manage both the cluster and Kubernetes resources that should be
installed into the cluster.
```typescript
import * as azure from "@pulumi/azure";
import * as k8s from "@pulumi/kubernetes";
import * as helm from "@pulumi/kubernetes/helm";
// Create an Azure Kubernetes Service cluster
const resourceGroup = new azure.core.ResourceGroup("aks", { location: "West US" });
const kubernetesService = new azure.containerservice.KubernetesCluster("kubernetes", {
/* ... */
});
// Create a Pulumi Kubernetes provider configured to deploy to the AKS cluster above
export const azk8s = new k8s.Provider("azk8s", {
kubeconfig: kubernetesService.kubeConfigRaw,
});
// Deploy a Helm chart into the cluster
const kibana = new helm.v2.Chart("kibana", {
repo: "stable",
chart: "kibana",
version: "0.8.0",
values: { service: { type: "LoadBalancer" } },
}, { providers: { kubernetes: azk8s } });
```
Check out the [Kubernetes
overview](/docs/clouds/kubernetes/get-started/) docs, the [API
documentation](/registry/packages/kubernetes/api-docs)
and the [pulumi-kubernetes](https://github.com/pulumi/pulumi-kubernetes)
GitHub project for additional details.
## Parallelism
Pulumi now runs deployments in parallel by default. To accomplish this,
the Pulumi engine tracks all dependencies across cloud resources in your
program, maximizing the amount of work that can proceed in parallel,
while also ensuring all resource are created, updated, replaced, or
destroyed in the correct order.
In some extreme cases, this new parallelism support can improve
performance by 2-10x, but even more importantly, parallelism provides a
performance boost for practically every Pulumi deployment.
## First Class Providers
Pulumi programs can now create multiple instances of a resource
provider, and can initialize an instance of a resources provider using
outputs of other resources.
For example, a Pulumi program can now deploy resources into multiple AWS
regions by creating providers targeting each region. This can be used
for resources that must be deployed in a certain region (e.g.
Lambda@Edge or ACM certificates), or just for managing multi-region
deployments from a single Pulumi program.
This also enables scenarios where a Pulumi program deploys some base
infrastructure, and then wants to manage resources deployed on top of
that using a different provider. For example, deploy a GKE cluster, and
then configure a Kubernetes provider to deploy Kubernetes resources on
top of the cluster. Or even then deploy OpenFaaS into the Kubernetes
cluster, and use the Pulumi OpenFaaS provider to deploy functions.
You might have already noticed, however we already used this feature in
the Kubernetes example earlier!
## Native TypeScript Support
Pulumi has supported JavaScript since inception, and as a result, it's
been possible to use Pulumi via TypeScript to get the benefits of
earlier error checking and richer tooling for cloud infrastructure and
application development. However, TypeScript code had to previously be
manually compiled to JavaScript prior to doing a Pulumi deployment,
which added some friction for users who wanted to use TypeScript with
Pulumi.
In this release, Pulumi now natively supports TypeScript, so you do not
need to run `tsc` explicitly before deploying. (We often forget to do
this too!) Simply run `pulumi up`, and the program will be recompiled on
the fly before running it.
New templates are now available via `pulumi new` which use the new,
simpler, TypeScript support.
## Using Imports from Runtime Functions
Pulumi supports creating cloud functions (Lambdas, Azure Functions,
Google Cloud Functions) using JavaScript callbacks in your Pulumi
application. This provides a nice and simple way to write the little
pieces of code that you need to integrate into your cloud application
and version with your infrastructure using real functions.
We heard feedback from early adopters who wanted to be able to import
NPM packages in their Pulumi program more easily, and then use them
within one of these cloud functions. We've enabled this now, so that the
common way of structuring code works as expected, and so that writing
idiomatic JavaScript or TypeScript "just works."
For example, the code below uses the `axios` NPM package to make an HTTP
request inside an AWS Lambda invoked by an AWS API Gateway (in just a
few lines of code!).
```typescript
import * as axios from "axios";
import * as cloud from "@pulumi/cloud-aws";
const api = new cloud.API("api");
api.get("/", async (req, res) => {
const statusText = (await axios.default.get("https://www.pulumi.com")).statusText;
res.write(`GET https://www.pulumi.com/ == ${statusText}`).end();
});
export const url = api.publish().url;
```
## OpenStack
Thanks to a contribution by Fraser Waters
([@Frassle](https://github.com/Frassle)), Pulumi now also supports
OpenStack. This allows users targeting an OpenStack API from their
public or private cloud provider to use Pulumi to author and manage
infrastructure deployments.
For example, a VM can be deployed to OVH with just the following:
```typescript
const os = require("@pulumi/openstack");
const instance = new os.compute.Instance("test", {
flavorName: "s1-2",
imageName: "Ubuntu 16.04",
});
exports.instanceIP = instance.accessIpV4;
```
Check out the [API documentation](/registry/packages/openstack/api-docs/)
and the [pulumi-openstack](https://github.com/pulumi/pulumi-openstack)
GitHub project for additional details. Huge thanks to Fraser for his
work on this!
## Serverless Functions in Google Cloud and Azure
Particularly with serverless functions being real functions, we had a
lot of interest in broadening our existing support beyond [just AWS
serverless](https://github.com/pulumi/pulumi-aws-serverless).  We are
happy to announce better serverless functionality for Google Cloud and Azure.
On Azure, the new `@pulumi/azure-serverless` package makes it easy to
work with serverless functions, and has initial support for hooking up
to Blob storage event sources:
```typescript
import * as azure from "@pulumi/azure";
import * as serverless from "@pulumi/azure-serverless";
const storageAccount = new azure.storage.Account("images-container", { /* ... */ });
serverless.storage.onBlobEvent("newImage", storageAccount, (context, blob) => {
context.log(context);
context.log(blob);
context.done();
}, { containerName: "folder", filterSuffix: ".png" });
export let storageAccountName = storageAccount.name;
```
On Google Cloud, the new `gcp.serverless.Function` provides an easy way
to create a Google Cloud Function from a JavaScript callback in a Pulumi
program. Thanks to Mikhail Shilkov
([@mikhailshilkov](https://github.com/mikhailshilkov)) for contributing
this feature!
```typescript
import * as gcp from "@pulumi/gcp";
let f = new gcp.serverless.Function("f", {}, (req, res) => {
res.send(`Hello ${req.body.name || 'World'}!`);
});
export let url = f.function.httpsTriggerUrl;
```
## GitHub App for CI/CD Integration
Pulumi already works with [your favorite CI/CD systems](/docs/using-pulumi/continuous-delivery/)
to accomplish automated
and continuous deployments of cloud infrastructure and applications.
This is how Pulumi deploys and manages our own infrastructure that runs
<pulumi.com>, and is how our most engaged users adopt
Pulumi in their own teams.
Our mission is to make Pulumi the easiest way to get code to the cloud.
To that end, we are launching a new [Pulumi GitHub
App](https://github.com/apps/pulumi) which bridges the gap between
GitHub (source code, pull requests) and Pulumi (cloud resources, stack
updates).  By installing the Pulumi GitHub App into your GitHub
organization , and then running Pulumi as part of your existing CI/CD
process, you will receive integrated stack updates and previews in your
pull requests. This allows you to see the potential impact a change
would have on your cloud infrastructure before merging the code, and
collaborate with your teammates when deploying application and
infrastructure changes.
The Pulumi GitHub App is still in preview as we work to support more CI
systems and extend its capabilities. For information on how to install
it and configure it with your CI system, please [read the documentation](/docs/using-pulumi/continuous-delivery/github-app/).
## Summary
We're excited about all the new features in this release and the new
scenarios they enable for the Pulumi community . If you are new to
Pulumi, [download the tools and get started
today](/docs/get-started), or [join us in Slack](https://slack.pulumi.com). A big thanks to all the users and
contributors who have helped shape this release -- we can't wait to see
what you build next !
### Special Thanks
- Fraser Waters
([@Frassle](https://github.com/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3AFrassle+archived%3Afalse+user%3Apulumi+is%3Aclosed+))
- Mikhail Shilkov
([@mikhailshilkov](https://github.com/pulls?q=is%3Apr+author%3Amikhailshilkov+archived%3Afalse+user%3Apulumi+is%3Aclosed))
- James Nugent
([@jen20](https://github.com/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Ajen20+archived%3Afalse+user%3Apulumi+is%3Aclosed+))
- Thomas Schersach
([@Tirke](https://github.com/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Atirke+archived%3Afalse+user%3Apulumi+is%3Aclosed+))
- JT
([@Jtango18](https://github.com/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Ajtango18+archived%3Afalse+user%3Apulumi+is%3Aclosed+))
- Itay Maman
([@imaman](https://github.com/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Aimaman+archived%3Afalse+user%3Apulumi+is%3Aclosed+))