|
| 1 | +### 문제 설명 |
| 2 | +- 리소스 분할 및 중복을 위해 개별 IP 공간으로 구성한 VPC 네트워크를 생성해야 함 |
| 3 | +### 해결 방안 |
| 4 | +- VPC 내에 라우팅 테이블을 생성한다. VPC의 다른 가용 영역에 서브넷 2개를 생성한다. |
| 5 | + |
| 6 | +### 복습해봅시다 - VPC 생성 |
| 7 | + |
| 8 | +*클라우드 리소스를 호스팅한 네트워크 구축* |
| 9 | + - 그림 2-1과 같이 AMAZON VPC를 생성하고 이에 대한 CIDR 블록 구성 |
| 10 | + |
| 11 | + CIDR 이란? |
| 12 | + - IP 주소와 그 서브넷 마스크를 나타내는 방법으로, 네트워크 주소 할당과 라우팅에 사용 |
| 13 | + - CIDR 표기법은 IP 주소 뒤에 슬래시(`/`)를 붙이고, 그 뒤에 네트워크 프리픽스(서브넷 마스크의 길이)를 적습니다. 예를 들어, `192.168.0.0/24`와 같은 형태 |
| 14 | + - **Virtual Private Cloud 생성** |
| 15 | + Virtual Private Cloud(VPC)는 클라우드 내에서 호스팅되는 프라이빗 디지털 공간입니다. VPC를 사용하면 격리되고 안전한 환경에 워크로드를 프로비저닝할 수 있습니다. VPC는 연결된 디바이스 간에 데이터 패킷을 전송할 때 CIDR IP 주소를 사용합니다. |
| 16 | + 출처 : AWS 공식 문서 |
| 17 | + |
| 18 | +1. IPV4 CIDR 블록을 가진 VPC를 생성. 주소 범위로 10.10.0.0/16을 사용. 주소 범위는 필요에 따라 다른 범위로 수정 가능 |
| 19 | +``` |
| 20 | +VPC_ID=$(aws ec2 create-vpc --cidr-block 10.10.0.0/23 \ |
| 21 | +--tag-specifications \ |
| 22 | +'ResourceType=vpc,Tags=[{Key=Name,Value=AWSCookbook202}]' \ |
| 23 | +--output text --query Vpc.VpcId) |
| 24 | +``` |
| 25 | + |
| 26 | +- **VPC_ID=...** |
| 27 | + - 명령의 출력을 변수 `aws ec2`에 저장 |
| 28 | +- **aws ec2 create-vpc:** |
| 29 | + - `create-vpc`는 새로운 VPC를 생성하는 서브 명령어 |
| 30 | +- **--cidr-block 10.10.0.0/23**: |
| 31 | + - `--cidr-block`은 VPC의 IP 주소 범위를 지정 |
| 32 | + - `10.10.0.0/23`은 이 VPC에 할당된 IP 주소 범위를 나타냅니다. 여기서 `/23`은 서브넷 마스크를 나타내며, 총 512개의 IP 주소를 포함 |
| 33 | +- **--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=AWSCookbook202}]'**: |
| 34 | + - `--tag-specifications`는 VPC에 태그를 지정 |
| 35 | + - `'ResourceType=vpc,Tags=[{Key=Name,Value=AWSCookbook202}]'`은 태그의 키가 `Name`이고 값이 `AWSCookbook202`인 태그를 VPC에 추가 |
| 36 | +- **--output text**: |
| 37 | + - `--output` 옵션은 명령의 출력 형식을 지정 |
| 38 | + - `text`는 출력 형식을 간단한 텍스트 형식으로 지정 |
| 39 | +- **--query Vpc.VpcId**: |
| 40 | + - `--query` 옵션은 출력에서 특정 부분을 추출하는 데 사용 |
| 41 | + - `Vpc.VpcId`는 생성된 VPC의 ID를 추출 |
| 42 | +- 유효성 검사 **aws ec2 describe-vpcs --vpc-ids $VPC_ID** |
| 43 | +``` |
| 44 | +$ aws ec2 describe-vpcs --vpc-ids $VPC_ID |
| 45 | +{ |
| 46 | + "Vpcs": [ |
| 47 | + { |
| 48 | + "CidrBlock": "10.10.0.0/23", |
| 49 | + "DhcpOptionsId": "dopt-0535c42b101c41626", |
| 50 | + "State": "available", |
| 51 | + "VpcId": "vpc-0d93a7f74b97eb1e7", |
| 52 | + "OwnerId": "951192624022", |
| 53 | + "InstanceTenancy": "default", |
| 54 | + "CidrBlockAssociationSet": [ |
| 55 | + { |
| 56 | + "AssociationId": "vpc-cidr-assoc-03cda77518ce24302", |
| 57 | + "CidrBlock": "10.10.0.0/23", |
| 58 | + "CidrBlockState": { |
| 59 | + "State": "associated" |
| 60 | + } |
| 61 | + } |
| 62 | + ], |
| 63 | + "IsDefault": false, |
| 64 | + "Tags": [ |
| 65 | + { |
| 66 | + "Key": "Name", |
| 67 | + "Value": "AWSCookbook202" |
| 68 | + } |
| 69 | + ] |
| 70 | + } |
| 71 | + ] |
| 72 | +} |
| 73 | +``` |
| 74 | + |
| 75 | +### 서브넷과 라우팅 테이블을 포함한 네트워크 티어 생성 |
| 76 | +![[Pasted image 20240629175514.png]] |
| 77 | + v |
| 78 | +![[Pasted image 20240629175442.png]] |
| 79 | + |
| 80 | +**라우팅 테이블 (Route Table)** |
| 81 | +- VPC의 서브넷 내의 트래픽이 어디로 향할지를 결정하는 규칙 집합 |
| 82 | +- 각 서브넷은 하나의 라우팅 테이블과 연결되어 있음 |
| 83 | + |
| 84 | +**라우팅 테이블을 만드는 이유** |
| 85 | +- 라우터란 목적지이고 라우팅 테이블은 각 목적지에 대한 이정표 |
| 86 | +- 데이터는 라우터로 향하게 되며 네트워크 요청은 각각 정의 된 라우팅 테이블에 따라 작동 |
| 87 | + ![[Pasted image 20240629180227.png]] |
| 88 | + - 서브넷 A의 라우팅 테이블은 172.31.0.0/16 즉 VPC안의 네트워크 범위를 갖는 네트워크 요청은 로컬에서 찾도록 되어있음 |
| 89 | + |
| 90 | +1. **라우팅 테이블 생성, 이제 연결된 서브넷에 사용자 지정 트래픽 경로를 만들 수 있음. |
| 91 | +``` |
| 92 | +ROUTE_TABLE_ID=$(aws ec2 create-route-table --vpc-id $VPC_ID --tag-specifications \ 'ResourceType=route-table,Tags=[{Key=Name,Value=AWSCookbook282}]' --output text --query RouteTable.RouteTableId) |
| 93 | +``` |
| 94 | +- `ROUTE_TABLE_ID=$(...)`: 명령의 출력을 `ROUTE_TABLE_ID` 변수에 저장 |
| 95 | +- `aws ec2 create-route-table`: 새로운 라우트 테이블을 생성하는 AWS CLI 명령 |
| 96 | +- `--vpc-id $VPC_ID`: 이전에 생성한 VPC의 ID를 지정- |
| 97 | +- `--tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=AWSCookbook282}]'`: 생성된 라우트 테이블에 태그를 지정, `Key`는 `Name`, `Value`는 `AWSCookbook202` |
| 98 | +- `--output text`: 출력 형식을 텍스트로 지정 |
| 99 | +- `--query RouteTable.RouteTableId`: 출력에서 라우트 테이블 ID만 추출 |
| 100 | + |
| 101 | +2. **각 AZ에 2개의 서브넷을 생성한다. 이제 VPC 용 리소스를 생성하기 위한 주소 공간을 사용할 수 있다. |
| 102 | + **VPC에서 사용하는 사설 아이피 대역 |
| 103 | + - 10.0.0.0 ~ 10.255.255.255(10/8 prefix) |
| 104 | + - 172.16.0.0 ~ 172.31.255.255(182.16/12 prefix) |
| 105 | + - 192.168.0.0 ~ 192.168.255.255(192.168/16 prefix) |
| 106 | + |
| 107 | + **서브넷 |
| 108 | + - VPC를 잘개 쪼개는 과정 |
| 109 | + - 서브넷은 VPC 안에 있는 VPC보다 더 작은 단위이기 때문에 당연히 서브넷 마스크가 더 높아지고 아이피범위가 더 작은 값을 가짐 |
| 110 | + - 서브넷을 나누는 이유는 더 많은 네트워크망을 만들기 위함 |
| 111 | +``` |
| 112 | +# 첫 번째 서브넷 생성 |
| 113 | +SUBNET_ID_1=$(aws ec2 create-subnet --vpc-id $VPC_ID \ |
| 114 | +--cidr-block 10.10.0.0/24 --availability-zone ${AWS_REGION}a \ |
| 115 | +--tag-specifications \ |
| 116 | +'ResourceType=subnet,Tags=[{Key=Name,Value=AWSCookbook202a}]' \ |
| 117 | +--output text --query Subnet.SubnetId) |
| 118 | +
|
| 119 | +# 두 번째 서브넷 생성 |
| 120 | +SUBNET_ID_2=$(aws ec2 create-subnet --vpc-id $VPC_ID \ |
| 121 | +--cidr-block 10.10.1.0/24 --availability-zone ${AWS_REGION}b \ |
| 122 | +--tag-specifications \ |
| 123 | +'ResourceType=subnet,Tags=[{Key=Name,Value=AWSCookbook202b}]' \ |
| 124 | +--output text --query Subnet.SubnetId) |
| 125 | +``` |
| 126 | +- **`create-subnet`**: 새로운 서브넷을 생성 |
| 127 | +- **`--vpc-id $VPC_ID`**: 이전에 생성한 VPC의 ID를 지정 |
| 128 | +- **`--cidr-block 10.10.0.0/24`**: 서브넷의 CIDR 블록을 지정 |
| 129 | +- **`--availability-zone ${AWS_REGION}a`**: 서브넷이 속할 가용 영역을 지정 |
| 130 | +- **`--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=AWSCookbook202a}]'`**: 서브넷에 태그를 지정 |
| 131 | +- **`--output text --query Subnet.SubnetId`**: 출력 형식을 텍스트로 지정하고, 서브넷 ID를 추출 |
| 132 | + |
| 133 | +3. **라우팅 테이블을 2개의 서브넷과 연결 |
| 134 | +``` |
| 135 | +# 첫 번째 서브넷에 라우팅 테이블 연결 |
| 136 | +aws ec2 associate-route-table \ |
| 137 | +--route-table-id $ROUTE_TABLE_ID --subnet-id $SUBNET_ID_1 |
| 138 | +
|
| 139 | +# 두 번째 서브넷에 라우팅 테이블 연결 |
| 140 | +aws ec2 associate-route-table \ |
| 141 | +--route-table-id $ROUTE_TABLE_ID --subnet-id $SUBNET_ID_2 |
| 142 | +``` |
| 143 | +- **`associate-route-table`**: 라우팅 테이블을 서브넷에 연결하는 명령어 |
| 144 | +- **`--route-table-id $ROUTE_TABLE_ID`**: 이전에 생성한 라우팅 테이블의 ID를 지정 |
| 145 | +- **`--subnet-id $SUBNET_ID_1`**: 첫 번째 서브넷의 ID를 지정 |
| 146 | +4. **서브넷 정보 조회** |
| 147 | +``` |
| 148 | +aws ec2 describe-subnets --subnet-ids $SUBNET_ID_1 $SUBNET_ID_2 |
| 149 | +``` |
| 150 | +- **`describe-subnets`**: 지정된 서브넷에 대한 정보를 반환하는 AWS CLI 명령어 |
| 151 | +![[Pasted image 20240629183256.png]] |
| 152 | +``` |
| 153 | +aws ec2 describe-route-tables --route-table-ids $ROUTE_TABLE_ID |
| 154 | +``` |
| 155 | +![[Pasted image 20240629184023.png]] |
| 156 | +1. **RouteTables**: |
| 157 | + - 라우팅 테이블의 리스트 |
| 158 | +2. **Associations**: |
| 159 | + - 이 라우팅 테이블과 연관된 서브넷이나 게이트웨이의 리스트 |
| 160 | +3. **PropagatingVgws**: |
| 161 | + - 경로 전파를 허용하는 가상 게이트웨이 리스트 |
| 162 | +4. **RouteTableId**: |
| 163 | + - 라우팅 테이블의 ID |
| 164 | +5. **Routes**: |
| 165 | + - 이 라우팅 테이블에 정의된 경로들의 리스트 |
| 166 | + - **DestinationCidrBlock**: 대상 CIDR 블록, `10.10.0.0/23`으로 설정되어 있음 |
| 167 | + - **GatewayId**: 이 경로를 처리하는 게이트웨이의 ID, `local`은 VPC 내의 로컬 경로임을 의미 |
| 168 | + - **Origin**: 경로의 생성 원본, `CreateRouteTable`은 이 경로가 라우팅 테이블 생성 시 기본적으로 만들어진 것임을 의미 |
| 169 | + - **State**: 경로의 상태, `active`는 이 경로가 활성 상태임을 나타냅니다. |
| 170 | +6. **Tags**: |
| 171 | + - 라우팅 테이블에 설정된 태그들의 리스트 |
| 172 | +7. **VpcId**: |
| 173 | + - 이 라우팅 테이블이 속한 VPC의 ID |
| 174 | +8. **OwnerId**: |
| 175 | + - 라우팅 테이블의 소유자 AWS 계정 ID |
| 176 | + |
| 177 | + |
| 178 | +### REFERENCE |
| 179 | +https://aws.amazon.com/ko/what-is/cidr/ |
| 180 | +https://medium.com/harrythegreat/aws-%EA%B0%80%EC%9E%A5%EC%89%BD%EA%B2%8C-vpc-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0-71eef95a7098 |
| 181 | +https://velog.io/@chchaeun/AWS-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EA%B5%AC%EC%B6%95-2-VPC-%EA%B5%AC%EC%B6%95%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%9D%B8%ED%84%B0%EB%84%B7-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4 |
0 commit comments