mirror of
https://github.com/Sea-Haven-Industries/forgejo.git
synced 2026-09-30 03:03:11 +00:00
* feat(terraform): migrate forgejo to HCP Terraform Move the prod host onto workspace forgejo-prod in the After Hours VPC and freeze CDK push deploys so cutover can happen without applying into seahaven-prod. * fix(terraform): restore forgejo.db from the dump tarball Boot restore was copying data/ and repos/ and leaving the sqlite file at the archive root, so a volume restore started Forgejo with no database.
246 lines
4.7 KiB
HCL
246 lines
4.7 KiB
HCL
resource "aws_s3_bucket" "backups" {
|
|
bucket = local.backup_bucket_name
|
|
|
|
lifecycle {
|
|
prevent_destroy = true
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_versioning" "backups" {
|
|
bucket = aws_s3_bucket.backups.id
|
|
|
|
versioning_configuration {
|
|
status = "Enabled"
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_server_side_encryption_configuration" "backups" {
|
|
bucket = aws_s3_bucket.backups.id
|
|
|
|
rule {
|
|
apply_server_side_encryption_by_default {
|
|
sse_algorithm = "AES256"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_public_access_block" "backups" {
|
|
bucket = aws_s3_bucket.backups.id
|
|
|
|
block_public_acls = true
|
|
block_public_policy = true
|
|
ignore_public_acls = true
|
|
restrict_public_buckets = true
|
|
}
|
|
|
|
resource "aws_s3_bucket_ownership_controls" "backups" {
|
|
bucket = aws_s3_bucket.backups.id
|
|
|
|
rule {
|
|
object_ownership = "BucketOwnerEnforced"
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_lifecycle_configuration" "backups" {
|
|
bucket = aws_s3_bucket.backups.id
|
|
|
|
rule {
|
|
id = "archive-to-glacier"
|
|
status = "Enabled"
|
|
|
|
filter {}
|
|
|
|
transition {
|
|
days = 30
|
|
storage_class = "GLACIER"
|
|
}
|
|
}
|
|
|
|
rule {
|
|
id = "cleanup-noncurrent-versions"
|
|
status = "Enabled"
|
|
|
|
filter {}
|
|
|
|
noncurrent_version_expiration {
|
|
noncurrent_days = 90
|
|
}
|
|
}
|
|
|
|
depends_on = [aws_s3_bucket_versioning.backups]
|
|
}
|
|
|
|
resource "aws_s3_bucket" "replica" {
|
|
provider = aws.replica
|
|
bucket = local.replica_bucket_name
|
|
|
|
object_lock_enabled = true
|
|
|
|
lifecycle {
|
|
prevent_destroy = true
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_versioning" "replica" {
|
|
provider = aws.replica
|
|
bucket = aws_s3_bucket.replica.id
|
|
|
|
versioning_configuration {
|
|
status = "Enabled"
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_object_lock_configuration" "replica" {
|
|
provider = aws.replica
|
|
bucket = aws_s3_bucket.replica.id
|
|
|
|
rule {
|
|
default_retention {
|
|
mode = "GOVERNANCE"
|
|
days = 90
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_server_side_encryption_configuration" "replica" {
|
|
provider = aws.replica
|
|
bucket = aws_s3_bucket.replica.id
|
|
|
|
rule {
|
|
apply_server_side_encryption_by_default {
|
|
sse_algorithm = "AES256"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_public_access_block" "replica" {
|
|
provider = aws.replica
|
|
bucket = aws_s3_bucket.replica.id
|
|
|
|
block_public_acls = true
|
|
block_public_policy = true
|
|
ignore_public_acls = true
|
|
restrict_public_buckets = true
|
|
}
|
|
|
|
resource "aws_s3_bucket_ownership_controls" "replica" {
|
|
provider = aws.replica
|
|
bucket = aws_s3_bucket.replica.id
|
|
|
|
rule {
|
|
object_ownership = "BucketOwnerEnforced"
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_lifecycle_configuration" "replica" {
|
|
provider = aws.replica
|
|
bucket = aws_s3_bucket.replica.id
|
|
|
|
rule {
|
|
id = "archive-to-glacier"
|
|
status = "Enabled"
|
|
|
|
filter {}
|
|
|
|
transition {
|
|
days = 30
|
|
storage_class = "GLACIER"
|
|
}
|
|
}
|
|
|
|
rule {
|
|
id = "cleanup-noncurrent-versions"
|
|
status = "Enabled"
|
|
|
|
filter {}
|
|
|
|
noncurrent_version_expiration {
|
|
noncurrent_days = 90
|
|
}
|
|
}
|
|
|
|
depends_on = [aws_s3_bucket_versioning.replica]
|
|
}
|
|
|
|
resource "aws_s3_bucket_replication_configuration" "backups" {
|
|
bucket = aws_s3_bucket.backups.id
|
|
role = aws_iam_role.replication.arn
|
|
|
|
rule {
|
|
id = "replicate-to-west"
|
|
status = "Enabled"
|
|
priority = 1
|
|
|
|
filter {}
|
|
|
|
delete_marker_replication {
|
|
status = "Disabled"
|
|
}
|
|
|
|
destination {
|
|
bucket = aws_s3_bucket.replica.arn
|
|
storage_class = "STANDARD"
|
|
}
|
|
}
|
|
|
|
depends_on = [
|
|
aws_s3_bucket_versioning.backups,
|
|
aws_s3_bucket_versioning.replica,
|
|
]
|
|
}
|
|
|
|
resource "aws_s3_bucket" "artifacts" {
|
|
bucket = local.artifacts_bucket_name
|
|
}
|
|
|
|
resource "aws_s3_bucket_versioning" "artifacts" {
|
|
bucket = aws_s3_bucket.artifacts.id
|
|
|
|
versioning_configuration {
|
|
status = "Enabled"
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_server_side_encryption_configuration" "artifacts" {
|
|
bucket = aws_s3_bucket.artifacts.id
|
|
|
|
rule {
|
|
apply_server_side_encryption_by_default {
|
|
sse_algorithm = "AES256"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_public_access_block" "artifacts" {
|
|
bucket = aws_s3_bucket.artifacts.id
|
|
|
|
block_public_acls = true
|
|
block_public_policy = true
|
|
ignore_public_acls = true
|
|
restrict_public_buckets = true
|
|
}
|
|
|
|
resource "aws_s3_bucket_ownership_controls" "artifacts" {
|
|
bucket = aws_s3_bucket.artifacts.id
|
|
|
|
rule {
|
|
object_ownership = "BucketOwnerEnforced"
|
|
}
|
|
}
|
|
|
|
resource "aws_s3_bucket_lifecycle_configuration" "artifacts" {
|
|
bucket = aws_s3_bucket.artifacts.id
|
|
|
|
rule {
|
|
id = "expire-noncurrent-packages"
|
|
status = "Enabled"
|
|
|
|
filter {}
|
|
|
|
noncurrent_version_expiration {
|
|
noncurrent_days = 30
|
|
}
|
|
}
|
|
|
|
depends_on = [aws_s3_bucket_versioning.artifacts]
|
|
}
|