UNPKG

cdk-efs-assets

Version:

Amazon EFS assets from Github repositories or S3 buckets

119 lines 13.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NyanCatDemo = exports.IntegTesting = void 0; const aws_cdk_lib_1 = require("aws-cdk-lib"); const ec2 = require("aws-cdk-lib/aws-ec2"); const efs = require("aws-cdk-lib/aws-efs"); const aws_s3_1 = require("aws-cdk-lib/aws-s3"); const stateful_fargate_1 = require("./stateful-fargate"); const synced_access_point_1 = require("./synced-access-point"); class IntegTesting { constructor() { const app = new aws_cdk_lib_1.App(); const env = { region: process.env.CDK_DEFAULT_REGION, account: process.env.CDK_DEFAULT_ACCOUNT, }; const stack = new aws_cdk_lib_1.Stack(app, 'testing-stack', { env }); const vpc = getOrCreateVpc(stack); const fs = new efs.FileSystem(stack, 'Filesystem', { vpc, removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY, }); const bucketName = stack.node.tryGetContext('BUCKET_NAME') || 'mock'; const bucket = aws_s3_1.Bucket.fromBucketName(stack, 'ImportedBucket', bucketName); // checkout the public github repo to efs filesystem new synced_access_point_1.SyncedAccessPoint(stack, 'GithubSyncedAccessPoint', { vpc, fileSystem: fs, path: '/demo-github', createAcl: { ownerGid: '1001', ownerUid: '1001', permissions: '0755', }, posixUser: { uid: '1001', gid: '1001', }, syncSource: new synced_access_point_1.GithubSyncSource({ vpc, repository: 'https://github.com/pahud/cdk-efs-assets.git', }), }); // checkout the private github repo to efs filesystem new synced_access_point_1.SyncedAccessPoint(stack, 'GithubSyncedAccessPointPrivate', { vpc, fileSystem: fs, path: '/demo-github-private', createAcl: { ownerGid: '1001', ownerUid: '1001', permissions: '0755', }, posixUser: { uid: '1001', gid: '1001', }, syncSource: new synced_access_point_1.GithubSyncSource({ vpc, repository: 'https://github.com/pahud/private-repo.git', secret: { id: 'github', key: 'oauth_token', }, }), }); new synced_access_point_1.SyncedAccessPoint(stack, 'S3SyncedAccessPoint', { vpc, fileSystem: fs, path: '/demo-s3-archive', createAcl: { ownerGid: '1001', ownerUid: '1001', permissions: '0755', }, posixUser: { uid: '1001', gid: '1001', }, syncSource: new synced_access_point_1.S3ArchiveSyncSource({ vpc, bucket, zipFilePath: 'folder/foo.zip', }), }); this.stack = [stack]; } } exports.IntegTesting = IntegTesting; class NyanCatDemo { constructor() { const app = new aws_cdk_lib_1.App(); const env = { region: process.env.CDK_DEFAULT_REGION, account: process.env.CDK_DEFAULT_ACCOUNT, }; const stack = new aws_cdk_lib_1.Stack(app, 'testing-stack', { env }); const vpc = getOrCreateVpc(stack); new stateful_fargate_1.StatefulFargateNginx(stack, 'NyanCat', { vpc, github: 'https://github.com/cristurm/nyan-cat.git', }); this.stack = [stack]; } } exports.NyanCatDemo = NyanCatDemo; // run the integ testing new IntegTesting(); // run Nyan Cat demo // new NyanCatDemo(); function getOrCreateVpc(scope) { // use an existing vpc or create a new one return scope.node.tryGetContext('use_default_vpc') === '1' ? ec2.Vpc.fromLookup(scope, 'Vpc', { isDefault: true }) : scope.node.tryGetContext('use_vpc_id') ? ec2.Vpc.fromLookup(scope, 'Vpc', { vpcId: scope.node.tryGetContext('use_vpc_id') }) : new ec2.Vpc(scope, 'Vpc', { maxAzs: 3, natGateways: 1 }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3RDtBQUN4RCwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLCtDQUE0QztBQUU1Qyx5REFBMEQ7QUFDMUQsK0RBQWlHO0FBRWpHLE1BQWEsWUFBWTtJQUd2QjtRQUNFLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQUcsRUFBRSxDQUFDO1FBRXRCLE1BQU0sR0FBRyxHQUFHO1lBQ1YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCO1lBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtTQUN6QyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXZELE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUNqRCxHQUFHO1lBQ0gsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztTQUNyQyxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDckUsTUFBTSxNQUFNLEdBQUcsZUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUUsb0RBQW9EO1FBQ3BELElBQUksdUNBQWlCLENBQUMsS0FBSyxFQUFFLHlCQUF5QixFQUFFO1lBQ3RELEdBQUc7WUFDSCxVQUFVLEVBQUUsRUFBRTtZQUNkLElBQUksRUFBRSxjQUFjO1lBQ3BCLFNBQVMs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RSxDQUFDLENBQUMsQ0FBQztRQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckYsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFN0YWNrLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgZWZzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lZnMnO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgU3RhdGVmdWxGYXJnYXRlTmdpbnggfSBmcm9tICcuL3N0YXRlZnVsLWZhcmdhdGUnO1xuaW1wb3J0IHsgU3luY2VkQWNjZXNzUG9pbnQsIEdpdGh1YlN5bmNTb3VyY2UsIFMzQXJjaGl2ZVN5bmNTb3VyY2UgfSBmcm9tICcuL3N5bmNlZC1hY2Nlc3MtcG9pbnQnO1xuXG5leHBvcnQgY2xhc3MgSW50ZWdUZXN0aW5nIHtcbiAgcmVhZG9ubHkgc3RhY2s6IFN0YWNrW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuXG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgcmVnaW9uOiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT04sXG4gICAgICBhY2NvdW50OiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5ULFxuICAgIH07XG5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICd0ZXN0aW5nLXN0YWNrJywgeyBlbnYgfSk7XG5cbiAgICBjb25zdCB2cGMgPSBnZXRPckNyZWF0ZVZwYyhzdGFjayk7XG5cbiAgICBjb25zdCBmcyA9IG5ldyBlZnMuRmlsZVN5c3RlbShzdGFjaywgJ0ZpbGVzeXN0ZW0nLCB7XG4gICAgICB2cGMsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICBjb25zdCBidWNrZXROYW1lID0gc3RhY2subm9kZS50cnlHZXRDb250ZXh0KCdCVUNLRVRfTkFNRScpIHx8ICdtb2NrJztcbiAgICBjb25zdCBidWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoc3RhY2ssICdJbXBvcnRlZEJ1Y2tldCcsIGJ1Y2tldE5hbWUpO1xuXG4gICAgLy8gY2hlY2tvdXQgdGhlIHB1YmxpYyBnaXRodWIgcmVwbyB0byBlZnMgZmlsZXN5c3RlbVxuICAgIG5ldyBTeW5jZWRBY2Nlc3NQb2ludChzdGFjaywgJ0dpdGh1YlN5bmNlZEFjY2Vzc1BvaW50Jywge1xuICAgICAgdnBjLFxuICAgICAgZmlsZVN5c3RlbTogZnMsXG4gICAgICBwYXRoOiAnL2RlbW8tZ2l0aHViJyxcbiAgICAgIGNyZWF0ZUFjbDoge1xuICAgICAgICBvd25lckdpZDogJzEwMDEnLFxuICAgICAgICBvd25lclVpZDogJzEwMDEnLFxuICAgICAgICBwZXJtaXNzaW9uczogJzA3NTUnLFxuICAgICAgfSxcbiAgICAgIHBvc2l4VXNlcjoge1xuICAgICAgICB1aWQ6ICcxMDAxJyxcbiAgICAgICAgZ2lkOiAnMTAwMScsXG4gICAgICB9LFxuICAgICAgc3luY1NvdXJjZTogbmV3IEdpdGh1YlN5bmNTb3VyY2Uoe1xuICAgICAgICB2cGMsXG4gICAgICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vcGFodWQvY2RrLWVmcy1hc3NldHMuZ2l0JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gY2hlY2tvdXQgdGhlIHByaXZhdGUgZ2l0aHViIHJlcG8gdG8gZWZzIGZpbGVzeXN0ZW1cbiAgICBuZXcgU3luY2VkQWNjZXNzUG9pbnQoc3RhY2ssICdHaXRodWJTeW5jZWRBY2Nlc3NQb2ludFByaXZhdGUnLCB7XG4gICAgICB2cGMsXG4gICAgICBmaWxlU3lzdGVtOiBmcyxcbiAgICAgIHBhdGg6ICcvZGVtby1naXRodWItcHJpdmF0ZScsXG4gICAgICBjcmVhdGVBY2w6IHtcbiAgICAgICAgb3duZXJHaWQ6ICcxMDAxJyxcbiAgICAgICAgb3duZXJVaWQ6ICcxMDAxJyxcbiAgICAgICAgcGVybWlzc2lvbnM6ICcwNzU1JyxcbiAgICAgIH0sXG4gICAgICBwb3NpeFVzZXI6IHtcbiAgICAgICAgdWlkOiAnMTAwMScsXG4gICAgICAgIGdpZDogJzEwMDEnLFxuICAgICAgfSxcbiAgICAgIHN5bmNTb3VyY2U6IG5ldyBHaXRodWJTeW5jU291cmNlKHtcbiAgICAgICAgdnBjLFxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL3BhaHVkL3ByaXZhdGUtcmVwby5naXQnLFxuICAgICAgICBzZWNyZXQ6IHtcbiAgICAgICAgICBpZDogJ2dpdGh1YicsXG4gICAgICAgICAga2V5OiAnb2F1dGhfdG9rZW4nLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBuZXcgU3luY2VkQWNjZXNzUG9pbnQoc3RhY2ssICdTM1N5bmNlZEFjY2Vzc1BvaW50Jywge1xuICAgICAgdnBjLFxuICAgICAgZmlsZVN5c3RlbTogZnMsXG4gICAgICBwYXRoOiAnL2RlbW8tczMtYXJjaGl2ZScsXG4gICAgICBjcmVhdGVBY2w6IHtcbiAgICAgICAgb3duZXJHaWQ6ICcxMDAxJyxcbiAgICAgICAgb3duZXJVaWQ6ICcxMDAxJyxcbiAgICAgICAgcGVybWlzc2lvbnM6ICcwNzU1JyxcbiAgICAgIH0sXG4gICAgICBwb3NpeFVzZXI6IHtcbiAgICAgICAgdWlkOiAnMTAwMScsXG4gICAgICAgIGdpZDogJzEwMDEnLFxuICAgICAgfSxcbiAgICAgIHN5bmNTb3VyY2U6IG5ldyBTM0FyY2hpdmVTeW5jU291cmNlKHtcbiAgICAgICAgdnBjLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIHppcEZpbGVQYXRoOiAnZm9sZGVyL2Zvby56aXAnLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YWNrID0gW3N0YWNrXTtcbiAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBOeWFuQ2F0RGVtbyB7XG4gIHJlYWRvbmx5IHN0YWNrOiBTdGFja1tdO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICByZWdpb246IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTixcbiAgICAgIGFjY291bnQ6IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQsXG4gICAgfTtcblxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ3Rlc3Rpbmctc3RhY2snLCB7IGVudiB9KTtcblxuICAgIGNvbnN0IHZwYyA9IGdldE9yQ3JlYXRlVnBjKHN0YWNrKTtcblxuICAgIG5ldyBTdGF0ZWZ1bEZhcmdhdGVOZ2lueChzdGFjaywgJ055YW5DYXQnLCB7XG4gICAgICB2cGMsXG4gICAgICBnaXRodWI6ICdodHRwczovL2dpdGh1Yi5jb20vY3Jpc3R1cm0vbnlhbi1jYXQuZ2l0JyxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhY2sgPSBbc3RhY2tdO1xuICB9XG59XG5cbi8vIHJ1biB0aGUgaW50ZWcgdGVzdGluZ1xubmV3IEludGVnVGVzdGluZygpO1xuXG4vLyBydW4gTnlhbiBDYXQgZGVtb1xuLy8gbmV3IE55YW5DYXREZW1vKCk7XG5cblxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVWcGMoc2NvcGU6IENvbnN0cnVjdCk6IGVjMi5JVnBjIHtcbiAgLy8gdXNlIGFuIGV4aXN0aW5nIHZwYyBvciBjcmVhdGUgYSBuZXcgb25lXG4gIHJldHVybiBzY29wZS5ub2RlLnRyeUdldENvbnRleHQoJ3VzZV9kZWZhdWx0X3ZwYycpID09PSAnMScgP1xuICAgIGVjMi5WcGMuZnJvbUxvb2t1cChzY29wZSwgJ1ZwYycsIHsgaXNEZWZhdWx0OiB0cnVlIH0pIDpcbiAgICBzY29wZS5ub2RlLnRyeUdldENvbnRleHQoJ3VzZV92cGNfaWQnKSA/XG4gICAgICBlYzIuVnBjLmZyb21Mb29rdXAoc2NvcGUsICdWcGMnLCB7IHZwY0lkOiBzY29wZS5ub2RlLnRyeUdldENvbnRleHQoJ3VzZV92cGNfaWQnKSB9KSA6XG4gICAgICBuZXcgZWMyLlZwYyhzY29wZSwgJ1ZwYycsIHsgbWF4QXpzOiAzLCBuYXRHYXRld2F5czogMSB9KTtcbn1cbiJdfQ==