同じ構成をコードで書くと(第18章の予告)
ここまでの手順を画面で1つずつやると、慣れても1〜2時間はかかります。しかも、同じものをもう1つ作る(開発用と本番用など)ときに、同じ手順を間違えずに繰り返すのは大変です。
第18章で学ぶ IaC(構成をコードにする)を使うと、この章の構成の骨組みは、図のような数十行で書けます。AWS CDK(TypeScript)の例です。
tsconst vpc = new ec2.Vpc(this, "Vpc", {
ipAddresses: ec2.IpAddresses.cidr("10.0.0.0/16"),
maxAzs: 2, natGateways: 2,
subnetConfiguration: [
{ name: "public", subnetType: ec2.SubnetType.PUBLIC, cidrMask: 24 },
{ name: "app", subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS, cidrMask: 24 },
{ name: "db", subnetType: ec2.SubnetType.PRIVATE_ISOLATED, cidrMask: 24 },
],
});
const db = new rds.DatabaseInstance(this, "Db", {
engine: rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_16 }),
vpc, vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED }, multiAz: true,
});
const asg = new autoscaling.AutoScalingGroup(this, "Web", {
vpc, instanceType: new ec2.InstanceType("t4g.small"),
machineImage: ec2.MachineImage.latestAmazonLinux2023({ cpuType: ec2.AmazonLinuxCpuType.ARM_64 }),
minCapacity: 2, maxCapacity: 6,
});
asg.scaleOnCpuUtilization("Cpu", { targetUtilizationPercent: 50 });
db.connections.allowDefaultPortFrom(asg);
const alb = new elbv2.ApplicationLoadBalancer(this, "Alb", { vpc, internetFacing: true });
alb.addListener("Https", { port: 443, certificates: [cert] })
.addTargets("Web", { port: 80, targets: [asg], healthCheck: { path: "/health" } });
alb.addRedirect();
subnetConfiguration の3行が6つのサブネットに、natGateways: 2 が AZ ごとの NAT に、allowDefaultPortFrom が SG の鎖になっています。この章で1つずつ理由を知った部品が、1行ずつに対応しているのがわかるはずです。
まずは画面で作って仕組みを体で覚え、それからコードにする。これがいちばんの近道です。