Cấu trúc thư mục dự án
Ở CDK cũng có cấu trúc giống như Cloudformation, để tránh một sack của CDK trở nên quá dài khi có quá nhiều resources, mình sẽ tách resource thành nhiều file khác nhau, lưu ý nếu dùng nested stack cũng được nhé, mình sẽ giới thiệu ở bài viết sau.
cấu trúc thư mục dự án.
.
├── lib
│ ├── hello-ckd-stack.ts
│ └── resources
│ └── vpc.ts
mình sẽ tạo thêm một thư mục resources bên trong lib, sau đó mỗi khi mình thêm môt resource mới vào thì mình sẽ tạo một file mới ở đây.
file vpc.ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';
export class Vpc {
public vpc: ec2.CfnVPC;
private readonly VpcCidr: string;
constructor( VpcCidr: string ) {
this.VpcCidr = VpcCidr;
}
public createResources(scope: Construct) {
this.vpc = new ec2.CfnVPC(scope, `VPC`, {
cidrBlock: this.VpcCidr,
enableDnsSupport: true,
enableDnsHostnames: true,
instanceTenancy: `default`,
tags: [
{
key: `Name`,
value: [`quannhm`, `vpc`].join('-'),
},
],
});
}
}
mình sẽ khởi tạo một class vpc sau sau đó sẽ dùng một file index để upstream class này lên cấp thư mục. (mình nói sai thì các bạn góp ý cho mình ở phần bình luận nhé)
index.ts
import { Vpc } from './vpc';
export { Vpc };
trong file hello-ckd-stack.ts mình sẽ call class vpc như sau.
import * as cdk from 'aws-cdk-lib';
import { Vpc } from './resources';
export class HelloCkdStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const VpcCidr: string = `10.90.16.0/22`;
// VPC
const vpc = new Vpc(
VpcCidr,
);
vpc.createResources(this);
}
}
bạn chạy cdk synth để kiểm tra.
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.90.16.0/22
EnableDnsHostnames: true
EnableDnsSupport: true
InstanceTenancy: default
Tags:
- Key: Name
Value: quannhm-vpc
Github
code trong bài viết mình để ở đây.
Tổng kết
trong bài viết này mình đã chia sẽ cách tạo vpc với constructor L1 và cách tổ chức resources trong project. Với constructor L1 mình có thể tùy chỉnh được sâu hơn thay vì để cho CDK quyết định.
Trong bài sau mình sẽ hướng dẫn cách tạo subnet và tổ chức parameter.