in source/patterns/@aws-solutions-constructs/core/lib/s3-bucket-helper.ts [99:145]
export function buildS3Bucket(scope: Construct,
props: BuildS3BucketProps,
bucketId?: string): [s3.Bucket, s3.Bucket?] {
/** Default Life Cycle policy to transition older versions to Glacier after 90 days */
const lifecycleRules: s3.LifecycleRule[] = [{
noncurrentVersionTransitions: [{
storageClass: StorageClass.GLACIER,
transitionAfter: Duration.days(90)
}]
}];
// Create the Application Bucket
let customBucketProps: s3.BucketProps;
let loggingBucket;
const _bucketId = bucketId ? bucketId + 'S3Bucket' : 'S3Bucket';
const _loggingBucketId = bucketId ? bucketId + 'S3LoggingBucket' : 'S3LoggingBucket';
// If logging S3 access logs is enabled/undefined and an existing bucket object is not provided
if (props.logS3AccessLogs !== false && !(props.bucketProps?.serverAccessLogsBucket)) {
// Create the Logging Bucket
let loggingBucketProps = DefaultS3Props();
if (props.loggingBucketProps) {
// User provided logging bucket props
loggingBucketProps = overrideProps(loggingBucketProps, props.loggingBucketProps);
} else if (props.bucketProps?.removalPolicy) {
// If the client explicitly specified a removal policy for the main bucket,
// then replicate that policy on the logging bucket
loggingBucketProps = overrideProps(loggingBucketProps, { removalPolicy: props.bucketProps.removalPolicy });
}
loggingBucket = createLoggingBucket(scope, _loggingBucketId, loggingBucketProps);
}
// Attach the Default Life Cycle policy ONLY IF the versioning is ENABLED
if (props.bucketProps?.versioned === undefined || props.bucketProps.versioned) {
customBucketProps = DefaultS3Props(loggingBucket, lifecycleRules);
} else {
customBucketProps = DefaultS3Props(loggingBucket);
}
customBucketProps = props.bucketProps ? overrideProps(customBucketProps, props.bucketProps) : customBucketProps;
const s3Bucket: s3.Bucket = new s3.Bucket(scope, _bucketId, customBucketProps );
return [s3Bucket, loggingBucket];
}