はじめに
新しく作ったVPC上にCloud9を作ろうとしたらうまく動かなかったので、Cloud9が動くVPC環境を作る方法を簡単にまとめました。
概要
前提として、接続方法はAWS Systems Manager (SSM)になります。
- パブリックサブネットで動かす
- サブネットのIPアドレス自動割り当てをONにする必要あり
- プライベートサブネットで動かす
- パブリックサブネットも必要
- NATゲートウェイが必要
参考
パブリックサブネットで動かす
コンソールから作成
VPC作成の画面から、以下のように設定し作成します。たくさんリソースを作るとわかりずらくなるので、サブネットは1つにしています。
作成後、サブネットのIPアドレス自動割り当てをONにする必要があります。
削除する
コンソールからVPCを削除するだけで、関連するリソースは全部削除されます。
CloudFormationから作成
以下のコードになります。ほぼChatGPTが生成してくれました、便利。
クリックで表示
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
VpcName:
Type: String
Default: forcloud9
Description: Name of the VPC
VpcCIDR:
Type: String
Default: 10.50.0.0/16
Description: CIDR block for the VPC
Resources:
VPC:
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock: !Ref VpcCIDR
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Ref VpcName
InternetGateway:
Type: 'AWS::EC2::InternetGateway'
Properties:
Tags:
- Key: Name
Value: !Sub ${VpcName}-igw
VPCGatewayAttachment:
Type: 'AWS::EC2::VPCGatewayAttachment'
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
PublicSubnet:
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref VPC
CidrBlock: !Select [ 0, !Cidr [ !Ref VpcCIDR, 24, 8 ] ]
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: !Sub ${VpcName}-subnet-public1
PublicRouteTable:
Type: 'AWS::EC2::RouteTable'
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${VpcName}-rtb-public
PublicRoute:
Type: 'AWS::EC2::Route'
DependsOn: VPCGatewayAttachment
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: '0.0.0.0/0'
GatewayId: !Ref InternetGateway
SubnetRouteTableAssociation:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
SubnetId: !Ref PublicSubnet
RouteTableId: !Ref PublicRouteTable
削除する
スタックを削除すると、すべて削除されます。
プライベートサブネットで動かす
公式に以下の記述ありますので、NATゲートウェイを作る必要があります。
プライベートサブネットを使用している場合は、パブリックサブネットで NAT ゲートウェイをホストして、サブネットのインスタンスによるインターネットとの通信を許可します。
コンソールから作成
コンソールで、以下のように設定します。わかりやすくパブリック・プライベートサブネットは1つずつにします。
作成後は、サブネットのIPアドレス自動割り当てをONにする必要はないです。(パブリックサブネットで起動する場合は、自動割り当てをONにしてください。)
削除する
削除するときは、NATゲートウェイを先に削除する必要があります。
またVPCを削除しても、NATゲートウェイに割り付けられたEIPは削除されませんので、別途削除する必要があります。
ClooudFormationから作成
以下のコードになります。パブリックサブネットのIPアドレス自動割り当てはOFFにしています。
クリックで表示
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
VpcName:
Type: String
Default: for-private-bycfn
Description: Name of the VPC
VpcCIDR:
Type: String
Default: 10.50.0.0/16
Description: CIDR block for the VPC
Resources:
VPC:
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock: !Ref VpcCIDR
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Ref VpcName
InternetGateway:
Type: 'AWS::EC2::InternetGateway'
Properties:
Tags:
- Key: Name
Value: !Sub ${VpcName}-igw
VPCGatewayAttachment:
Type: 'AWS::EC2::VPCGatewayAttachment'
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
PublicSubnet:
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref VPC
CidrBlock: !Select [ 0, !Cidr [ !Ref VpcCIDR, 24, 8 ] ]
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value: !Sub ${VpcName}-subnet-public1
PublicRouteTable:
Type: 'AWS::EC2::RouteTable'
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${VpcName}-rtb-public
PublicRoute:
Type: 'AWS::EC2::Route'
DependsOn: VPCGatewayAttachment
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: '0.0.0.0/0'
GatewayId: !Ref InternetGateway
SubnetRouteTableAssociation:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
SubnetId: !Ref PublicSubnet
RouteTableId: !Ref PublicRouteTable
##################################################
# Private Subnet
##################################################
PrivateSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: !Select [ 1, !Cidr [ !Ref VpcCIDR, 24, 8 ] ]
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value: !Sub ${VpcName}-subnet-private1
PrivateRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${VpcName}-rtb-private
PrivateRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PrivateRouteTable
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId: !Ref NatGateway
NatGateway:
Type: AWS::EC2::NatGateway
Properties:
AllocationId: !GetAtt NatGatewayEIP.AllocationId
SubnetId: !Ref PublicSubnet
Tags:
- Key: Name
Value: !Sub ${VpcName}-nat-public1
NatGatewayEIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
Tags:
- Key: Name
Value: !Sub ${VpcName}-nat-eip
PrivateSubnetRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref PrivateRouteTable
SubnetId: !Ref PrivateSubnet
削除する
スタックを削除すると、すべて削除されます。コンソールの場合とは異なり、NATゲートウェイやEIPも一緒に削除してくれます。
おわりに
便利なCloud9なので、専用の環境ごとに作っておきたい時のテンプレートが欲しいと考え記事にしました。
自分用の備忘録ですが、どなたかのお役に立てれば幸いです。