こんにちは!!こんにちは!!インフラエンジニアのyamamotoです。
今日もAWS CDKでクラウドインフラを構築するよー!!
今回はCDKでALBを作ってみました。
コードはこちら!!
※当ブログのコードはTypeScriptで記載しています。
import { Construct, Duration, Stack } from '@aws-cdk/core'; import { Peer, Port, SecurityGroup, Vpc, } from '@aws-cdk/aws-ec2'; import { ApplicationLoadBalancer, ApplicationProtocol, ApplicationTargetGroup, } from '@aws-cdk/aws-elasticloadbalancingv2'; const env = { region: process.env.CDK_INTEG_REGION || process.env.CDK_DEFAULT_REGION, account: process.env.CDK_INTEG_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT, }; /** * ALBを作るスタック */ export default class AlbStack extends Stack { constructor(scope: Construct, id: string) { super(scope, id, { env }); // 既存のVPCを調べる const vpc = Vpc.fromLookup(this, 'vpc', { vpcName: 'vpc' }); // 自動生成されるセキュリティグループには問題があるため // セキュリティグループを作成する const albSecurityGroup = new SecurityGroup(this, 'albSecurityGroup', { allowAllOutbound: true, securityGroupName: 'alb-sg', vpc, }); albSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(80)); albSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(443)); // ALBを作成する const alb = new ApplicationLoadBalancer(this, 'alb', { internetFacing: true, loadBalancerName: 'alb', securityGroup: albSecurityGroup, vpc, vpcSubnets: { subnets: vpc.publicSubnets }, }); // ALBのターゲットグループを作成する const targetGroup = new ApplicationTargetGroup(this, 'targetGroup', { healthCheck: { healthyHttpCodes: '200', healthyThresholdCount: 2, interval: Duration.seconds(30), path: '/', timeout: Duration.seconds(5), unhealthyThresholdCount: 2, }, port: 80, protocol: ApplicationProtocol.HTTP, targetGroupName: 'alb-tg', vpc, }); // ALBのリスナーを作成する alb.addListener('Listener80', { defaultTargetGroups: [targetGroup], open: true, port: 80, }); alb.addListener('Listener443', { certificateArns: ['certificate-arn'], defaultTargetGroups: [targetGroup], open: true, port: 443, }); } }
ALBを作成するとき、特に指定しないとセキュリティグループを自動的に作ってくれるのですが、これが残念ながらうまく動きませんでした。
そのためこちらであらかじめ用意しています。
また、AWS CDKのリファレンスには、AutoScalingGroupからALBを作るケースが載っていますが、諸事情によりここではALBのTargetGroupを作っています。
ただ、AutoScalingGroupとのアタッチはしていないので、そこは手作業なり他のスクリプトでやる必要があります。
こういう事例がいっぱいあると、CDKももっと書きやすくて身近になっていくんじゃないかと思っています!
CloudFormationのYAMLやJSONより簡単に書けますよー、TerraFormと比べると……どうだろう?
さいごに
アクトインディではインフラエンジニアを募集しています!
クラウドやりたいクラウドエンジニアはぜひ!
actindi.net