in lib/constructs/vcs/perforce.ts [25:120]
constructor(scope: cdk.Construct, id: string, props: P4PatternProps) {
super(scope, id);
const p4SecurityGroup = new ec2.SecurityGroup(this, "p4-sg", {
vpc: props.vpc,
});
props.allowAccessFrom.forEach((p) => {
p4SecurityGroup.addIngressRule(p, ec2.Port.tcp(1666));
p4SecurityGroup.addIngressRule(p, ec2.Port.tcp(1999));
});
p4SecurityGroup.addIngressRule(
Peer.ipv4(props.vpc.vpcCidrBlock),
ec2.Port.tcp(1666)
);
p4SecurityGroup.addIngressRule(
Peer.ipv4(props.vpc.vpcCidrBlock),
ec2.Port.tcp(1999)
);
const p4Role = new iam.Role(this, "p4-instance-role", {
assumedBy: new ServicePrincipal("ec2.amazonaws.com"),
});
p4Role.attachInlinePolicy(createSSMPolicy(this, props.ssmLogBucket));
const userData = ec2.UserData.custom(this.createUserData());
const instanceType = ec2.InstanceType.of(
ec2.InstanceClass.C5,
ec2.InstanceSize.XLARGE
);
const machineImage = ec2.MachineImage.latestAmazonLinux({
generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
});
const p4PrimaryInstance = new ec2.Instance(this, "p4-primary-instance", {
vpc: props.vpc,
vpcSubnets: { subnetType: props.subnetType },
securityGroup: p4SecurityGroup,
instanceType,
machineImage,
userData,
role: p4Role,
blockDevices: [
{
deviceName: "/dev/sda1",
volume: {
ebsDevice: {
volumeSize: 8,
volumeType: autoscaling.EbsDeviceVolumeType.GP3,
},
},
},
{
// for depot
deviceName: "/dev/sdb",
volume: {
ebsDevice: {
volumeSize: 500,
volumeType: autoscaling.EbsDeviceVolumeType.ST1,
deleteOnTermination: false, // for a sudden termination
},
},
},
{
// for metadata
deviceName: "/dev/sdc",
volume: {
ebsDevice: {
volumeSize: 64,
volumeType: autoscaling.EbsDeviceVolumeType.GP3,
deleteOnTermination: false, // for a sudden termination
},
},
},
{
// for logs
deviceName: "/dev/sdd",
volume: {
ebsDevice: {
volumeSize: 128,
volumeType: autoscaling.EbsDeviceVolumeType.GP3,
deleteOnTermination: false, // for a sudden termination
},
},
},
],
});
cdk.Tags.of(p4PrimaryInstance).add(
props.backup.BackupTagKey,
props.backup.BackupTagValue
);
cdk.Tags.of(p4PrimaryInstance).add("Name", "PerforcePrimary");
this.primaryInstance = p4PrimaryInstance;
}