Terraform (AWS)
You must generate an Access Key before getting started. All examples will utilize access_key_id and access_key_secret variables which represent the Access Key ID and Secret Access Key values you generated.
This example shows how to configure R2 with Terraform using the AWS provider ↗.
With terraform ↗ installed, create main.tf and copy the content below replacing with your Account ID and R2 credentials.
terraform {  required_providers {    aws = {      source = "hashicorp/aws"      version = "~> 5"    }  }}
provider "aws" {  region = "us-east-1"
  access_key = <R2 Access Key>  secret_key = <R2 Secret Key>
  skip_credentials_validation = true  skip_region_validation      = true  skip_requesting_account_id  = true
  endpoints {    s3 = "https://<account id>.r2.cloudflarestorage.com"  }}
resource "aws_s3_bucket" "default" {  bucket = "<org>-test"}
resource "aws_s3_bucket_cors_configuration" "default" {  bucket   = aws_s3_bucket.default.id
  cors_rule {    allowed_methods = ["GET"]    allowed_origins = ["*"]  }}
resource "aws_s3_bucket_lifecycle_configuration" "default" {  bucket = aws_s3_bucket.default.id
  rule {    id     = "expire-bucket"    status = "Enabled"    expiration {      days = 1    }  }
  rule {    id     = "abort-multipart-upload"    status = "Enabled"    abort_incomplete_multipart_upload {      days_after_initiation = 1    }  }}You can then use terraform plan to view the changes and terraform apply to apply changes.