The aws:timestreaminfluxdb/dbCluster:DbCluster resource, part of the Pulumi AWS provider, provisions a Timestream for InfluxDB cluster: its compute instance type, storage allocation, networking placement, and initial configuration. This guide focuses on three capabilities: InfluxDB V2 and V3 cluster creation, VPC networking prerequisites, and S3 log delivery configuration.
Timestream for InfluxDB clusters require VPC infrastructure and optionally S3 buckets with IAM policies for log delivery. This resource requires a subscription to Timestream for InfluxDB Read Replicas on AWS Marketplace. The examples are intentionally small. Combine them with your own VPC resources, security policies, and monitoring infrastructure.
Create a V2 cluster with initial admin credentials
Most InfluxDB V2 deployments start by creating a cluster with an initial organization, bucket, and admin user for accessing the InfluxDB UI and CLI.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.timestreaminfluxdb.DbCluster("example", {
allocatedStorage: 20,
bucket: "example-bucket-name",
dbInstanceType: "db.influx.medium",
failoverMode: "AUTOMATIC",
username: "admin",
password: "example-password",
port: 8086,
organization: "organization",
vpcSubnetIds: [
example1.id,
example2.id,
],
vpcSecurityGroupIds: [exampleAwsSecurityGroup.id],
name: "example-db-cluster",
});
import pulumi
import pulumi_aws as aws
example = aws.timestreaminfluxdb.DbCluster("example",
allocated_storage=20,
bucket="example-bucket-name",
db_instance_type="db.influx.medium",
failover_mode="AUTOMATIC",
username="admin",
password="example-password",
port=8086,
organization="organization",
vpc_subnet_ids=[
example1["id"],
example2["id"],
],
vpc_security_group_ids=[example_aws_security_group["id"]],
name="example-db-cluster")
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/timestreaminfluxdb"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := timestreaminfluxdb.NewDbCluster(ctx, "example", ×treaminfluxdb.DbClusterArgs{
AllocatedStorage: pulumi.Int(20),
Bucket: pulumi.String("example-bucket-name"),
DbInstanceType: pulumi.String("db.influx.medium"),
FailoverMode: pulumi.String("AUTOMATIC"),
Username: pulumi.String("admin"),
Password: pulumi.String("example-password"),
Port: pulumi.Int(8086),
Organization: pulumi.String("organization"),
VpcSubnetIds: pulumi.StringArray{
example1.Id,
example2.Id,
},
VpcSecurityGroupIds: pulumi.StringArray{
exampleAwsSecurityGroup.Id,
},
Name: pulumi.String("example-db-cluster"),
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.TimestreamInfluxDB.DbCluster("example", new()
{
AllocatedStorage = 20,
Bucket = "example-bucket-name",
DbInstanceType = "db.influx.medium",
FailoverMode = "AUTOMATIC",
Username = "admin",
Password = "example-password",
Port = 8086,
Organization = "organization",
VpcSubnetIds = new[]
{
example1.Id,
example2.Id,
},
VpcSecurityGroupIds = new[]
{
exampleAwsSecurityGroup.Id,
},
Name = "example-db-cluster",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.timestreaminfluxdb.DbCluster;
import com.pulumi.aws.timestreaminfluxdb.DbClusterArgs;
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 example = new DbCluster("example", DbClusterArgs.builder()
.allocatedStorage(20)
.bucket("example-bucket-name")
.dbInstanceType("db.influx.medium")
.failoverMode("AUTOMATIC")
.username("admin")
.password("example-password")
.port(8086)
.organization("organization")
.vpcSubnetIds(
example1.id(),
example2.id())
.vpcSecurityGroupIds(exampleAwsSecurityGroup.id())
.name("example-db-cluster")
.build());
}
}
resources:
example:
type: aws:timestreaminfluxdb:DbCluster
properties:
allocatedStorage: 20
bucket: example-bucket-name
dbInstanceType: db.influx.medium
failoverMode: AUTOMATIC
username: admin
password: example-password
port: 8086
organization: organization
vpcSubnetIds:
- ${example1.id}
- ${example2.id}
vpcSecurityGroupIds:
- ${exampleAwsSecurityGroup.id}
name: example-db-cluster
The cluster provisions storage (allocatedStorage), creates an initial bucket for time-series data, and establishes admin credentials (username, password, organization). These credentials are automatically stored in AWS Secrets Manager, referenced by the influxAuthParametersSecretArn output. The vpcSubnetIds must reference at least two subnets in different availability zones.
Provision VPC infrastructure alongside the cluster
Teams creating their first cluster need to understand the networking prerequisites: a VPC, at least two subnets, and a security group.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.ec2.Vpc("example", {cidrBlock: "10.0.0.0/16"});
const example1 = new aws.ec2.Subnet("example_1", {
vpcId: example.id,
cidrBlock: "10.0.1.0/24",
});
const example2 = new aws.ec2.Subnet("example_2", {
vpcId: example.id,
cidrBlock: "10.0.2.0/24",
});
const exampleSecurityGroup = new aws.ec2.SecurityGroup("example", {
name: "example",
vpcId: example.id,
});
const exampleDbCluster = new aws.timestreaminfluxdb.DbCluster("example", {
allocatedStorage: 20,
bucket: "example-bucket-name",
dbInstanceType: "db.influx.medium",
username: "admin",
password: "example-password",
organization: "organization",
vpcSubnetIds: [
example1.id,
example2.id,
],
vpcSecurityGroupIds: [exampleSecurityGroup.id],
name: "example-db-cluster",
});
import pulumi
import pulumi_aws as aws
example = aws.ec2.Vpc("example", cidr_block="10.0.0.0/16")
example1 = aws.ec2.Subnet("example_1",
vpc_id=example.id,
cidr_block="10.0.1.0/24")
example2 = aws.ec2.Subnet("example_2",
vpc_id=example.id,
cidr_block="10.0.2.0/24")
example_security_group = aws.ec2.SecurityGroup("example",
name="example",
vpc_id=example.id)
example_db_cluster = aws.timestreaminfluxdb.DbCluster("example",
allocated_storage=20,
bucket="example-bucket-name",
db_instance_type="db.influx.medium",
username="admin",
password="example-password",
organization="organization",
vpc_subnet_ids=[
example1.id,
example2.id,
],
vpc_security_group_ids=[example_security_group.id],
name="example-db-cluster")
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/ec2"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/timestreaminfluxdb"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := ec2.NewVpc(ctx, "example", &ec2.VpcArgs{
CidrBlock: pulumi.String("10.0.0.0/16"),
})
if err != nil {
return err
}
example1, err := ec2.NewSubnet(ctx, "example_1", &ec2.SubnetArgs{
VpcId: example.ID(),
CidrBlock: pulumi.String("10.0.1.0/24"),
})
if err != nil {
return err
}
example2, err := ec2.NewSubnet(ctx, "example_2", &ec2.SubnetArgs{
VpcId: example.ID(),
CidrBlock: pulumi.String("10.0.2.0/24"),
})
if err != nil {
return err
}
exampleSecurityGroup, err := ec2.NewSecurityGroup(ctx, "example", &ec2.SecurityGroupArgs{
Name: pulumi.String("example"),
VpcId: example.ID(),
})
if err != nil {
return err
}
_, err = timestreaminfluxdb.NewDbCluster(ctx, "example", ×treaminfluxdb.DbClusterArgs{
AllocatedStorage: pulumi.Int(20),
Bucket: pulumi.String("example-bucket-name"),
DbInstanceType: pulumi.String("db.influx.medium"),
Username: pulumi.String("admin"),
Password: pulumi.String("example-password"),
Organization: pulumi.String("organization"),
VpcSubnetIds: pulumi.StringArray{
example1.ID(),
example2.ID(),
},
VpcSecurityGroupIds: pulumi.StringArray{
exampleSecurityGroup.ID(),
},
Name: pulumi.String("example-db-cluster"),
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Ec2.Vpc("example", new()
{
CidrBlock = "10.0.0.0/16",
});
var example1 = new Aws.Ec2.Subnet("example_1", new()
{
VpcId = example.Id,
CidrBlock = "10.0.1.0/24",
});
var example2 = new Aws.Ec2.Subnet("example_2", new()
{
VpcId = example.Id,
CidrBlock = "10.0.2.0/24",
});
var exampleSecurityGroup = new Aws.Ec2.SecurityGroup("example", new()
{
Name = "example",
VpcId = example.Id,
});
var exampleDbCluster = new Aws.TimestreamInfluxDB.DbCluster("example", new()
{
AllocatedStorage = 20,
Bucket = "example-bucket-name",
DbInstanceType = "db.influx.medium",
Username = "admin",
Password = "example-password",
Organization = "organization",
VpcSubnetIds = new[]
{
example1.Id,
example2.Id,
},
VpcSecurityGroupIds = new[]
{
exampleSecurityGroup.Id,
},
Name = "example-db-cluster",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.ec2.Vpc;
import com.pulumi.aws.ec2.VpcArgs;
import com.pulumi.aws.ec2.Subnet;
import com.pulumi.aws.ec2.SubnetArgs;
import com.pulumi.aws.ec2.SecurityGroup;
import com.pulumi.aws.ec2.SecurityGroupArgs;
import com.pulumi.aws.timestreaminfluxdb.DbCluster;
import com.pulumi.aws.timestreaminfluxdb.DbClusterArgs;
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 example = new Vpc("example", VpcArgs.builder()
.cidrBlock("10.0.0.0/16")
.build());
var example1 = new Subnet("example1", SubnetArgs.builder()
.vpcId(example.id())
.cidrBlock("10.0.1.0/24")
.build());
var example2 = new Subnet("example2", SubnetArgs.builder()
.vpcId(example.id())
.cidrBlock("10.0.2.0/24")
.build());
var exampleSecurityGroup = new SecurityGroup("exampleSecurityGroup", SecurityGroupArgs.builder()
.name("example")
.vpcId(example.id())
.build());
var exampleDbCluster = new DbCluster("exampleDbCluster", DbClusterArgs.builder()
.allocatedStorage(20)
.bucket("example-bucket-name")
.dbInstanceType("db.influx.medium")
.username("admin")
.password("example-password")
.organization("organization")
.vpcSubnetIds(
example1.id(),
example2.id())
.vpcSecurityGroupIds(exampleSecurityGroup.id())
.name("example-db-cluster")
.build());
}
}
resources:
example:
type: aws:ec2:Vpc
properties:
cidrBlock: 10.0.0.0/16
example1:
type: aws:ec2:Subnet
name: example_1
properties:
vpcId: ${example.id}
cidrBlock: 10.0.1.0/24
example2:
type: aws:ec2:Subnet
name: example_2
properties:
vpcId: ${example.id}
cidrBlock: 10.0.2.0/24
exampleSecurityGroup:
type: aws:ec2:SecurityGroup
name: example
properties:
name: example
vpcId: ${example.id}
exampleDbCluster:
type: aws:timestreaminfluxdb:DbCluster
name: example
properties:
allocatedStorage: 20
bucket: example-bucket-name
dbInstanceType: db.influx.medium
username: admin
password: example-password
organization: organization
vpcSubnetIds:
- ${example1.id}
- ${example2.id}
vpcSecurityGroupIds:
- ${exampleSecurityGroup.id}
name: example-db-cluster
This configuration creates the complete networking foundation. The Vpc defines the network boundary, two Subnets provide multi-AZ placement, and the SecurityGroup controls inbound access. The cluster references these resources via vpcSubnetIds and vpcSecurityGroupIds.
Send InfluxDB engine logs to S3
Production deployments often route engine logs to S3 for centralized analysis and long-term retention.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const exampleBucket = new aws.s3.Bucket("example", {
bucket: "example-s3-bucket",
forceDestroy: true,
});
const example = aws.iam.getPolicyDocumentOutput({
statements: [{
actions: ["s3:PutObject"],
principals: [{
type: "Service",
identifiers: ["timestream-influxdb.amazonaws.com"],
}],
resources: [pulumi.interpolate`${exampleBucket.arn}/*`],
}],
});
const exampleBucketPolicy = new aws.s3.BucketPolicy("example", {
bucket: exampleBucket.id,
policy: example.apply(example => example.json),
});
const exampleDbCluster = new aws.timestreaminfluxdb.DbCluster("example", {
allocatedStorage: 20,
bucket: "example-bucket-name",
dbInstanceType: "db.influx.medium",
username: "admin",
password: "example-password",
organization: "organization",
vpcSubnetIds: [
example1.id,
example2.id,
],
vpcSecurityGroupIds: [exampleAwsSecurityGroup.id],
name: "example-db-cluster",
logDeliveryConfiguration: {
s3Configuration: {
bucketName: exampleBucket.bucket,
enabled: true,
},
},
});
import pulumi
import pulumi_aws as aws
example_bucket = aws.s3.Bucket("example",
bucket="example-s3-bucket",
force_destroy=True)
example = aws.iam.get_policy_document_output(statements=[{
"actions": ["s3:PutObject"],
"principals": [{
"type": "Service",
"identifiers": ["timestream-influxdb.amazonaws.com"],
}],
"resources": [example_bucket.arn.apply(lambda arn: f"{arn}/*")],
}])
example_bucket_policy = aws.s3.BucketPolicy("example",
bucket=example_bucket.id,
policy=example.json)
example_db_cluster = aws.timestreaminfluxdb.DbCluster("example",
allocated_storage=20,
bucket="example-bucket-name",
db_instance_type="db.influx.medium",
username="admin",
password="example-password",
organization="organization",
vpc_subnet_ids=[
example1["id"],
example2["id"],
],
vpc_security_group_ids=[example_aws_security_group["id"]],
name="example-db-cluster",
log_delivery_configuration={
"s3_configuration": {
"bucket_name": example_bucket.bucket,
"enabled": True,
},
})
package main
import (
"fmt"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/iam"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/s3"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/timestreaminfluxdb"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
exampleBucket, err := s3.NewBucket(ctx, "example", &s3.BucketArgs{
Bucket: pulumi.String("example-s3-bucket"),
ForceDestroy: pulumi.Bool(true),
})
if err != nil {
return err
}
example := iam.GetPolicyDocumentOutput(ctx, iam.GetPolicyDocumentOutputArgs{
Statements: iam.GetPolicyDocumentStatementArray{
&iam.GetPolicyDocumentStatementArgs{
Actions: pulumi.StringArray{
pulumi.String("s3:PutObject"),
},
Principals: iam.GetPolicyDocumentStatementPrincipalArray{
&iam.GetPolicyDocumentStatementPrincipalArgs{
Type: pulumi.String("Service"),
Identifiers: pulumi.StringArray{
pulumi.String("timestream-influxdb.amazonaws.com"),
},
},
},
Resources: pulumi.StringArray{
exampleBucket.Arn.ApplyT(func(arn string) (string, error) {
return fmt.Sprintf("%v/*", arn), nil
}).(pulumi.StringOutput),
},
},
},
}, nil)
_, err = s3.NewBucketPolicy(ctx, "example", &s3.BucketPolicyArgs{
Bucket: exampleBucket.ID(),
Policy: pulumi.String(example.ApplyT(func(example iam.GetPolicyDocumentResult) (*string, error) {
return &example.Json, nil
}).(pulumi.StringPtrOutput)),
})
if err != nil {
return err
}
_, err = timestreaminfluxdb.NewDbCluster(ctx, "example", ×treaminfluxdb.DbClusterArgs{
AllocatedStorage: pulumi.Int(20),
Bucket: pulumi.String("example-bucket-name"),
DbInstanceType: pulumi.String("db.influx.medium"),
Username: pulumi.String("admin"),
Password: pulumi.String("example-password"),
Organization: pulumi.String("organization"),
VpcSubnetIds: pulumi.StringArray{
example1.Id,
example2.Id,
},
VpcSecurityGroupIds: pulumi.StringArray{
exampleAwsSecurityGroup.Id,
},
Name: pulumi.String("example-db-cluster"),
LogDeliveryConfiguration: ×treaminfluxdb.DbClusterLogDeliveryConfigurationArgs{
S3Configuration: ×treaminfluxdb.DbClusterLogDeliveryConfigurationS3ConfigurationArgs{
BucketName: exampleBucket.Bucket,
Enabled: pulumi.Bool(true),
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var exampleBucket = new Aws.S3.Bucket("example", new()
{
BucketName = "example-s3-bucket",
ForceDestroy = true,
});
var example = Aws.Iam.GetPolicyDocument.Invoke(new()
{
Statements = new[]
{
new Aws.Iam.Inputs.GetPolicyDocumentStatementInputArgs
{
Actions = new[]
{
"s3:PutObject",
},
Principals = new[]
{
new Aws.Iam.Inputs.GetPolicyDocumentStatementPrincipalInputArgs
{
Type = "Service",
Identifiers = new[]
{
"timestream-influxdb.amazonaws.com",
},
},
},
Resources = new[]
{
$"{exampleBucket.Arn}/*",
},
},
},
});
var exampleBucketPolicy = new Aws.S3.BucketPolicy("example", new()
{
Bucket = exampleBucket.Id,
Policy = example.Apply(getPolicyDocumentResult => getPolicyDocumentResult.Json),
});
var exampleDbCluster = new Aws.TimestreamInfluxDB.DbCluster("example", new()
{
AllocatedStorage = 20,
Bucket = "example-bucket-name",
DbInstanceType = "db.influx.medium",
Username = "admin",
Password = "example-password",
Organization = "organization",
VpcSubnetIds = new[]
{
example1.Id,
example2.Id,
},
VpcSecurityGroupIds = new[]
{
exampleAwsSecurityGroup.Id,
},
Name = "example-db-cluster",
LogDeliveryConfiguration = new Aws.TimestreamInfluxDB.Inputs.DbClusterLogDeliveryConfigurationArgs
{
S3Configuration = new Aws.TimestreamInfluxDB.Inputs.DbClusterLogDeliveryConfigurationS3ConfigurationArgs
{
BucketName = exampleBucket.BucketName,
Enabled = true,
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.s3.Bucket;
import com.pulumi.aws.s3.BucketArgs;
import com.pulumi.aws.iam.IamFunctions;
import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
import com.pulumi.aws.s3.BucketPolicy;
import com.pulumi.aws.s3.BucketPolicyArgs;
import com.pulumi.aws.timestreaminfluxdb.DbCluster;
import com.pulumi.aws.timestreaminfluxdb.DbClusterArgs;
import com.pulumi.aws.timestreaminfluxdb.inputs.DbClusterLogDeliveryConfigurationArgs;
import com.pulumi.aws.timestreaminfluxdb.inputs.DbClusterLogDeliveryConfigurationS3ConfigurationArgs;
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 exampleBucket = new Bucket("exampleBucket", BucketArgs.builder()
.bucket("example-s3-bucket")
.forceDestroy(true)
.build());
final var example = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
.statements(GetPolicyDocumentStatementArgs.builder()
.actions("s3:PutObject")
.principals(GetPolicyDocumentStatementPrincipalArgs.builder()
.type("Service")
.identifiers("timestream-influxdb.amazonaws.com")
.build())
.resources(exampleBucket.arn().applyValue(_arn -> String.format("%s/*", _arn)))
.build())
.build());
var exampleBucketPolicy = new BucketPolicy("exampleBucketPolicy", BucketPolicyArgs.builder()
.bucket(exampleBucket.id())
.policy(example.applyValue(_example -> _example.json()))
.build());
var exampleDbCluster = new DbCluster("exampleDbCluster", DbClusterArgs.builder()
.allocatedStorage(20)
.bucket("example-bucket-name")
.dbInstanceType("db.influx.medium")
.username("admin")
.password("example-password")
.organization("organization")
.vpcSubnetIds(
example1.id(),
example2.id())
.vpcSecurityGroupIds(exampleAwsSecurityGroup.id())
.name("example-db-cluster")
.logDeliveryConfiguration(DbClusterLogDeliveryConfigurationArgs.builder()
.s3Configuration(DbClusterLogDeliveryConfigurationS3ConfigurationArgs.builder()
.bucketName(exampleBucket.bucket())
.enabled(true)
.build())
.build())
.build());
}
}
resources:
exampleBucket:
type: aws:s3:Bucket
name: example
properties:
bucket: example-s3-bucket
forceDestroy: true
exampleBucketPolicy:
type: aws:s3:BucketPolicy
name: example
properties:
bucket: ${exampleBucket.id}
policy: ${example.json}
exampleDbCluster:
type: aws:timestreaminfluxdb:DbCluster
name: example
properties:
allocatedStorage: 20
bucket: example-bucket-name
dbInstanceType: db.influx.medium
username: admin
password: example-password
organization: organization
vpcSubnetIds:
- ${example1.id}
- ${example2.id}
vpcSecurityGroupIds:
- ${exampleAwsSecurityGroup.id}
name: example-db-cluster
logDeliveryConfiguration:
s3Configuration:
bucketName: ${exampleBucket.bucket}
enabled: true
variables:
example:
fn::invoke:
function: aws:iam:getPolicyDocument
arguments:
statements:
- actions:
- s3:PutObject
principals:
- type: Service
identifiers:
- timestream-influxdb.amazonaws.com
resources:
- ${exampleBucket.arn}/*
The logDeliveryConfiguration block enables S3 log delivery. The BucketPolicy grants the Timestream for InfluxDB service principal (timestream-influxdb.amazonaws.com) permission to write logs. The s3Configuration specifies the target bucket and enables delivery.
Create a V3 cluster with parameter group
InfluxDB V3 clusters use a different configuration model that omits V2-specific properties like organization and bucket.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.timestreaminfluxdb.DbCluster("example", {
name: "example-v3-cluster",
dbInstanceType: "db.influx.large",
dbParameterGroupIdentifier: "InfluxDBV3Core",
vpcSubnetIds: [
example1.id,
example2.id,
],
vpcSecurityGroupIds: [exampleAwsSecurityGroup.id],
});
import pulumi
import pulumi_aws as aws
example = aws.timestreaminfluxdb.DbCluster("example",
name="example-v3-cluster",
db_instance_type="db.influx.large",
db_parameter_group_identifier="InfluxDBV3Core",
vpc_subnet_ids=[
example1["id"],
example2["id"],
],
vpc_security_group_ids=[example_aws_security_group["id"]])
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/timestreaminfluxdb"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := timestreaminfluxdb.NewDbCluster(ctx, "example", ×treaminfluxdb.DbClusterArgs{
Name: pulumi.String("example-v3-cluster"),
DbInstanceType: pulumi.String("db.influx.large"),
DbParameterGroupIdentifier: pulumi.String("InfluxDBV3Core"),
VpcSubnetIds: pulumi.StringArray{
example1.Id,
example2.Id,
},
VpcSecurityGroupIds: pulumi.StringArray{
exampleAwsSecurityGroup.Id,
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.TimestreamInfluxDB.DbCluster("example", new()
{
Name = "example-v3-cluster",
DbInstanceType = "db.influx.large",
DbParameterGroupIdentifier = "InfluxDBV3Core",
VpcSubnetIds = new[]
{
example1.Id,
example2.Id,
},
VpcSecurityGroupIds = new[]
{
exampleAwsSecurityGroup.Id,
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.timestreaminfluxdb.DbCluster;
import com.pulumi.aws.timestreaminfluxdb.DbClusterArgs;
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 example = new DbCluster("example", DbClusterArgs.builder()
.name("example-v3-cluster")
.dbInstanceType("db.influx.large")
.dbParameterGroupIdentifier("InfluxDBV3Core")
.vpcSubnetIds(
example1.id(),
example2.id())
.vpcSecurityGroupIds(exampleAwsSecurityGroup.id())
.build());
}
}
resources:
example:
type: aws:timestreaminfluxdb:DbCluster
properties:
name: example-v3-cluster
dbInstanceType: db.influx.large
dbParameterGroupIdentifier: InfluxDBV3Core
vpcSubnetIds:
- ${example1.id}
- ${example2.id}
vpcSecurityGroupIds:
- ${exampleAwsSecurityGroup.id}
The dbParameterGroupIdentifier property selects the InfluxDB V3 engine by specifying “InfluxDBV3Core”. V3 clusters do not accept allocatedStorage, bucket, organization, username, password, or deploymentType properties. The cluster still requires VPC networking configuration.
Beyond these examples
These snippets focus on specific cluster-level features: V2 and V3 cluster provisioning, VPC networking and security group configuration, and S3 log delivery with IAM policies. They’re intentionally minimal rather than full time-series database deployments.
The examples reference pre-existing infrastructure such as VPC, subnets (at least two in different AZs), security groups, and S3 buckets with appropriate IAM policies for log delivery. They focus on configuring the cluster rather than provisioning all surrounding infrastructure.
To keep things focused, common cluster patterns are omitted, including:
- Failover mode configuration (failoverMode)
- Custom port assignment (port)
- Storage type selection (dbStorageType) and IOPS tuning
- Public accessibility and internet gateway setup
- Tags for cost allocation and organization
These omissions are intentional: the goal is to illustrate how each cluster feature is wired, not provide drop-in database modules. See the Timestream for InfluxDB DbCluster resource reference for all available configuration options.
Let's create AWS Timestream for InfluxDB Clusters
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Prerequisites & Setup
vpcSubnetIds property requires at least two subnet IDs for Multi-AZ deployments.Cluster Types & Configuration
allocatedStorage, bucket, deploymentType, organization, password, and username. V3 clusters use dbParameterGroupIdentifier (like “InfluxDBV3Core”) and forbid those V2-specific fields.dbParameterGroupIdentifier causes the cluster to be destroyed and recreated. Adding or changing it triggers an in-place update, but removal requires recreation.bucket, organization, username, and password as JSON. For V3 clusters, it contains the admin token. Access the secret ARN via the influxAuthParametersSecretArn attribute.Storage & Performance
Storage ranges from 20 GiB (minimum) to 16,384 GiB (maximum). Three storage types are available:
InfluxIOIncludedT1: 3000 IOPS, minimum 20 GiBInfluxIOIncludedT2: 12,000 IOPS, minimum 400 GiBInfluxIOIncludedT3: 16,000 IOPS, minimum 400 GiB
Networking & Ports
1024 to 65535, excluding 2375-2376, 7788-7799, 8090, and 51678-51680.Naming & Validation
Optional Features
logDeliveryConfiguration.s3Configuration with bucketName and enabled: true. You must also create an S3 bucket policy allowing timestream-influxdb.amazonaws.com to perform s3:PutObject on your bucket.