Pulumi components for Pinecone BYOC clusters
Project description
Pinecone BYOC
Deploy Pinecone in your own AWS account with full control over your infrastructure.
Quick Start
curl -fsSL https://raw.githubusercontent.com/pinecone-io/pulumi-pinecone-byoc/main/bootstrap.sh | bash
This will:
- Check that required tools are installed (Python 3.12+, uv, AWS CLI, Pulumi, kubectl)
- Verify your AWS credentials
- Run an interactive setup wizard
- Generate a complete Pulumi project
Then deploy:
cd pinecone-byoc
pulumi up
Provisioning takes approximately 25-30 minutes.
Prerequisites
| Tool | Purpose | Install |
|---|---|---|
| Python 3.12+ | Runtime | python.org |
| uv | Package manager | docs.astral.sh/uv |
| AWS CLI | AWS access | AWS docs |
| Pulumi | Infrastructure | pulumi.com/docs/install |
| kubectl | Cluster access | kubernetes.io |
Architecture
┌──────────────────────┐ ┌───────────────────────────────────────────────┐
│ │ operations │ Your AWS Account (VPC) │
│ Pinecone │───────────────────▶│ │
│ Control Plane │ │ ┌─────────────┐ ┌─────────────────────────┐ │
│ │◀───────────────────│ │ Control │ │ │ │
│ │ cluster state │ │ Plane │ │ Cluster Manager │ │
└──────────────────────┘ │ └─────────────┘ │ │ │
│ ┌─────────────┐ └─────────────────────────┘ │
│ │ Heartbeat │ │
│ └─────────────┘ │
┌──────────────────────┐ │ ┌───────────────────────────────────────────┐│
│ │◀───────────────────│ │ ││
│ Pinecone │ metrics & │ │ Data Plane ││
│ Observability (DD) │ traces │ │ ││
│ │ │ └───────────────────────────────────────────┘│
└──────────────────────┘ │ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ S3 │ │ RDS │ │ Route53 │ │
No customer data │ │ Buckets │ │ (Aurora) │ │ + ACM │ │
leaves the cluster │ └──────────┘ └──────────┘ └─────────────┘ │
└───────────────────────────────────────────────┘
How It Works
Pinecone BYOC uses a pull-based model for control plane operations:
- Index Operations - When you create, scale, or delete indexes through the Pinecone API, these operations are queued in Pinecone's control plane
- Pull & Execute - Components running in your cluster continuously pull pending operations and execute them locally
- Heartbeat & State - Your cluster pushes health status and state back to Pinecone for monitoring
- 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 AWS 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 eks update-kubeconfig --region <region> --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:
| 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 RDS/S3 from accidental deletion | true |
public_access_enabled |
Enable public endpoint (false = PrivateLink 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 import PineconeAWSCluster, PineconeAWSClusterArgs
config = pulumi.Config()
cluster = PineconeAWSCluster(
name="my-pinecone-cluster",
args=PineconeAWSClusterArgs(
pinecone_api_key=config.require_secret("pinecone_api_key"),
pinecone_version=config.require("pinecone-version"),
region="us-west-2",
availability_zones=["us-west-2a", "us-west-2b"],
vpc_cidr="10.1.0.0/16",
deletion_protection=True,
),
)
pulumi.export("cluster_endpoint", cluster.cluster_endpoint)
Install from PyPI:
uv add pulumi-pinecone-byoc
Or with pip:
pip install pulumi-pinecone-byoc
Troubleshooting
Preflight check failures
The setup wizard runs preflight checks for AWS quotas. If these fail:
- VPC Quota - Request a limit increase via AWS Service Quotas
- Elastic IPs - Release unused EIPs or request a limit increase
- NAT Gateways - Request a limit increase
- EKS Clusters - Request a limit increase
Deployment failures
If pulumi up fails partway through:
pulumi refresh # Sync state with actual resources
pulumi up # Retry deployment
Cluster access issues
Ensure your AWS credentials match the account where the cluster is deployed:
aws sts get-caller-identity
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.
Support
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pulumi_pinecone_byoc-0.1.1.tar.gz.
File metadata
- Download URL: pulumi_pinecone_byoc-0.1.1.tar.gz
- Upload date:
- Size: 40.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32658688623a8f87ec4b8a12c80e060ce4a4579384c26a760b0565a1bdf3fc06
|
|
| MD5 |
5caa18a8545b4bcd69db5a2c768201bb
|
|
| BLAKE2b-256 |
7f6050f44e7ed2da3f231b9767e411e2073d1da75ab843aac2443858f45961e7
|
Provenance
The following attestation bundles were made for pulumi_pinecone_byoc-0.1.1.tar.gz:
Publisher:
release.yaml on pinecone-io/pulumi-pinecone-byoc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pulumi_pinecone_byoc-0.1.1.tar.gz -
Subject digest:
32658688623a8f87ec4b8a12c80e060ce4a4579384c26a760b0565a1bdf3fc06 - Sigstore transparency entry: 855164357
- Sigstore integration time:
-
Permalink:
pinecone-io/pulumi-pinecone-byoc@e016cd1e40ae240e2dd4396c179b990f1439be8e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pinecone-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@e016cd1e40ae240e2dd4396c179b990f1439be8e -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pulumi_pinecone_byoc-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pulumi_pinecone_byoc-0.1.1-py3-none-any.whl
- Upload date:
- Size: 50.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da4cf1809753232658a08d28106541aa938553c8d3cf143a9dd5b079de4e0c8a
|
|
| MD5 |
864b587583babef3f51693b384d2508c
|
|
| BLAKE2b-256 |
f4a7b6c37521c0ef610d2183cd110c84d2695298ad9a854ab6e77d5f551a0c9d
|
Provenance
The following attestation bundles were made for pulumi_pinecone_byoc-0.1.1-py3-none-any.whl:
Publisher:
release.yaml on pinecone-io/pulumi-pinecone-byoc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pulumi_pinecone_byoc-0.1.1-py3-none-any.whl -
Subject digest:
da4cf1809753232658a08d28106541aa938553c8d3cf143a9dd5b079de4e0c8a - Sigstore transparency entry: 855164358
- Sigstore integration time:
-
Permalink:
pinecone-io/pulumi-pinecone-byoc@e016cd1e40ae240e2dd4396c179b990f1439be8e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pinecone-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@e016cd1e40ae240e2dd4396c179b990f1439be8e -
Trigger Event:
workflow_dispatch
-
Statement type: