CDKに慣れるために
前の記事でLambdaの構築を行うことができたので今度はS3,VPC,EC2などを立ち上げていきます。
EC2の構築にはVPC周辺の設定が必須なので勉強になりそうです。
コーディング
構築したいリソースについて記載方法を調べていきます。
今回はVPCに2つのAZを作成し、それぞれのAZにパブリック、プライベートサブネットを設置します。
セキュリティグループの設定がされたEC2をパブリックに配置し、データ保存の為のS3を作成して基本的なサーバ構成を構築していきます。
EC2はプライベートサブネットに置いた方が安全ですが、外部からアクセスする設定について少し知識が必要なので次回挑戦します。
(パブリックに置いた踏み台サーバを使ったり、AWS Direct Connectなどを使ってアクセスできるようにするようです。)
VPC
ネットワーク環境です。
可用性の為アベイラビリティゾーンを2つ用意します。この中にパブリック、プライベート2つのサブネットを作成します。
パブリックサブネット:SubnetType.PUBLIC
プライベートサブネット:SubnetType.PRIVATE_WITH_EGRESS
パブリックはどこからでもアクセスできる設定、
プライベートはNATを介してインターネットに出れるよう設定します。
セキュリティグループ
リソースへのアクセス制御の為のファイヤーウォールの設定です。
allowAllOutbound:true
インスタンスから出ていくネットワークを許可します
addIngressRule
個の設定でインスタンスへのTCP接続を許可します。
EC2
サーバの設定です。vpc,インスタンスタイプ、マシーンイメージ、セキュリティグループ、vpcサブネットを設定します。
S3
versioned:true
で変更履歴を保持するようにしています。
lib/○○.ts
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyArchitectureStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// VPCの作成
const vpc = new ec2.Vpc(this, 'MyVpc', {
maxAzs: 2, // アベイラビリティゾーンを2つ使用
subnetConfiguration: [
{
name: 'PublicSubnet',
subnetType: ec2.SubnetType.PUBLIC,
},
{
name: 'PrivateSubnet',
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
}
]
});
// セキュリティグループの作成
const securityGroup = new ec2.SecurityGroup(this, 'MySecurityGroup', {
vpc,
allowAllOutbound: true,
});
securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), 'Allow SSH access');
// EC2インスタンスの作成
const instance = new ec2.Instance(this, 'MyInstance', {
vpc,
instanceType: new ec2.InstanceType('t2.micro'),
machineImage: ec2.MachineImage.latestAmazonLinux2(),
securityGroup,
vpcSubnets: {
subnetType: ec2.SubnetType.PUBLIC
},
});
// S3バケットの作成
const bucket = new s3.Bucket(this, 'MyBucket', {
versioned: true,
});
}
}
デプロイ
デプロイします。
cdk deploy
気を付けること
S3のバケット名は重複が禁止されているので、唯一無二な名前を付けるようにしてください。
重複しているとエラーが発生して、そのほかのリソースの構築ができないことがあります。
こんなにたくさんリソースを構築してもかかる時間は一瞬です。
すごいですね。