The gcp:notebooks/runtime:Runtime resource, part of the Pulumi GCP provider, provisions a Cloud AI Platform Notebook runtime with its compute resources, storage, access controls, and software environment. This resource is deprecated; for new projects, use gcp.workbench.Instance instead. This guide focuses on three capabilities: machine type and disk configuration, GPU acceleration, and custom container images and kernels.
Runtimes require a GCP project with the Notebooks API enabled and appropriate IAM permissions. Custom images require Container Registry access. The examples are intentionally small. Combine them with your own network configuration and security policies.
Create a basic runtime with compute and storage
Most notebook deployments start by provisioning compute resources and persistent storage for interactive data science work.
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const runtime = new gcp.notebooks.Runtime("runtime", {
name: "notebooks-runtime",
location: "us-central1",
accessConfig: {
accessType: "SINGLE_USER",
runtimeOwner: "admin@hashicorptest.com",
},
virtualMachine: {
virtualMachineConfig: {
machineType: "n1-standard-4",
dataDisk: {
initializeParams: {
diskSizeGb: 100,
diskType: "PD_STANDARD",
},
},
},
},
});
import pulumi
import pulumi_gcp as gcp
runtime = gcp.notebooks.Runtime("runtime",
name="notebooks-runtime",
location="us-central1",
access_config={
"access_type": "SINGLE_USER",
"runtime_owner": "admin@hashicorptest.com",
},
virtual_machine={
"virtual_machine_config": {
"machine_type": "n1-standard-4",
"data_disk": {
"initialize_params": {
"disk_size_gb": 100,
"disk_type": "PD_STANDARD",
},
},
},
})
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/notebooks"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := notebooks.NewRuntime(ctx, "runtime", ¬ebooks.RuntimeArgs{
Name: pulumi.String("notebooks-runtime"),
Location: pulumi.String("us-central1"),
AccessConfig: ¬ebooks.RuntimeAccessConfigArgs{
AccessType: pulumi.String("SINGLE_USER"),
RuntimeOwner: pulumi.String("admin@hashicorptest.com"),
},
VirtualMachine: ¬ebooks.RuntimeVirtualMachineArgs{
VirtualMachineConfig: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigArgs{
MachineType: pulumi.String("n1-standard-4"),
DataDisk: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs{
InitializeParams: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs{
DiskSizeGb: pulumi.Int(100),
DiskType: pulumi.String("PD_STANDARD"),
},
},
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var runtime = new Gcp.Notebooks.Runtime("runtime", new()
{
Name = "notebooks-runtime",
Location = "us-central1",
AccessConfig = new Gcp.Notebooks.Inputs.RuntimeAccessConfigArgs
{
AccessType = "SINGLE_USER",
RuntimeOwner = "admin@hashicorptest.com",
},
VirtualMachine = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineArgs
{
VirtualMachineConfig = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigArgs
{
MachineType = "n1-standard-4",
DataDisk = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs
{
InitializeParams = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs
{
DiskSizeGb = 100,
DiskType = "PD_STANDARD",
},
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.notebooks.Runtime;
import com.pulumi.gcp.notebooks.RuntimeArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeAccessConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var runtime = new Runtime("runtime", RuntimeArgs.builder()
.name("notebooks-runtime")
.location("us-central1")
.accessConfig(RuntimeAccessConfigArgs.builder()
.accessType("SINGLE_USER")
.runtimeOwner("admin@hashicorptest.com")
.build())
.virtualMachine(RuntimeVirtualMachineArgs.builder()
.virtualMachineConfig(RuntimeVirtualMachineVirtualMachineConfigArgs.builder()
.machineType("n1-standard-4")
.dataDisk(RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs.builder()
.initializeParams(RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs.builder()
.diskSizeGb(100)
.diskType("PD_STANDARD")
.build())
.build())
.build())
.build())
.build());
}
}
resources:
runtime:
type: gcp:notebooks:Runtime
properties:
name: notebooks-runtime
location: us-central1
accessConfig:
accessType: SINGLE_USER
runtimeOwner: admin@hashicorptest.com
virtualMachine:
virtualMachineConfig:
machineType: n1-standard-4
dataDisk:
initializeParams:
diskSizeGb: '100'
diskType: PD_STANDARD
The accessConfig property controls who can access the runtime; SINGLE_USER restricts access to a specified email address. The virtualMachine block defines the compute environment: machineType sets CPU and memory, while dataDisk configures persistent storage size and type. The runtime provisions a managed Jupyter environment with these specifications.
Add GPU acceleration for ML workloads
Machine learning training and inference often require GPU acceleration to process large datasets efficiently.
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const runtimeGpu = new gcp.notebooks.Runtime("runtime_gpu", {
name: "notebooks-runtime-gpu",
location: "us-central1",
accessConfig: {
accessType: "SINGLE_USER",
runtimeOwner: "admin@hashicorptest.com",
},
softwareConfig: {
installGpuDriver: true,
},
virtualMachine: {
virtualMachineConfig: {
machineType: "n1-standard-4",
dataDisk: {
initializeParams: {
diskSizeGb: 100,
diskType: "PD_STANDARD",
},
},
acceleratorConfig: {
coreCount: 1,
type: "NVIDIA_TESLA_V100",
},
},
},
});
import pulumi
import pulumi_gcp as gcp
runtime_gpu = gcp.notebooks.Runtime("runtime_gpu",
name="notebooks-runtime-gpu",
location="us-central1",
access_config={
"access_type": "SINGLE_USER",
"runtime_owner": "admin@hashicorptest.com",
},
software_config={
"install_gpu_driver": True,
},
virtual_machine={
"virtual_machine_config": {
"machine_type": "n1-standard-4",
"data_disk": {
"initialize_params": {
"disk_size_gb": 100,
"disk_type": "PD_STANDARD",
},
},
"accelerator_config": {
"core_count": 1,
"type": "NVIDIA_TESLA_V100",
},
},
})
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/notebooks"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := notebooks.NewRuntime(ctx, "runtime_gpu", ¬ebooks.RuntimeArgs{
Name: pulumi.String("notebooks-runtime-gpu"),
Location: pulumi.String("us-central1"),
AccessConfig: ¬ebooks.RuntimeAccessConfigArgs{
AccessType: pulumi.String("SINGLE_USER"),
RuntimeOwner: pulumi.String("admin@hashicorptest.com"),
},
SoftwareConfig: ¬ebooks.RuntimeSoftwareConfigArgs{
InstallGpuDriver: pulumi.Bool(true),
},
VirtualMachine: ¬ebooks.RuntimeVirtualMachineArgs{
VirtualMachineConfig: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigArgs{
MachineType: pulumi.String("n1-standard-4"),
DataDisk: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs{
InitializeParams: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs{
DiskSizeGb: pulumi.Int(100),
DiskType: pulumi.String("PD_STANDARD"),
},
},
AcceleratorConfig: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigAcceleratorConfigArgs{
CoreCount: pulumi.Int(1),
Type: pulumi.String("NVIDIA_TESLA_V100"),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var runtimeGpu = new Gcp.Notebooks.Runtime("runtime_gpu", new()
{
Name = "notebooks-runtime-gpu",
Location = "us-central1",
AccessConfig = new Gcp.Notebooks.Inputs.RuntimeAccessConfigArgs
{
AccessType = "SINGLE_USER",
RuntimeOwner = "admin@hashicorptest.com",
},
SoftwareConfig = new Gcp.Notebooks.Inputs.RuntimeSoftwareConfigArgs
{
InstallGpuDriver = true,
},
VirtualMachine = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineArgs
{
VirtualMachineConfig = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigArgs
{
MachineType = "n1-standard-4",
DataDisk = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs
{
InitializeParams = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs
{
DiskSizeGb = 100,
DiskType = "PD_STANDARD",
},
},
AcceleratorConfig = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigAcceleratorConfigArgs
{
CoreCount = 1,
Type = "NVIDIA_TESLA_V100",
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.notebooks.Runtime;
import com.pulumi.gcp.notebooks.RuntimeArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeAccessConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeSoftwareConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigAcceleratorConfigArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var runtimeGpu = new Runtime("runtimeGpu", RuntimeArgs.builder()
.name("notebooks-runtime-gpu")
.location("us-central1")
.accessConfig(RuntimeAccessConfigArgs.builder()
.accessType("SINGLE_USER")
.runtimeOwner("admin@hashicorptest.com")
.build())
.softwareConfig(RuntimeSoftwareConfigArgs.builder()
.installGpuDriver(true)
.build())
.virtualMachine(RuntimeVirtualMachineArgs.builder()
.virtualMachineConfig(RuntimeVirtualMachineVirtualMachineConfigArgs.builder()
.machineType("n1-standard-4")
.dataDisk(RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs.builder()
.initializeParams(RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs.builder()
.diskSizeGb(100)
.diskType("PD_STANDARD")
.build())
.build())
.acceleratorConfig(RuntimeVirtualMachineVirtualMachineConfigAcceleratorConfigArgs.builder()
.coreCount(1)
.type("NVIDIA_TESLA_V100")
.build())
.build())
.build())
.build());
}
}
resources:
runtimeGpu:
type: gcp:notebooks:Runtime
name: runtime_gpu
properties:
name: notebooks-runtime-gpu
location: us-central1
accessConfig:
accessType: SINGLE_USER
runtimeOwner: admin@hashicorptest.com
softwareConfig:
installGpuDriver: true
virtualMachine:
virtualMachineConfig:
machineType: n1-standard-4
dataDisk:
initializeParams:
diskSizeGb: '100'
diskType: PD_STANDARD
acceleratorConfig:
coreCount: '1'
type: NVIDIA_TESLA_V100
The acceleratorConfig property attaches NVIDIA GPUs to the runtime, specifying the GPU type and count. Setting installGpuDriver to true ensures the runtime installs CUDA drivers automatically. This configuration extends the basic runtime with GPU hardware for compute-intensive ML tasks.
Run custom container images for specialized environments
Teams often need specific Python libraries, frameworks, or system dependencies that aren’t available in default notebook images.
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const runtimeContainer = new gcp.notebooks.Runtime("runtime_container", {
name: "notebooks-runtime-container",
location: "us-central1",
accessConfig: {
accessType: "SINGLE_USER",
runtimeOwner: "admin@hashicorptest.com",
},
virtualMachine: {
virtualMachineConfig: {
machineType: "n1-standard-4",
dataDisk: {
initializeParams: {
diskSizeGb: 100,
diskType: "PD_STANDARD",
},
},
containerImages: [
{
repository: "gcr.io/deeplearning-platform-release/base-cpu",
tag: "latest",
},
{
repository: "gcr.io/deeplearning-platform-release/beam-notebooks",
tag: "latest",
},
],
},
},
});
import pulumi
import pulumi_gcp as gcp
runtime_container = gcp.notebooks.Runtime("runtime_container",
name="notebooks-runtime-container",
location="us-central1",
access_config={
"access_type": "SINGLE_USER",
"runtime_owner": "admin@hashicorptest.com",
},
virtual_machine={
"virtual_machine_config": {
"machine_type": "n1-standard-4",
"data_disk": {
"initialize_params": {
"disk_size_gb": 100,
"disk_type": "PD_STANDARD",
},
},
"container_images": [
{
"repository": "gcr.io/deeplearning-platform-release/base-cpu",
"tag": "latest",
},
{
"repository": "gcr.io/deeplearning-platform-release/beam-notebooks",
"tag": "latest",
},
],
},
})
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/notebooks"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := notebooks.NewRuntime(ctx, "runtime_container", ¬ebooks.RuntimeArgs{
Name: pulumi.String("notebooks-runtime-container"),
Location: pulumi.String("us-central1"),
AccessConfig: ¬ebooks.RuntimeAccessConfigArgs{
AccessType: pulumi.String("SINGLE_USER"),
RuntimeOwner: pulumi.String("admin@hashicorptest.com"),
},
VirtualMachine: ¬ebooks.RuntimeVirtualMachineArgs{
VirtualMachineConfig: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigArgs{
MachineType: pulumi.String("n1-standard-4"),
DataDisk: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs{
InitializeParams: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs{
DiskSizeGb: pulumi.Int(100),
DiskType: pulumi.String("PD_STANDARD"),
},
},
ContainerImages: notebooks.RuntimeVirtualMachineVirtualMachineConfigContainerImageArray{
¬ebooks.RuntimeVirtualMachineVirtualMachineConfigContainerImageArgs{
Repository: pulumi.String("gcr.io/deeplearning-platform-release/base-cpu"),
Tag: pulumi.String("latest"),
},
¬ebooks.RuntimeVirtualMachineVirtualMachineConfigContainerImageArgs{
Repository: pulumi.String("gcr.io/deeplearning-platform-release/beam-notebooks"),
Tag: pulumi.String("latest"),
},
},
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var runtimeContainer = new Gcp.Notebooks.Runtime("runtime_container", new()
{
Name = "notebooks-runtime-container",
Location = "us-central1",
AccessConfig = new Gcp.Notebooks.Inputs.RuntimeAccessConfigArgs
{
AccessType = "SINGLE_USER",
RuntimeOwner = "admin@hashicorptest.com",
},
VirtualMachine = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineArgs
{
VirtualMachineConfig = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigArgs
{
MachineType = "n1-standard-4",
DataDisk = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs
{
InitializeParams = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs
{
DiskSizeGb = 100,
DiskType = "PD_STANDARD",
},
},
ContainerImages = new[]
{
new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigContainerImageArgs
{
Repository = "gcr.io/deeplearning-platform-release/base-cpu",
Tag = "latest",
},
new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigContainerImageArgs
{
Repository = "gcr.io/deeplearning-platform-release/beam-notebooks",
Tag = "latest",
},
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.notebooks.Runtime;
import com.pulumi.gcp.notebooks.RuntimeArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeAccessConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var runtimeContainer = new Runtime("runtimeContainer", RuntimeArgs.builder()
.name("notebooks-runtime-container")
.location("us-central1")
.accessConfig(RuntimeAccessConfigArgs.builder()
.accessType("SINGLE_USER")
.runtimeOwner("admin@hashicorptest.com")
.build())
.virtualMachine(RuntimeVirtualMachineArgs.builder()
.virtualMachineConfig(RuntimeVirtualMachineVirtualMachineConfigArgs.builder()
.machineType("n1-standard-4")
.dataDisk(RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs.builder()
.initializeParams(RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs.builder()
.diskSizeGb(100)
.diskType("PD_STANDARD")
.build())
.build())
.containerImages(
RuntimeVirtualMachineVirtualMachineConfigContainerImageArgs.builder()
.repository("gcr.io/deeplearning-platform-release/base-cpu")
.tag("latest")
.build(),
RuntimeVirtualMachineVirtualMachineConfigContainerImageArgs.builder()
.repository("gcr.io/deeplearning-platform-release/beam-notebooks")
.tag("latest")
.build())
.build())
.build())
.build());
}
}
resources:
runtimeContainer:
type: gcp:notebooks:Runtime
name: runtime_container
properties:
name: notebooks-runtime-container
location: us-central1
accessConfig:
accessType: SINGLE_USER
runtimeOwner: admin@hashicorptest.com
virtualMachine:
virtualMachineConfig:
machineType: n1-standard-4
dataDisk:
initializeParams:
diskSizeGb: '100'
diskType: PD_STANDARD
containerImages:
- repository: gcr.io/deeplearning-platform-release/base-cpu
tag: latest
- repository: gcr.io/deeplearning-platform-release/beam-notebooks
tag: latest
The containerImages array specifies pre-built images from Container Registry. Each entry includes a repository path and tag. The runtime pulls these images at startup, providing custom dependencies without manual installation. You can specify multiple images for different notebook environments.
Configure custom Jupyter kernels
Data scientists working across multiple projects may need different kernel environments with isolated dependencies.
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const runtimeContainer = new gcp.notebooks.Runtime("runtime_container", {
name: "notebooks-runtime-kernel",
location: "us-central1",
accessConfig: {
accessType: "SINGLE_USER",
runtimeOwner: "admin@hashicorptest.com",
},
softwareConfig: {
kernels: [{
repository: "gcr.io/deeplearning-platform-release/base-cpu",
tag: "latest",
}],
},
virtualMachine: {
virtualMachineConfig: {
machineType: "n1-standard-4",
dataDisk: {
initializeParams: {
diskSizeGb: 100,
diskType: "PD_STANDARD",
},
},
},
},
labels: {
k: "val",
},
});
import pulumi
import pulumi_gcp as gcp
runtime_container = gcp.notebooks.Runtime("runtime_container",
name="notebooks-runtime-kernel",
location="us-central1",
access_config={
"access_type": "SINGLE_USER",
"runtime_owner": "admin@hashicorptest.com",
},
software_config={
"kernels": [{
"repository": "gcr.io/deeplearning-platform-release/base-cpu",
"tag": "latest",
}],
},
virtual_machine={
"virtual_machine_config": {
"machine_type": "n1-standard-4",
"data_disk": {
"initialize_params": {
"disk_size_gb": 100,
"disk_type": "PD_STANDARD",
},
},
},
},
labels={
"k": "val",
})
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/notebooks"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := notebooks.NewRuntime(ctx, "runtime_container", ¬ebooks.RuntimeArgs{
Name: pulumi.String("notebooks-runtime-kernel"),
Location: pulumi.String("us-central1"),
AccessConfig: ¬ebooks.RuntimeAccessConfigArgs{
AccessType: pulumi.String("SINGLE_USER"),
RuntimeOwner: pulumi.String("admin@hashicorptest.com"),
},
SoftwareConfig: ¬ebooks.RuntimeSoftwareConfigArgs{
Kernels: notebooks.RuntimeSoftwareConfigKernelArray{
¬ebooks.RuntimeSoftwareConfigKernelArgs{
Repository: pulumi.String("gcr.io/deeplearning-platform-release/base-cpu"),
Tag: pulumi.String("latest"),
},
},
},
VirtualMachine: ¬ebooks.RuntimeVirtualMachineArgs{
VirtualMachineConfig: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigArgs{
MachineType: pulumi.String("n1-standard-4"),
DataDisk: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs{
InitializeParams: ¬ebooks.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs{
DiskSizeGb: pulumi.Int(100),
DiskType: pulumi.String("PD_STANDARD"),
},
},
},
},
Labels: pulumi.StringMap{
"k": pulumi.String("val"),
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var runtimeContainer = new Gcp.Notebooks.Runtime("runtime_container", new()
{
Name = "notebooks-runtime-kernel",
Location = "us-central1",
AccessConfig = new Gcp.Notebooks.Inputs.RuntimeAccessConfigArgs
{
AccessType = "SINGLE_USER",
RuntimeOwner = "admin@hashicorptest.com",
},
SoftwareConfig = new Gcp.Notebooks.Inputs.RuntimeSoftwareConfigArgs
{
Kernels = new[]
{
new Gcp.Notebooks.Inputs.RuntimeSoftwareConfigKernelArgs
{
Repository = "gcr.io/deeplearning-platform-release/base-cpu",
Tag = "latest",
},
},
},
VirtualMachine = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineArgs
{
VirtualMachineConfig = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigArgs
{
MachineType = "n1-standard-4",
DataDisk = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs
{
InitializeParams = new Gcp.Notebooks.Inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs
{
DiskSizeGb = 100,
DiskType = "PD_STANDARD",
},
},
},
},
Labels =
{
{ "k", "val" },
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.notebooks.Runtime;
import com.pulumi.gcp.notebooks.RuntimeArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeAccessConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeSoftwareConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var runtimeContainer = new Runtime("runtimeContainer", RuntimeArgs.builder()
.name("notebooks-runtime-kernel")
.location("us-central1")
.accessConfig(RuntimeAccessConfigArgs.builder()
.accessType("SINGLE_USER")
.runtimeOwner("admin@hashicorptest.com")
.build())
.softwareConfig(RuntimeSoftwareConfigArgs.builder()
.kernels(RuntimeSoftwareConfigKernelArgs.builder()
.repository("gcr.io/deeplearning-platform-release/base-cpu")
.tag("latest")
.build())
.build())
.virtualMachine(RuntimeVirtualMachineArgs.builder()
.virtualMachineConfig(RuntimeVirtualMachineVirtualMachineConfigArgs.builder()
.machineType("n1-standard-4")
.dataDisk(RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs.builder()
.initializeParams(RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs.builder()
.diskSizeGb(100)
.diskType("PD_STANDARD")
.build())
.build())
.build())
.build())
.labels(Map.of("k", "val"))
.build());
}
}
resources:
runtimeContainer:
type: gcp:notebooks:Runtime
name: runtime_container
properties:
name: notebooks-runtime-kernel
location: us-central1
accessConfig:
accessType: SINGLE_USER
runtimeOwner: admin@hashicorptest.com
softwareConfig:
kernels:
- repository: gcr.io/deeplearning-platform-release/base-cpu
tag: latest
virtualMachine:
virtualMachineConfig:
machineType: n1-standard-4
dataDisk:
initializeParams:
diskSizeGb: '100'
diskType: PD_STANDARD
labels:
k: val
The kernels property in softwareConfig defines custom Jupyter kernel images. Each kernel runs in isolation with its own dependencies. The labels property adds metadata for organization and cost tracking.
Beyond these examples
These snippets focus on specific runtime-level features: compute and storage configuration, GPU acceleration and driver installation, and container images and custom kernels. They’re intentionally minimal rather than full notebook deployments.
The examples assume pre-existing infrastructure such as a GCP project with Notebooks API enabled, IAM permissions for runtime creation, and Container Registry access for custom images. They focus on configuring the runtime rather than provisioning surrounding infrastructure.
To keep things focused, common runtime patterns are omitted, including:
- Network configuration (VPC, subnets, firewall rules)
- Post-startup scripts and initialization (postStartupScriptBehavior)
- Idle shutdown policies and cost controls
- Encryption keys and security settings
These omissions are intentional: the goal is to illustrate how each runtime feature is wired, not provide drop-in notebook modules. See the Notebooks Runtime resource reference for all available configuration options.
Let's deploy GCP Notebook Runtimes
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Migration & Deprecation
gcp.workbench.Instance instead for new notebook instances.State Management & Drift
location, name, and project properties are immutable. Changing these requires replacing the entire runtime.labels field is non-authoritative and only manages labels in your configuration. Use effectiveLabels to see all labels on the resource, including those set by other clients or services.Configuration & Setup
accessConfig with accessType (e.g., SINGLE_USER) and runtimeOwner (user email). All examples include this configuration.virtualMachine.virtualMachineConfig.machineType to a Compute Engine machine type like n1-standard-4.GPU & Advanced Features
acceleratorConfig with coreCount and type (e.g., NVIDIA_TESLA_V100), and set softwareConfig.installGpuDriver to true.containerImages in virtualMachineConfig for custom container environments, or use kernels in softwareConfig for custom kernel images. Both accept repository and tag specifications.softwareConfig.postStartupScriptBehavior to RUN_EVERY_START.