🔥
No.2【AWS】ECS Fargate+CodePipeline - ネットワーク構築編
はじめに
この記事は以下の続きとなる。
AWSネットワーク環境構築時につまづきやすいポイント
VPC
- Amazon Virtual Private Cooudの略
- AWS上に作成する仮想ネットワーク
- 仮想ネットワークなのでVPC内では物理作業無しにあらゆるAWSリソースを作成できる。
インターネットゲートウェイ
- VPCとインターネット間の通信を可能とするコンポーネント。
- VPCにアタッチし、ルートテーブルの設定をすることで
パブリックIPをもつパブリックサブネット内にあるリソースのみ
インターネットに接続できるようになる。
サブネット
- 一般的なサブネットの概念とほぼ同じ。
- VPC内のネットワークを分割する仕組み。
- AWS特有な点としてネットワークアドレスおよびブロードキャストアドレス以外に
各サブネットにAWSが予約するアドレスが存在し、そのIPは使用できない。
以下、10.10.1.0/24
でサブネットを作成した場合に使用できないIP。-
10.10.1.0
ネットワークアドレス -
10.10.1.1
VPCルータアドレス -
10.10.1.2
DNSサーバのアドレス -
10.10.1.3
将来的のための予約 -
10.10.1.255
ブロードキャストアドレス
-
パブリックサブネット
- インターネットへの通信がおこなえるサブネット。
- ルートテーブルによりインターネットゲートウェイへの通信設定がされているサブネットのこと。
プライベートサブネット
- インターネットゲートウェイへの通信設定がされていないサブネット。
- VPC内部の通信およびVPNやDirectConnetなどプライベートな通信を行うサブネット。
- インターネットへの通信経路はGWやVPCエンドポイントなどを使用しないと確保できない。
ルートテーブル
- サブネットやゲートウェイのネットワークトラフィックの経路をルーティングする設定。
- そのため、一般的なルーティング設定と異なりサブネットやゲートウェイと異なり
作成したルートテーブルにゲートウェイやサブネットを紐づける設定をする。
local
- ルートテーブルを作成すると最初から以下のようなターゲットを
local
に向けた設定が入っている。
- 送信先は
トラフィックを送信する宛先
、ターゲットはトラフィックの経路
を意味する。 - この設定は自身が所属する
local
ネットワークを意味する。 - そのため、以下の場合は
local
を経由してVPC内のCIDRにトラフィックを流すことを意味する。
構築する環境
構築手順
以下、ymlファイルをCloudFormationで実行する。
Parameters:
PJName:
Type: String
Default: "ecs-test"
VPCCIDR:
Type: String
Default: "10.10.0.0/16"
PublicSubnetACIDR:
Type: String
Default: "10.10.1.0/24"
PublicSubnetCCIDR:
Type: String
Default: "10.10.2.0/24
PrivateSubnetACIDR:
Type: String
Default: "10.10.100.0/24"
PrivateSubnetCCIDR:
Type: String
Default: "10.10.200.0/24"
Resources:
#=================================
# Create VPC
#=================================
VPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: !Ref VPCCIDR
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
Tags:
- Key: Name
Value: !Sub "${PJName}-vpc"
#=================================
# Create IGW
#=================================
# IGW Create
IGW:
Type: "AWS::EC2::InternetGateway"
Properties:
Tags:
- Key: Name
Value: !Sub "${PJName}-igw"
# IGW Attach
InternetGatewayAttachment:
Type: "AWS::EC2::VPCGatewayAttachment"
Properties:
InternetGatewayId: !Ref IGW
VpcId: !Ref VPC
#=================================
# Create Subnet
#=================================
# PublicSubnet
PublicSubnetA:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "us-east-1a"
CidrBlock: !Ref PublicSubnetACIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${PJName}-public-subnet-a"
PublicSubnetC:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "us-east-1c"
CidrBlock: !Ref PublicSubnetCCIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${PJName}-public-subnet-c"
# PrivateSubnet
PrivateSubnetA:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "us-east-1a"
CidrBlock: !Ref PrivateSubnetACIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${PJName}-private-subnet-a"
PrivateSubnetC:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "us-east-1c"
CidrBlock: !Ref PrivateSubnetCCIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${PJName}-private-subnet-c"
#=================================
# RouteTable
#=================================
# Public RouteTable
PublicRouteTable:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${PJName}-public-route"
# Private RouteTable
PrivateRouteTable:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${PJName}-private-route"
# Attach RouteTable IGW route
AttachIGW:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref IGW
# Attach RouteTable PublicSubnet route
AttachPublicSubnetA:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetA
RouteTableId: !Ref PublicRouteTable
AttachPublicSubnetC:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetC
RouteTableId: !Ref PublicRouteTable
# Attach RouteTable PrivateSubnet route
AttachPrivateSubnetA:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PrivateSubnetA
RouteTableId: !Ref PrivateRouteTable
AttachPrivateSubnetC:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PrivateSubnetC
RouteTableId: !Ref PrivateRouteTable
#=================================
# Cloud9
#=================================
Cloud9:
Type: AWS::Cloud9::EnvironmentEC2
Properties:
AutomaticStopTimeMinutes: 30
ConnectionType: CONNECT_SSH
Description: !Sub "${PJName}-cloud9"
InstanceType: "t2.micro"
Name: !Sub "${PJName}-cloud9"
SubnetId: !Ref PublicSubnetA
Discussion