export function buildS3Bucket()

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];
}