feat: Add deployment script
This commit is contained in:
8
deployment/.gitignore
vendored
Normal file
8
deployment/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
*.js
|
||||||
|
!jest.config.js
|
||||||
|
*.d.ts
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# CDK asset staging directory
|
||||||
|
.cdk.staging
|
||||||
|
cdk.out
|
||||||
6
deployment/.npmignore
Normal file
6
deployment/.npmignore
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
*.ts
|
||||||
|
!*.d.ts
|
||||||
|
|
||||||
|
# CDK asset staging directory
|
||||||
|
.cdk.staging
|
||||||
|
cdk.out
|
||||||
14
deployment/README.md
Normal file
14
deployment/README.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Welcome to your CDK TypeScript project
|
||||||
|
|
||||||
|
This is a blank project for CDK development with TypeScript.
|
||||||
|
|
||||||
|
The `cdk.json` file tells the CDK Toolkit how to execute your app.
|
||||||
|
|
||||||
|
## Useful commands
|
||||||
|
|
||||||
|
* `npm run build` compile typescript to js
|
||||||
|
* `npm run watch` watch for changes and compile
|
||||||
|
* `npm run test` perform the jest unit tests
|
||||||
|
* `npx cdk deploy` deploy this stack to your default AWS account/region
|
||||||
|
* `npx cdk diff` compare deployed stack with current state
|
||||||
|
* `npx cdk synth` emits the synthesized CloudFormation template
|
||||||
21
deployment/bin/deployment.ts
Normal file
21
deployment/bin/deployment.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
import 'source-map-support/register';
|
||||||
|
import * as cdk from 'aws-cdk-lib';
|
||||||
|
import { DeploymentStack } from '../lib/deployment-stack';
|
||||||
|
|
||||||
|
const app = new cdk.App();
|
||||||
|
new DeploymentStack(app, 'DeploymentStack', {
|
||||||
|
/* If you don't specify 'env', this stack will be environment-agnostic.
|
||||||
|
* Account/Region-dependent features and context lookups will not work,
|
||||||
|
* but a single synthesized template can be deployed anywhere. */
|
||||||
|
|
||||||
|
/* Uncomment the next line to specialize this stack for the AWS Account
|
||||||
|
* and Region that are implied by the current CLI configuration. */
|
||||||
|
// env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },
|
||||||
|
|
||||||
|
/* Uncomment the next line if you know exactly what Account and Region you
|
||||||
|
* want to deploy the stack to. */
|
||||||
|
// env: { account: '123456789012', region: 'us-east-1' },
|
||||||
|
|
||||||
|
/* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */
|
||||||
|
});
|
||||||
64
deployment/cdk.json
Normal file
64
deployment/cdk.json
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"app": "npx ts-node --prefer-ts-exts bin/deployment.ts",
|
||||||
|
"watch": {
|
||||||
|
"include": [
|
||||||
|
"**"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"README.md",
|
||||||
|
"cdk*.json",
|
||||||
|
"**/*.d.ts",
|
||||||
|
"**/*.js",
|
||||||
|
"tsconfig.json",
|
||||||
|
"package*.json",
|
||||||
|
"yarn.lock",
|
||||||
|
"node_modules",
|
||||||
|
"test"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
|
||||||
|
"@aws-cdk/core:checkSecretUsage": true,
|
||||||
|
"@aws-cdk/core:target-partitions": [
|
||||||
|
"aws",
|
||||||
|
"aws-cn"
|
||||||
|
],
|
||||||
|
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
|
||||||
|
"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
|
||||||
|
"@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
|
||||||
|
"@aws-cdk/aws-iam:minimizePolicies": true,
|
||||||
|
"@aws-cdk/core:validateSnapshotRemovalPolicy": true,
|
||||||
|
"@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
|
||||||
|
"@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
|
||||||
|
"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
|
||||||
|
"@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
|
||||||
|
"@aws-cdk/core:enablePartitionLiterals": true,
|
||||||
|
"@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
|
||||||
|
"@aws-cdk/aws-iam:standardizedServicePrincipals": true,
|
||||||
|
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
|
||||||
|
"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
|
||||||
|
"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
|
||||||
|
"@aws-cdk/aws-route53-patters:useCertificate": true,
|
||||||
|
"@aws-cdk/customresources:installLatestAwsSdkDefault": false,
|
||||||
|
"@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
|
||||||
|
"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
|
||||||
|
"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
|
||||||
|
"@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
|
||||||
|
"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
|
||||||
|
"@aws-cdk/aws-redshift:columnId": true,
|
||||||
|
"@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
|
||||||
|
"@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
|
||||||
|
"@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
|
||||||
|
"@aws-cdk/aws-kms:aliasNameRef": true,
|
||||||
|
"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
|
||||||
|
"@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
|
||||||
|
"@aws-cdk/aws-efs:denyAnonymousAccess": true,
|
||||||
|
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
|
||||||
|
"@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true,
|
||||||
|
"@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true,
|
||||||
|
"@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true,
|
||||||
|
"@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true,
|
||||||
|
"@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true,
|
||||||
|
"@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true
|
||||||
|
}
|
||||||
|
}
|
||||||
8
deployment/jest.config.js
Normal file
8
deployment/jest.config.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
module.exports = {
|
||||||
|
testEnvironment: 'node',
|
||||||
|
roots: ['<rootDir>/test'],
|
||||||
|
testMatch: ['**/*.test.ts'],
|
||||||
|
transform: {
|
||||||
|
'^.+\\.tsx?$': 'ts-jest'
|
||||||
|
}
|
||||||
|
};
|
||||||
33
deployment/lib/deployment-stack.ts
Normal file
33
deployment/lib/deployment-stack.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import * as cdk from 'aws-cdk-lib';
|
||||||
|
import * as s3 from 'aws-cdk-lib/aws-s3';
|
||||||
|
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
|
||||||
|
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
|
||||||
|
import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
|
||||||
|
import { Construct } from 'constructs';
|
||||||
|
import path = require('path');
|
||||||
|
|
||||||
|
export class DeploymentStack extends cdk.Stack {
|
||||||
|
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
|
||||||
|
super(scope, id, props);
|
||||||
|
|
||||||
|
const staticBucket = new s3.Bucket(this, 'StaticBucket', {
|
||||||
|
autoDeleteObjects: true,
|
||||||
|
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
||||||
|
});
|
||||||
|
|
||||||
|
const distribution = new cloudfront.Distribution(this, 'CDNServer', {
|
||||||
|
defaultBehavior: { origin: new origins.S3Origin(staticBucket) },
|
||||||
|
defaultRootObject: 'index.html'
|
||||||
|
});
|
||||||
|
|
||||||
|
new cdk.CfnOutput(this, 'URL', {
|
||||||
|
value: `https://${distribution.domainName}`
|
||||||
|
});
|
||||||
|
|
||||||
|
new s3deploy.BucketDeployment(this, 'DeployWithInvalidation', {
|
||||||
|
sources: [s3deploy.Source.asset(path.join(__dirname, '../../dist'))],
|
||||||
|
destinationBucket: staticBucket,
|
||||||
|
distribution: distribution,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
4282
deployment/package-lock.json
generated
Normal file
4282
deployment/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
27
deployment/package.json
Normal file
27
deployment/package.json
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "deployment",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"bin": {
|
||||||
|
"deployment": "bin/deployment.js"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc",
|
||||||
|
"watch": "tsc -w",
|
||||||
|
"test": "jest",
|
||||||
|
"cdk": "cdk"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/jest": "^29.5.11",
|
||||||
|
"@types/node": "20.11.5",
|
||||||
|
"jest": "^29.7.0",
|
||||||
|
"ts-jest": "^29.1.1",
|
||||||
|
"aws-cdk": "2.122.0",
|
||||||
|
"ts-node": "^10.9.2",
|
||||||
|
"typescript": "~5.3.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"aws-cdk-lib": "2.122.0",
|
||||||
|
"constructs": "^10.0.0",
|
||||||
|
"source-map-support": "^0.5.21"
|
||||||
|
}
|
||||||
|
}
|
||||||
17
deployment/test/deployment.test.ts
Normal file
17
deployment/test/deployment.test.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
// import * as cdk from 'aws-cdk-lib';
|
||||||
|
// import { Template } from 'aws-cdk-lib/assertions';
|
||||||
|
// import * as Deployment from '../lib/deployment-stack';
|
||||||
|
|
||||||
|
// example test. To run these tests, uncomment this file along with the
|
||||||
|
// example resource in lib/deployment-stack.ts
|
||||||
|
test('SQS Queue Created', () => {
|
||||||
|
// const app = new cdk.App();
|
||||||
|
// // WHEN
|
||||||
|
// const stack = new Deployment.DeploymentStack(app, 'MyTestStack');
|
||||||
|
// // THEN
|
||||||
|
// const template = Template.fromStack(stack);
|
||||||
|
|
||||||
|
// template.hasResourceProperties('AWS::SQS::Queue', {
|
||||||
|
// VisibilityTimeout: 300
|
||||||
|
// });
|
||||||
|
});
|
||||||
31
deployment/tsconfig.json
Normal file
31
deployment/tsconfig.json
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2020",
|
||||||
|
"module": "commonjs",
|
||||||
|
"lib": [
|
||||||
|
"es2020",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"declaration": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"noImplicitThis": true,
|
||||||
|
"alwaysStrict": true,
|
||||||
|
"noUnusedLocals": false,
|
||||||
|
"noUnusedParameters": false,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noFallthroughCasesInSwitch": false,
|
||||||
|
"inlineSourceMap": true,
|
||||||
|
"inlineSources": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"strictPropertyInitialization": false,
|
||||||
|
"typeRoots": [
|
||||||
|
"./node_modules/@types"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"cdk.out"
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user