Skip to main content

Pinecone BYOC

PyPI version

Deploy Pinecone in your own cloud account (AWS, GCP, or Azure) with full control over your infrastructure.

Demo

Quick Start

Interactive Setup

curl -fsSL https://raw.githubusercontent.com/pinecone-io/pulumi-pinecone-byoc/main/bootstrap.sh | bash

This will:

  1. Select your cloud provider (AWS, GCP, or Azure)
  2. Check that required tools are installed (Python 3.12+, uv, cloud CLI, Pulumi, kubectl)
  3. Verify your cloud credentials
  4. Run an interactive setup wizard
  5. Generate a complete Pulumi project

Then deploy:

cd pinecone-byoc
pulumi up

Provisioning takes approximately 25-30 minutes.

Prerequisites

Common Tools (Required for All Clouds)

Tool Purpose Install
Python 3.12+ Runtime python.org
uv Package manager docs.astral.sh/uv
Pulumi Infrastructure pulumi.com/docs/install
kubectl Cluster access kubernetes.io

Cloud-Specific Tools

AWS

Tool Purpose Install
AWS CLI AWS access AWS docs

GCP

Tool Purpose Install
gcloud CLI GCP access GCP docs

Azure

Tool Purpose Install
Azure CLI Azure access Azure docs

Architecture

┌──────────────────────┐                    ┌───────────────────────────────────────────────┐
│                      │    operations      │         Your AWS/GCP/Azure Account (VPC)      │
│  Pinecone            │───────────────────▶│                                               │
│  Control Plane       │                    │  ┌─────────────┐  ┌─────────────────────────┐ │
│                      │◀───────────────────│  │  Control    │  │                         │ │
│                      │   cluster state    │  │  Plane      │  │    Cluster Manager      │ │
└──────────────────────┘                    │  └─────────────┘  │     (EKS/GKE/AKS)       │ │
                                            │  ┌─────────────┐  └─────────────────────────┘ │
                                            │  │  Heartbeat  │                              │
                                            │  └─────────────┘                              │
┌──────────────────────┐                    │  ┌───────────────────────────────────────────┐│
│                      │◀───────────────────│  │                                           ││
│  Pinecone            │   metrics &        │  │              Data Plane                   ││
│  Observability (DD)  │   traces           │  │                                           ││
│                      │                    │  └───────────────────────────────────────────┘│
└──────────────────────┘                    │  ┌──────────┐  ┌───────────┐  ┌─────────────┐ │
                                            │  │ S3/GCS/  │  |FoundationDB│  │ Route53/    │ │
        No customer data                    │  │ AzureBlob│  │ (in-cluster)|  | CloudDNS/   | │
        leaves the cluster                  │  └──────────┘  └───────────┘  | Azure DNS   | │
                                            │                               └─────────────┘ │
                                            └───────────────────────────────────────────────┘

How It Works

Pinecone BYOC uses a pull-based model for control plane operations:

  1. Index Operations - When you create, scale, or delete indexes through the Pinecone API, these operations are queued in Pinecone's control plane
  2. Pull & Execute - Components running in your cluster continuously pull pending operations and execute them locally
  3. Heartbeat & State - Your cluster pushes health status and state back to Pinecone for monitoring
  4. Observability - Metrics and traces (not customer data) are sent to Pinecone's observability platform (Datadog) for operational insights

This architecture ensures:

  • Your data never leaves your cloud account - only operational metrics and cluster state are transmitted
  • Network security policies remain under your control
  • All communication is outbound from your cluster - Pinecone never needs inbound access

Cluster Access

After deployment, configure kubectl:

AWS:

aws eks update-kubeconfig --region <region> --name <cluster-name>

GCP:

gcloud container clusters get-credentials <cluster-name> --region <region> --project <project-id>

Azure:

az aks get-credentials --resource-group <resource-group> --name <cluster-name>

The exact command is output after pulumi up completes.

Upgrades

Pinecone manages upgrades automatically in the background. If you need to trigger an upgrade manually:

pulumi up -c pinecone-version=<new-version>

Replace <new-version> with the target Pinecone version (e.g., main-abc1234).

Configuration

The setup wizard creates a Pulumi stack with these configurable options:

AWS Configuration Options:

Option Description Default
pinecone-version Pinecone release version (required) —
region AWS region us-east-1
availability_zones AZs for high availability ["us-east-1a", "us-east-1b"]
vpc_cidr VPC IP range 10.0.0.0/16
deletion_protection Protect S3 from accidental deletion true
public_access_enabled Enable public endpoint (false = PrivateLink only) true
tags Custom tags to apply to all resources {}

GCP Configuration Options:

Option Description Default
pinecone-version Pinecone release version (required) —
gcp_project GCP project ID (required) —
region GCP region us-central1
availability_zones Zones for high availability ["us-central1-a", "us-central1-b"]
vpc_cidr VPC IP range 10.112.0.0/16
deletion_protection Protect GCS from accidental deletion true
public_access_enabled Enable public endpoint (false = Private Service Connect only) true
labels Custom labels to apply to all resources {}

Azure Configuration Options:

Option Description Default
pinecone-version Pinecone release version (required) —
subscription-id Azure subscription ID (required) —
region Azure region eastus
availability_zones Zones for high availability ["1", "2"]
vpc_cidr VNet IP range 10.0.0.0/16
deletion_protection Protect storage accounts from accidental deletion true
public_access_enabled Enable public endpoint (false = Private Link only) true
tags Custom tags to apply to all resources {}

