Skip to content

Terraform Resources

S3 Vectors requires AWS provider >= 6.24.0:

versions.tf
terraform {
required_version = ">= 1.5.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 6.24.0"
}
}
}
s3_vectors.tf
resource "aws_s3vectors_vector_bucket" "this" {
vector_bucket_name = local.vector_bucket_name
}

The bucket name must be globally unique. This demo uses a random_id prefix:

main.tf
resource "random_id" "bucket_prefix" {
byte_length = 4
}
locals {
vector_bucket_name = "${random_id.bucket_prefix.hex}-${var.vector_bucket_name}"
}
s3_vectors.tf
resource "aws_s3vectors_index" "this" {
vector_bucket_name = aws_s3vectors_vector_bucket.this.vector_bucket_name
index_name = var.vector_index_name
dimension = var.vector_dimension # 1024
distance_metric = var.vector_distance_metric # "cosine"
data_type = "float32"
}
AttributeTypeDescription
vector_bucket_nameOutputThe bucket name (used in API calls)
vector_bucket_arnOutputFull ARN (used in IAM policies)
index_nameOutputIndex name (used in API calls)
index_arnOutputFull ARN of the index
variables.tf
variable "vector_dimension" {
description = "Dimensionality of vector embeddings"
type = number
default = 1024
validation {
condition = var.vector_dimension >= 1 && var.vector_dimension <= 4096
error_message = "Must be between 1 and 4096."
}
}
variable "vector_distance_metric" {
description = "Distance metric for similarity search"
type = string
default = "cosine"
validation {
condition = contains(["cosine", "euclidean"], var.vector_distance_metric)
error_message = "Must be cosine or euclidean."
}
}