Files
personal_site/frontend/node_modules/@aws-amplify/backend-storage/lib/construct.js
T

86 lines
14 KiB
JavaScript
Raw Normal View History

import { Construct } from 'constructs';
import { Bucket, HttpMethods, } from 'aws-cdk-lib/aws-s3';
import { RemovalPolicy, Stack } from 'aws-cdk-lib';
import { CDKContextKey } from '@aws-amplify/platform-core';
import { AttributionMetadataStorage } from '@aws-amplify/backend-output-storage';
import { fileURLToPath } from 'node:url';
import { S3EventSourceV2 } from 'aws-cdk-lib/aws-lambda-event-sources';
// Be very careful editing this value. It is the string that is used to attribute stacks to Amplify Storage in BI metrics
const storageStackType = 'storage-S3';
/**
* Amplify Storage CDK Construct
*
* Currently just a thin wrapper around an S3 bucket
*/
export class AmplifyStorage extends Construct {
stack;
resources;
isDefault;
name;
accessDefinition;
/**
* Create a new AmplifyStorage instance
*/
constructor(scope, id, props) {
super(scope, id);
this.isDefault = props.isDefault || false;
this.name = props.name;
this.stack = Stack.of(scope);
const deploymentType = Stack.of(scope).node.tryGetContext(CDKContextKey.DEPLOYMENT_TYPE);
const isSandbox = deploymentType === 'sandbox';
const isDestroy = isSandbox || !props.keepOnDelete;
if (isSandbox && props.keepOnDelete) {
// eslint-disable-next-line no-console
console.warn(`[@aws-amplify/backend-storage] keepOnDelete is ignored in sandbox deployments. The bucket will be deleted.`);
}
const bucketProps = {
versioned: props.versioned || false,
cors: [
{
maxAge: 3000,
exposedHeaders: [
'x-amz-server-side-encryption',
'x-amz-request-id',
'x-amz-id-2',
'ETag',
],
allowedHeaders: ['*'],
allowedOrigins: ['*'],
allowedMethods: [
HttpMethods.GET,
HttpMethods.HEAD,
HttpMethods.PUT,
HttpMethods.POST,
HttpMethods.DELETE,
],
},
],
autoDeleteObjects: isDestroy,
removalPolicy: isDestroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN,
enforceSSL: true,
};
const bucket = new Bucket(this, 'Bucket', bucketProps);
this.resources = {
bucket,
cfnResources: {
cfnBucket: bucket.node.findChild('Resource'),
},
};
new AttributionMetadataStorage().storeAttributionMetadata(Stack.of(this), storageStackType, fileURLToPath(new URL('../package.json', import.meta.url)));
}
/**
* Attach a Lambda function trigger handler to the S3 events
* @param events - list of S3 events that will trigger the handler
* @param handler - The function that will handle the event
*/
addTrigger = (events, handler) => {
handler.addEventSource(new S3EventSourceV2(this.resources.bucket, { events }));
};
/**
* Add access definitions to storage
*/
addAccessDefinition = (accessOutput) => {
this.accessDefinition = accessOutput;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sV0FBVyxHQUVaLE1BQU0sb0JBQW9CLENBQUM7QUFVNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3ZFLHlIQUF5SDtBQUN6SCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQWtFdEM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxjQUNYLFNBQVEsU0FBUztJQUdSLEtBQUssQ0FBUTtJQUNiLFNBQVMsQ0FBbUI7SUFDNUIsU0FBUyxDQUFVO0lBQ25CLElBQUksQ0FBUztJQUN0QixnQkFBZ0IsQ0FBZ0M7SUFDaEQ7O09BRUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDdkQsYUFBYSxDQUFDLGVBQWUsQ0FDQSxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLGNBQWMsS0FBSyxTQUFTLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUVuRCxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEdBQTRHLENBQzdHLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQWdCO1lBQy9CLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUs7WUFDbkMsSUFBSSxFQUFFO2dCQUNKO29CQUNFLE1BQU0sRUFBRSxJQUFJO29CQUNaLGNBQWMsRUFBRTt3QkFDZCw4QkFBOEI7d0JBQzlCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixNQUFNO3FCQUNQO29CQUNELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFDckIsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDO29CQUNyQixjQUFjLEVBQUU7d0JBQ2QsV0FBVyxDQUFDLEdBQUc7d0JBQ2YsV0FBVyxDQUFDLElBQUk7d0JBQ2hCLFdBQVcsQ0FBQyxHQUFHO3dCQUNmLFdBQVcsQ0FBQyxJQUFJO3dCQUNoQixXQUFXLENBQUMsTUFBTTtxQkFDbkI7aUJBQ0Y7YUFDRjtZQUNELGlCQUFpQixFQUFFLFNBQVM7WUFDNUIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDdkUsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLE1BQU07WUFDTixZQUFZLEVBQUU7Z0JBQ1osU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBYzthQUMxRDtTQUNGLENBQUM7UUFFRixJQUFJLDBCQUEwQixFQUFFLENBQUMsd0JBQXdCLENBQ3ZELEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQ2QsZ0JBQWdCLEVBQ2hCLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzNELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsR0FBRyxDQUFDLE1BQW1CLEVBQUUsT0FBa0IsRUFBUSxFQUFFO1FBQzdELE9BQU8sQ0FBQyxjQUFjLENBQ3BCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FDdkQsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsbUJBQW1CLEdBQUcsQ0FBQyxZQUEyQyxFQUFFLEVBQUU7UUFDcEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQztJQUN2QyxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgQnVja2V0LFxuICBCdWNrZXRQcm9wcyxcbiAgQ2ZuQnVja2V0LFxuICBFdmVudFR5cGUsXG4gIEh0dHBNZXRob2RzLFxuICBJQnVja2V0LFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHtcbiAgQmFja2VuZE91dHB1dFN0b3JhZ2VTdHJhdGVneSxcbiAgQ29uc3RydWN0RmFjdG9yeSxcbiAgRGVwbG95bWVudFR5cGUsXG4gIEZ1bmN0aW9uUmVzb3VyY2VzLFxuICBSZXNvdXJjZVByb3ZpZGVyLFxuICBTdGFja1Byb3ZpZGVyLFxufSBmcm9tICdAYXdzLWFtcGxpZnkvcGx1Z2luLXR5cGVzJztcbmltcG9ydCB7IFN0b3JhZ2VPdXRwdXQgfSBmcm9tICdAYXdzLWFtcGxpZnkvYmFja2VuZC1vdXRwdXQtc2NoZW1hcyc7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENES0NvbnRleHRLZXkgfSBmcm9tICdAYXdzLWFtcGxpZnkvcGxhdGZvcm0tY29yZSc7XG5pbXBvcnQgeyBBdHRyaWJ1dGlvbk1ldGFkYXRhU3RvcmFnZSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9iYWNrZW5kLW91dHB1dC1zdG9yYWdlJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBJRnVuY3Rpb24gf