2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CDKでS3,VPC,EC2等を構築する

Last updated at Posted at 2024-10-25

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のバケット名は重複が禁止されているので、唯一無二な名前を付けるようにしてください。
重複しているとエラーが発生して、そのほかのリソースの構築ができないことがあります。

こんなにたくさんリソースを構築してもかかる時間は一瞬です。
すごいですね。

Screenshot 2024-10-25 142111.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?