https://github.com/tigrisdata/terraform-provider-tigris
https://github.com/tigrisdata/terraform-provider-tigris
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/tigrisdata/terraform-provider-tigris
- Owner: tigrisdata
- License: mpl-2.0
- Created: 2024-08-18T02:49:00.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2026-03-06T22:34:39.000Z (4 months ago)
- Last Synced: 2026-03-06T22:40:51.310Z (4 months ago)
- Language: Go
- Size: 110 KB
- Stars: 0
- Watchers: 10
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Terraform Provider for Tigris Buckets
This repository contains a Terraform provider that allows you to create and manage Tigris buckets. This provider supports creating, reading, updating, deleting, and importing Tigris buckets with additional customization options like specifying access keys.
## Usage
Below is an example of how to use the Tigris provider in your Terraform configuration:
```hcl
terraform {
required_providers {
tigris = {
source = "tigrisdata/tigris"
}
}
}
provider "tigris" {
access_key = "your-access-key"
secret_key = "your-secret-key"
}
resource "tigris_bucket" "example_bucket" {
bucket = "my-custom-bucket"
default_storage_tier = "STANDARD"
location {
type = "single"
regions = ["sjc"]
}
}
resource "tigris_bucket_public_access" "example_bucket_public_access" {
bucket = tigris_bucket.example_bucket.bucket
acl = "private"
public_list_objects = false
}
resource "tigris_bucket_website_config" "example_website_config" {
bucket = tigris_bucket.example_bucket.bucket
domain_name = tigris_bucket.example_bucket.bucket
}
resource "tigris_bucket_shadow_config" "example_shadow_config" {
bucket = tigris_bucket.example_bucket.bucket
shadow_bucket = "my-custom-bucket-shadow"
shadow_access_key = "your-shadow-bucket-access-key"
shadow_secret_key = "your-shadow-bucket-secret-key"
shadow_region = "us-west-2"
shadow_endpoint = "https://s3.us-west-2.amazonaws.com"
shadow_write_through = true
}
# Snapshots and Forks
resource "tigris_bucket" "snapshot_bucket" {
bucket = "my-snapshot-bucket"
enable_snapshot = true
}
resource "tigris_bucket_snapshot" "example_snapshot" {
source_bucket = tigris_bucket.snapshot_bucket.bucket
snapshot_name = "my-snapshot"
}
resource "tigris_bucket_fork" "example_fork" {
bucket = "my-forked-bucket"
fork_source_bucket = tigris_bucket.snapshot_bucket.bucket
fork_source_bucket_snapshot = tigris_bucket_snapshot.example_snapshot.snapshot_version
}
```
### Applying the Configuration
1. Initialize Terraform:
```shell
terraform init
```
2. Apply the configuration:
```shell
terraform apply
```
## Provider
The Tigris provider allows you to manage Tigris buckets.
### Configuration
The provider can be configured with the following parameters:
- access_key: (Optional) The access key. Can also be sourced from the AWS_ACCESS_KEY_ID environment variable.
- secret_key: (Optional) The secret key. Can also be sourced from the AWS_SECRET_ACCESS_KEY environment variable.
## Resources
### tigris_bucket
The tigris_bucket resource creates and manages a Tigris bucket. This resource supports the following actions:
- Create: Creates a new Tigris bucket.
- Read: Retrieves information about the existing Tigris bucket.
- Update: Updates the bucket configuration.
- Delete: Deletes the Tigris bucket.
- Import: Imports an existing Tigris bucket into Terraform’s state.
#### Configuration
- bucket: (Required) The name of the Tigris bucket.
- location: (Optional) The location configuration for the bucket. Controls data placement and replication.
- type: (Required) The location type: `global`, `multi`, `dual`, or `single`.
- regions: (Optional) The region codes. For `multi`: `usa` or `eur`. For `single`/`dual`: specific region codes like `sjc`, `iad`, `ams`, etc.
- default_storage_tier: (Optional) The default storage tier for objects in the bucket. Possible values: `STANDARD`, `STANDARD_IA`, `GLACIER`, `GLACIER_IR`. Cannot be changed after creation.
- enable_snapshot: (Optional) Enable snapshots for this bucket. Defaults to `false`. Cannot be changed after creation.
```hcl
resource "tigris_bucket" "example_bucket" {
bucket = "my-custom-bucket"
default_storage_tier = "STANDARD_IA"
enable_snapshot = true
location {
type = "single"
regions = ["sjc"]
}
}
```
### tigris_bucket_public_access
The tigris_bucket_public_access resource creates and manages a Tigris bucket public access configuration. This resource supports the following actions:
- Create: Creates a new Tigris bucket public access configuration.
- Read: Retrieves information about the existing Tigris bucket public access configuration.
- Update: Updates the bucket public access configuration.
- Delete: Deletes the Tigris bucket public access configuration.
- Import: Imports an existing Tigris bucket public access configuration into Terraform’s state.
#### Configuration
- bucket: (Required) The name of the Tigris bucket.
- acl: (Optional) The access control list for the bucket. Defaults to "private". Possible values are "private", and "public-read".
```hcl
resource "tigris_bucket_public_access" "example_bucket_public_access" {
bucket = "my-custom-bucket"
acl = "private"
public_list_objects = false
}
```
### tigris_bucket_website_config
The tigris_bucket_website_config resource creates and manages a Tigris bucket website configuration. This is used to configure custom domain name for the bucket.
This resource supports the following actions:
- Create: Creates a new Tigris bucket website configuration.
- Read: Retrieves information about the existing Tigris bucket website configuration.
- Update: Updates the bucket website configuration.
- Delete: Deletes the Tigris bucket website configuration.
- Import: Imports an existing Tigris bucket website configuration into Terraform’s state.
#### Configuration
- bucket: (Required) The name of the Tigris bucket.
- domain_name: (Required) The domain name for the bucket website.
```hcl
resource "tigris_bucket_website_config" "example_website_config" {
bucket = images.example.com
domain_name = images.example.com
}
```
Before using this resource, you must have a bucket created using the tigris_bucket resource. The domain_name must match the bucket name and there must be a CNAME DNS record setup. The CNAME record should point to the Tigris bucket endpoint (e.g., images.example.com CNAME images.example.com.fly.storage.tigris.dev).
### tigris_bucket_shadow_config
The tigris_bucket_shadow_config resource creates and manages a Tigris bucket shadow configuration. The shadow configuration is used to setup a source bucket (shadow bucket) that will be used to migrate data to the Tigris bucket. You can read more about how this migration works [here](https://www.tigrisdata.com/docs/migration/).
This resource supports the following actions:
- Create: Creates a new Tigris bucket shadow configuration.
- Read: Retrieves information about the existing Tigris bucket shadow configuration.
- Update: Updates the bucket shadow configuration.
- Delete: Deletes the Tigris bucket shadow configuration.
- Import: Imports an existing Tigris bucket shadow configuration into Terraform’s state.
#### Configuration
- bucket: (Required) The name of the Tigris bucket.
- shadow_bucket: (Required) The name of the shadow bucket.
- shadow_access_key: (Required) The access key for the shadow bucket.
- shadow_secret_key: (Required) The secret key for the shadow bucket.
- shadow_region: (Optional) The region for the shadow bucket. Defaults to "us-east-1".
- shadow_endpoint: (Optional) The endpoint for the shadow bucket. Defaults to "https://s3.us-east-1.amazonaws.com".
- shadow_write_through: (Optional) Whether to write through to the shadow bucket. Defaults to true.
```hcl
resource "tigris_bucket_shadow_config" "example_shadow_config" {
bucket = "my-custom-bucket"
shadow_bucket = "my-custom-bucket-shadow"
shadow_access_key = "your-shadow-bucket-access-key"
shadow_secret_key = "your-shadow-bucket-secret-key"
shadow_region = "us-west-2"
shadown_endpoint = "https://s3.us-west-2.amazonaws.com"
shadow_write_through = true
}
```
### tigris_bucket_snapshot
The tigris_bucket_snapshot resource creates a point-in-time snapshot of a Tigris bucket. The source bucket must have snapshots enabled (`enable_snapshot = true`).
> **Note:** Snapshots cannot be deleted via the API. Destroying this resource will only remove it from Terraform state.
This resource supports the following actions:
- Create: Creates a new snapshot of the source bucket.
- Read: Retrieves information about the snapshot.
- Delete: Removes the snapshot from Terraform state (no API deletion).
- Import: Imports an existing snapshot using the format `{source_bucket}:{snapshot_version}:{snapshot_name}`.
#### Configuration
- source_bucket: (Required) The name of the source bucket to snapshot.
- snapshot_name: (Required) The name for the snapshot.
- snapshot_version: (Computed) The version identifier of the snapshot, returned by the API.
- snapshot_created_at: (Computed) The timestamp when the snapshot was created.
```hcl
resource "tigris_bucket_snapshot" "example" {
source_bucket = tigris_bucket.snapshot_bucket.bucket
snapshot_name = "my-snapshot"
}
```
### tigris_bucket_fork
The tigris_bucket_fork resource creates a new bucket as a fork of an existing bucket, optionally from a specific snapshot. A forked bucket is a regular bucket that starts with the data from the source.
This resource supports the following actions:
- Create: Creates a new bucket forked from the source bucket.
- Read: Retrieves information about the forked bucket and its fork metadata.
- Delete: Deletes the forked bucket.
- Import: Imports an existing forked bucket into Terraform's state.
#### Configuration
- bucket: (Required) The name of the new forked bucket.
- fork_source_bucket: (Required) The name of the source bucket to fork from.
- fork_source_bucket_snapshot: (Optional) The snapshot version to fork from. If not specified, forks from the current state.
- fork_created_at: (Computed) The timestamp when the fork was created.
```hcl
resource "tigris_bucket_fork" "example" {
bucket = "my-forked-bucket"
fork_source_bucket = "my-source-bucket"
fork_source_bucket_snapshot = tigris_bucket_snapshot.example.snapshot_version
}
```
## Developing
### Local Development
1. Build and install the provider:
```shell
make build # builds the binary
make install # installs to $GOPATH/bin
```
2. Create a `~/.terraformrc` file to tell Terraform to use your local build:
```hcl
provider_installation {
dev_overrides {
"tigrisdata/tigris" = "/bin"
}
direct {}
}
```
3. Set your Tigris credentials:
```shell
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
```
4. Run Terraform against the example configurations in `examples/resources/`. With `dev_overrides` configured, skip `terraform init` and run directly:
```shell
cd examples/resources/tigris_bucket
terraform plan
terraform apply
```
### Useful Make Targets
- `make vet` - Run static analysis
- `make fmtcheck` - Check code formatting
- `make fmt` - Auto-format code
- `make lint` - Run full linting (requires `make tools` first)
- `make docs` - Regenerate documentation
### Documentation
The documentation for this provider is generated using terraform-plugin-docs. To generate the documentation, run the following command:
```shell
make docs
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.