Edit Pulumi.<stack>.yaml to modify these values.

Programmatic Usage

For advanced users who want to integrate into existing infrastructure:

import pulumi
from pulumi_pinecone_byoc.aws import PineconeAWSCluster, PineconeAWSClusterArgs

config = pulumi.Config()

cluster = PineconeAWSCluster(
    "pinecone-aws-cluster",
    PineconeAWSClusterArgs(
        pinecone_api_key=config.require_secret("pinecone_api_key"),
        pinecone_version=config.require("pinecone_version"),
        region=config.require("region"),
        availability_zones=config.require_object("availability_zones"),
        vpc_cidr=config.get("vpc_cidr") or "10.0.0.0/16",
        deletion_protection=config.get_bool("deletion_protection") if config.get_bool("deletion_protection") is not None else True,
        public_access_enabled=config.get_bool("public_access_enabled") if config.get_bool("public_access_enabled") is not None else True,
        tags=config.get_object("tags") or {},
    ),
)

# Export useful values
pulumi.export("environment", cluster.environment.env_name)
pulumi.export("cluster_name", cluster.cell_name)
pulumi.export("kubeconfig", cluster.eks.kubeconfig)

Installation

Install from PyPI with cloud-specific dependencies:

# For AWS
uv add 'pulumi-pinecone-byoc[aws]'

# For GCP
uv add 'pulumi-pinecone-byoc[gcp]'

# For Azure
uv add 'pulumi-pinecone-byoc[azure]'

Troubleshooting

Preflight check failures

The setup wizard runs preflight checks for cloud quotas. If these fail:

AWS:

  1. VPC Quota - Request a limit increase via AWS Service Quotas
  2. Elastic IPs - Release unused EIPs or request a limit increase
  3. NAT Gateways - Request a limit increase
  4. EKS Clusters - Request a limit increase

GCP:

  1. APIs - Enable required APIs (compute, container, storage, dns)
  2. Compute Quotas - Request CPU/disk quota increases via GCP Console
  3. GKE Clusters - Request a limit increase if at quota
  4. IP Addresses - Release unused static IPs or request more

Azure:

  1. Resource Providers - Register required providers (Microsoft.Compute, Microsoft.ContainerService, etc.)
  2. vCPU Quotas - Request vCPU quota increases via Azure Portal
  3. AKS Clusters - Request a limit increase if at quota
  4. Storage Accounts - Ensure unique naming (3-24 lowercase alphanumeric characters)

Deployment failures

If pulumi up fails partway through:

pulumi refresh  # Sync state with actual resources
pulumi up       # Retry deployment

Cluster access issues

Ensure your cloud credentials match the account where the cluster is deployed:

# AWS
aws sts get-caller-identity

# GCP
gcloud auth list
gcloud config get-value project

# Azure
az account show

Cleanup

To destroy all resources:

pulumi destroy

Note: If deletion_protection is enabled (default), you'll need to disable it first or manually delete protected resources.

Developing this project

Unit tests need nothing but the dev group, and are what pytest runs by default:

uv sync --all-extras --group dev
uv run pytest
uv run ruff check . && uv run ruff format --check . && uv run ty check

Anything that provisions real infrastructure is marked and deselected by default. integration builds a network and asserts against it; e2e deploys a whole cluster, takes around an hour, and needs PINECONE_API_KEY:

uv run pytest -m e2e tests/test_vanilla_e2e.py -s

The vanilla e2e is the control run: the module creates its own VPC, so a failure there is a module-wide problem rather than a BYO-VPC one. There are no assertions - a non-zero pulumi up is the failure signal.

Each run writes a redacted log to .e2e-logs/, and leaves the generated project in .e2e/<stack>/, so an interrupted run is torn down with:

cd .e2e/$USER-vanilla-byoc && pulumi destroy --yes

Pass --keep to leave a stack up on success, or --keep-failed to leave it up only when the test fails.

Support

Release files for pulumi-pinecone-byoc 0.5.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pulumi-pinecone-byoc 0.5.3
File Size Uploaded
pulumi_pinecone_byoc-0.5.3.tar.gz 80.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pulumi-pinecone-byoc 0.5.3
File Interpreter ABI Platform
pulumi_pinecone_byoc-0.5.3-py3-none-any.whl Python 3 none any Details

Total release size: 186.5 kB

Release files / pulumi_pinecone_byoc-0.5.3.tar.gz

Download URL pulumi_pinecone_byoc-0.5.3.tar.gz
Size 80.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d4103efd885343383d42ad7d323b5225918824fd218b21fbb611835cef47aaca
BLAKE2b-256 checksum
How to use checksums
8c0ebd26825db0f15f86825eeecf75da417c390e8c415e6920ec7ee2f6a6855b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / pulumi_pinecone_byoc-0.5.3-py3-none-any.whl

Download URL pulumi_pinecone_byoc-0.5.3-py3-none-any.whl
Size 106.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
82d1966db675e1d29d319bbf125247b30f96a746a963c96ad413976d58edfd0b
BLAKE2b-256 checksum
How to use checksums
c5d188dcb25f9563929aa6f9a881fb98af452bcfec50203729fd485366ba4e8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.6.1

2 release files

0.6.0

2 release files

This release

0.5.3 This release

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page