Trong bài viết này mình xin chia sẻ cách mình tạo internet gateway trong CDK.
Khởi tạo IGW
tạo file lib/resources/internet-gateways.ts với nội dung như sau
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';
import { Resource } from './abstract';
import { Vpc } from './vpc';
export class IGW extends Resource {
public internetGateway: ec2.CfnInternetGateway;
private readonly vpc: Vpc;
private readonly projectName: string;
private readonly stageName: string;
private readonly stackname: string;
constructor(
scope: Construct,
projectName: string,
stageName: string,
stackname: string,
vpc: Vpc,
) {
super();
this.projectName = projectName;
this.stageName = stageName;
this.stackname = stackname;
this.vpc = vpc;
this.internetGateway = new ec2.CfnInternetGateway(scope, `InternetGateway`, {
tags: [
{
key: 'Name',
value: this.createTagName(
scope,
this.projectName,
this.stageName,
this.stackname,
`igw`,
),
},
],
});
new ec2.CfnVPCGatewayAttachment(scope, `VPCGatewayAttachment`, {
vpcId: this.vpc.vpc.ref,
internetGatewayId: this.internetGateway.ref,
});
}
}
mình sẽ tạo và export một class tên là IGW, trong class này có thuộc tính là:
internetGateway: ec2.CfnInternetGateway
nhằm mục đích để lúc tạo igw(internet gateway) chúng ta có thể dễ dàng truy cập vào các thuộc tính khác như id, arn của igw.
Tạo IGW
Trong file lib/hello-ckd-stack.ts bạn thêm vào như sau
import * as cdk from 'aws-cdk-lib';
import { Vpc, SN, IGW } from './resources';
import { getConfig } from '../config/build-config';
export class HelloCkdStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const config = getConfig(scope);
// VPC
const vpc = new Vpc(this, config.projectName, config.environment, `network`);
// Subnet
new SN(this, config.projectName, config.environment, `network`, vpc);
// Internet Gateway
const internetGateway = new IGW(
this,
config.projectName,
config.environment,
`network`,
vpc,
);
}
}
Github
code trong bài viết các bạn có thể tham khảo ở đây.