import * as cdk from "aws-cdk-lib"; import * as s3 from "aws-cdk-lib/aws-s3"; import { Construct } from "constructs"; export class ForgejoReplicaStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, "ReplicaBucket", { bucketName: "forgejo-backups-replica-328440206208", encryption: s3.BucketEncryption.S3_MANAGED, blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, versioned: true, objectLockEnabled: true, objectLockDefaultRetention: s3.ObjectLockRetention.governance( cdk.Duration.days(90) ), lifecycleRules: [ { id: "archive-to-glacier", prefix: "archive/", transitions: [ { storageClass: s3.StorageClass.GLACIER, transitionAfter: cdk.Duration.days(30), }, ], }, { id: "mirror-to-glacier-then-expire", prefix: "mirror/", transitions: [ { storageClass: s3.StorageClass.GLACIER, transitionAfter: cdk.Duration.days(30), }, ], expiration: cdk.Duration.days(365), }, { id: "cleanup-noncurrent-versions", noncurrentVersionExpiration: cdk.Duration.days(90), }, ], removalPolicy: cdk.RemovalPolicy.RETAIN, }); } }