おつかれさまです。ならたけぽんです。🍀
いつのまにやら、梅雨、入ってます。☔
こちらは天気痛?でふぃらふぃらですが、🐌は超元気ですね。
いつもは何も無い道の真ん中をずんずん進んでいたりするので、
毎朝踏まないか注視しながら歩いています。😵
彼らはどこに向かっているのだろうか。
実は出勤中だったりするのかな。🏙️
今回も、前回のブログの続きになります~。🐾
前々々回、
const vpc = new ec2.Vpc(this,'Vpc',{});
こんな感じに1行追加してVPCを作成したのですが、
デフォルトの値なんですよね。
VPC名とか、CIDRとか、いろいろと。
やっぱり、せっかくなんで、自分好みに設定したいですよね。😍
というわけで、以下、自分好みの設定のやり方になります。
このやり方が唯一無二というわけではないので、あくまでご参考までに。
※まだるっこしい皆様は、AWS CDK公式のこちらのリンクをご参考に。
もちろん英語です~。😱
AWS CDK リファレンス
🐥 CIDR!
例えば、
const vpc = new ec2.Vpc(this,'Vpc',{
ipAddresses: ec2.IpAddresses.cidr('192.168.0.0/16'),
vpcName: 'piyopiyopiyo'
});
「ipAddresses」プロパティに上記のような設定を行うと、
- CIDR:10.0.0.0/16
デフォルトですとこのようなVPCの「CIDR」が、
- CIDR:192.168.0.0/16
と指定した「CIDR」で設定されます!🍾
🐥 サブネットなし! NATゲートウェイなし! インターネットゲートウェイなし!
例えば、
const vpc = new ec2.Vpc(this,'Vpc',{
ipAddresses: ec2.IpAddresses.cidr('192.168.0.0/16'),
subnetConfiguration: [],
vpcName: 'piyopiyopiyo'
});
「subnetConfiguration」プロパティに上記のような空行の設定を行うと、
なんとVPCしか作成されません!🍾
サブネットもNATゲートウェイもインターネットゲートウェイも作成なし!🙈
自動生成は便利だけと、
やっぱり生成系はいろいろ自分で管理したいっしょ、というときにピッタリ!💘
※さりげなくNATゲートウェイは稼働時間でも課金されてしまうので、
何か想定以上に課金走っているな~、というときには、
原因は気づかずに生成されていたこの子だったりします。。。🙊
🐥 インターネットゲートウェイ!
例えば、
const vpc = new ec2.Vpc(this, 'Vpc', {
ipAddresses: ec2.IpAddresses.cidr('192.168.0.0/16'),
subnetConfiguration: [],
vpcName: 'piyopiyopiyo'
});
// Internet Gateway
const igw = new ec2.CfnInternetGateway(this, 'IGW', {
tags: [{
key: 'Name', value: 'piyopiyopiyo_igw'
}]
});
const igwAttach = new ec2.CfnVPCGatewayAttachment(this, 'IGWA', {
vpcId: vpc.vpcId,
internetGatewayId: igw.ref
});
上記のように「CfnInternetGateway」クラスを使用すると、
- タグ:Name / piyopiyopiyo_igw
と、指定した「Name」タグが設定されたインターネットゲートウェイが生成されます!🍾
さらに上記のように「CfnVPCGatewayAttachment」クラスを使用すると、
指定したVPCと生成したインターネットゲートウェイとを
紐づける(アタッチ)することができます!🍾
逆に言うと、
インターネットゲートウェイを手動で生成した場合は、
手動でVPCにアタッチする必要がある、ということになります。😱
このあたり、AWS管理画面でのVPC生成とかAWS CDKのVPC自動生成とかですと、
見えないところで勝手にアタッチしてくれちゃうので、初見ですと分からないんですよね。
こうしていろいろ試してみると思わぬ知見を得られたりするので、
個人的には、寄り道場万歳!だったりします。😆
知見ゲットだぜ!🐣
※もちろん守るべき期限は守った上での寄り道を推奨です。
社会人の皆様におかれましては、特に。。。⏳
🐥 サブネット!
例えば、
const vpc = new ec2.Vpc(this, 'Vpc', {
ipAddresses: ec2.IpAddresses.cidr('192.168.0.0/16'),
subnetConfiguration: [],
vpcName: 'piyopiyopiyo'
});
// Internet Gateway
const igw = new ec2.CfnInternetGateway(this, 'IGW', {
tags: [{
key: 'Name', value: 'piyopiyopiyo_igw'
}]
});
const igwAttach = new ec2.CfnVPCGatewayAttachment(this, 'IGWA', {
vpcId: vpc.vpcId,
internetGatewayId: igw.ref
});
// Subnet
const subnetPubA = new ec2.Subnet(this, 'SubnetPubA', {
vpcId: vpc.vpcId,
cidrBlock: '192.168.0.0/24',
availabilityZone: 'ap-northeast-1a',
});
cdk.Tags.of(subnetPubA).add('Name', 'piyopiyopiyo_subnet_pub_a');
subnetPubA.addDefaultInternetRoute(igw.ref, igwAttach);
上記のように「Subnet」クラスを使用すると、
- VPC:指定したVPC
- CIDR:192.168.0.0./24
- AvailabilityZone:ap-northeast-1a (東京リージョン)
- タグ:Name / piyopiyopiyo_subnet_pub_a
と、指定した「VPC」に指定した情報が設定されたサブネットが生成されます!🍾
ちなみに、
- subnetPubA.addDefaultInternetRoute(igw.ref, igwAttach);
この行を設定すると、作成したサブネットのルートテーブルに、
- 送信先:0.0.0.0/0
- ターゲット:[設定したインターネットゲートウェイ]
とルーティングが付与されます。
要はパブリックなサブネットになります。
逆に設定しないと、プライベートなサブネットになります。
このあたりも、初見ですと分からない箇所ですね。
パブリックなサブネットを生成したつもりがインターネットに出れなかったりします。
知見ゲットだぜ!🐣
🐥 NATゲートウェイ!
例えば、
const vpc = new ec2.Vpc(this, 'Vpc', {
ipAddresses: ec2.IpAddresses.cidr('192.168.0.0/16'),
subnetConfiguration: [],
vpcName: 'piyopiyopiyo'
});
// Internet Gateway
const igw = new ec2.CfnInternetGateway(this, 'IGW', {
tags: [{
key: 'Name', value: 'piyopiyopiyo_igw'
}]
});
const igwAttach = new ec2.CfnVPCGatewayAttachment(this, 'IGWA', {
vpcId: vpc.vpcId,
internetGatewayId: igw.ref
});
// Subnet
const subnetPubA = new ec2.Subnet(this, 'SubnetPubA', {
vpcId: vpc.vpcId,
cidrBlock: '192.168.0.0/24',
availabilityZone: 'ap-northeast-1a',
});
cdk.Tags.of(subnetPubA).add('Name', 'piyopiyopiyo_subnet_pub_a');
subnetPubA.addDefaultInternetRoute(igw.ref, igwAttach);
// NAT Gateway
const eipNGWA = new ec2.CfnEIP(this, 'EIP_NGWA', {});
cdk.Tags.of(eipNGWA).add('Name', 'piyopiyopiyo_eip_ngw_a');
const ngwA = new ec2.CfnNatGateway(this, 'NGWA', {
allocationId: eipNGWA.attrAllocationId,
subnetId: subnetPubA.subnetId,
tags: [{
key: 'Name', value: 'piyopiyopiyo_ngw_a'
}]
});
cdk.Tags.of(ngwA).add('Name', 'piyopiyopiyo_ngw_a');
上記のように「CnfEIP」クラスを使用してElasticIPを生成した後、
「CfnNatGateway」クラスを使用すると、
- サブネット:設定したパブリックサブネット
- ElasticIPアドレス:設定したElasticIPアドレス
- タグ:Name / piyopiyopiyo_ngw_a
と、指定した情報が設定されたNATゲートウェイが生成されます!🍾
先にElasticIPを生成して、
NATゲートウェイ生成時にそのElasticIPアドレスを設定するのがミソです!🐣
※逆にElasticIPアドレスを設定しないと、
「The request must include the AllocationId parameter.
Add the required parameter and retry the request.」
なんてエラーが出ます。
こんな感じで、VPCをどんどん自分好みにしていくぜっ!、の回でした。🐣
エンドポイントとかTransitゲートウェイとか、いろいろと応用効きますので、
ぜひ、お試しください。🐬
次の回を書くときは、多分、暑いんだろうな。。。🔥🌞🔥
それでは、良き良き、AWS CDKライフを!!!🌈