constructor()

in core/src/data-lake-storage.ts [71:159]


  constructor(scope: Construct, id: string, props: DataLakeStorageProps) {
    super(scope, id);

    // Prepare Amazon S3 Lifecycle Rules for raw data
    const rawTransitions = [
      {
        storageClass: StorageClass.INFREQUENT_ACCESS,
        transitionAfter: Duration.days(props.rawInfrequentAccessDelay || 30),
      },
      {
        storageClass: StorageClass.GLACIER,
        transitionAfter: Duration.days(props.rawArchiveDelay || 90),
      },
    ];

    // Create the raw data bucket with the raw transitions
    this.rawBucket = new Bucket(this, 'RawBucket', {
      bucketName: 'ara-raw-' + Aws.ACCOUNT_ID,
      encryption: BucketEncryption.KMS_MANAGED,
      enforceSSL: true,
      removalPolicy: RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
      lifecycleRules: [
        {
          transitions: rawTransitions,
        },
      ],
    });

    // Prepare Amazon S3 Lifecycle Rules for clean data
    const cleanTransitions = [
      {
        storageClass: StorageClass.INFREQUENT_ACCESS,
        transitionAfter: Duration.days(props.cleanInfrequentAccessDelay || 90),
      },
    ];
    if ( props.cleanArchiveDelay ) {
      cleanTransitions.push(
        {
          storageClass: StorageClass.GLACIER,
          transitionAfter: Duration.days(props.cleanArchiveDelay),
        },
      );
    }

    // Create the clean data bucket
    this.cleanBucket = new Bucket(this, 'CleanBucket', {
      bucketName: 'ara-clean-' + Aws.ACCOUNT_ID,
      encryption: BucketEncryption.KMS_MANAGED,
      enforceSSL: true,
      removalPolicy: RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
      lifecycleRules: [
        {
          transitions: cleanTransitions,
        },
      ],
    });

    // Prepare Amazon S3 Lifecycle Rules for clean data
    const transformTransitions = [
      {
        storageClass: StorageClass.INFREQUENT_ACCESS,
        transitionAfter: Duration.days(props.transformInfrequentAccessDelay || 90),
      },
    ];
    if ( props.transformArchiveDelay ) {
      transformTransitions.push(
        {
          storageClass: StorageClass.GLACIER,
          transitionAfter: Duration.days(props.transformArchiveDelay),
        },
      );
    }

    // Create the transform data bucket
    this.transformBucket = new Bucket(this, 'TransformBucket', {
      bucketName: 'ara-transform-' + Aws.ACCOUNT_ID,
      encryption: BucketEncryption.KMS_MANAGED,
      enforceSSL: true,
      removalPolicy: RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
      lifecycleRules: [
        {
          transitions: transformTransitions,
        },
      ],
    });
  }