예: AWS CLI를 사용하여 IPv4 VPC 및 서브넷 생성 - Amazon Virtual Private Cloud

예: AWS CLI를 사용하여 IPv4 VPC 및 서브넷 생성

다음 예에서는 AWS CLI 명령을 사용하여 IPv4 CIDR 블록이 있는 기본이 아닌 VPC를 만들고, 해당 VPC에 퍼블릭 및 프라이빗 서브넷을 만듭니다. VPC와 서브넷을 만든 후, 퍼블릭 서브넷에서 인스턴스를 시작하고 여기에 연결할 수 있습니다. 시작하려면 먼저 AWS CLI를 설치하고 구성해야 합니다. 자세한 내용은 AWS CLI 설치 단원을 참조하세요.

다음과 같은 AWS 리소스를 생성합니다.

  • VPC

  • 두 개의 서브넷

  • 인터넷 게이트웨이

  • 라우팅 테이블

  • EC2 인스턴스

1단계: VPC와 서브넷 만들기

첫 번째 단계는 VPC와 서브넷 두 개를 만드는 것입니다. 이 예에서는 VPC에 대해 CIDR 블록 10.0.0.0/16을 사용하지만, 다른 CIDR 블록을 선택할 수 있습니다. 자세한 내용은 VPC 및 서브넷 크기 조정 단원을 참조하세요.

AWS CLI를 사용하여 VPC와 서브넷을 만들려면

  1. 다음의 create-vpc 명령을 사용해 10.0.0.0/16 CIDR 블록과 함께 VPC를 생성합니다.

    aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query Vpc.VpcId --output text

    이 명령은 새 VPC ID를 반환합니다. 다음은 예제입니다.

    vpc-2f09a348
  2. 이전 단계에서 나온 VPC ID를 사용하여 다음의 create-subnet 명령을 사용해 10.0.1.0/24 CIDR 블록이 포함된 서브넷을 생성합니다.

    aws ec2 create-subnet --vpc-id vpc-2f09a348 --cidr-block 10.0.1.0/24
  3. CIDR 블록이 10.0.0.0/24인 VPC에 두 번째 서브넷을 만듭니다.

    aws ec2 create-subnet --vpc-id vpc-2f09a348 --cidr-block 10.0.0.0/24

2단계: 서브넷을 퍼블릭으로 만들기

VPC와 서브넷을 만든 후, VPC에 인터넷 게이트웨이를 연결하고, 사용자 지정 라우팅 테이블을 만들고, 서브넷이 인터넷 게이트웨이로 라우팅되도록 구성하여 서브넷 중 하나를 퍼블릭 서브넷으로 만들 수 있습니다.

서브넷을 퍼블릭 서브넷으로 만들려면

  1. 다음의 create-internet-gateway 명령을 사용해 인터넷 게이트웨이를 생성합니다.

    aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text

    이 명령은 새 인터넷 게이트웨이의 ID를 반환합니다. 다음은 예제입니다.

    igw-1ff7a07b
  2. 다음의 attach-internet-gateway 명령 및 이전 단계의 ID를 사용하여 VPC에 인터넷 게이트웨이를 연결합니다.

    aws ec2 attach-internet-gateway --vpc-id vpc-2f09a348 --internet-gateway-id igw-1ff7a07b
  3. 다음의 create-route-table 명령을 사용해 VPC에 대한 사용자 지정 라우팅 테이블을 생성합니다

    aws ec2 create-route-table --vpc-id vpc-2f09a348 --query RouteTable.RouteTableId --output text

    이 명령은 새 라우팅 테이블의 ID를 반환합니다. 다음은 예제입니다.

    rtb-c1c8faa6
  4. 다음의 create-route 명령을 사용해 라우팅 테이블에 모든 트래픽(0.0.0.0/0)을 인터넷 게이트웨이로 가리키는 경로를 생성합니다.

    aws ec2 create-route --route-table-id rtb-c1c8faa6 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-1ff7a07b
  5. (선택 사항) 경로가 생성되었고 활성 상태인지 확인하기 위해, 다음의 describe-route-tables 명령을 사용해 라우팅 테이블을 설명할 수 있습니다

    aws ec2 describe-route-tables --route-table-id rtb-c1c8faa6
    { "RouteTables": [ { "Associations": [], "RouteTableId": "rtb-c1c8faa6", "VpcId": "vpc-2f09a348", "PropagatingVgws": [], "Tags": [], "Routes": [ { "GatewayId": "local", "DestinationCidrBlock": "10.0.0.0/16", "State": "active", "Origin": "CreateRouteTable" }, { "GatewayId": "igw-1ff7a07b", "DestinationCidrBlock": "0.0.0.0/0", "State": "active", "Origin": "CreateRoute" } ] } ] }
  6. 라우팅 테이블이 현재 서브넷과 연결되지 않았습니다. 서브넷에서 보내는 트래픽이 인터넷 게이트웨이로 라우팅되도록 라우팅 테이블을 VPC의 해당 서브넷과 연결해야 합니다. 다음의 describe-subnets 명령을 사용해 서브넷 ID를 가져옵니다. --filter 옵션은 새 VPC의 서브넷만 제한하고, --query 옵션을 사용하여 서브넷 ID와 그 CIDR 블록만 반환할 수 있습니다.

    aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-2f09a348" --query "Subnets[*].{ID:SubnetId,CIDR:CidrBlock}"
    [ { "CIDR": "10.0.1.0/24", "ID": "subnet-b46032ec" }, { "CIDR": "10.0.0.0/24", "ID": "subnet-a46032fc" } ]
  7. associate-route-table 명령을 사용해 사용자 지정 라우팅 테이블, 예를 들어 subnet-b46032ec와 연결할 서브넷을 선택하고 연결할 수 있습니다 이 서브넷이 사용자의 퍼블릭 서브넷입니다.

    aws ec2 associate-route-table --subnet-id subnet-b46032ec --route-table-id rtb-c1c8faa6
  8. (선택 사항) 다음의 modify-subnet-attribute 명령을 사용해 서브넷에서 시작된 인스턴스가 퍼블릭 IP 주소를 자동으로 받도록 서브넷의 퍼블릭 IP 주소 지정 동작을 수정할 수 있습니다. 그렇지 않은 경우, 인스턴스가 시작 후 인터넷에서 연결할 수 있도록 탄력적 IP 주소를 인스턴스와 연결합니다.

    aws ec2 modify-subnet-attribute --subnet-id subnet-b46032ec --map-public-ip-on-launch

3단계: 서브넷에서 인스턴스 시작

서브넷이 퍼블릭이고 인터넷을 통해 해당 서브넷의 인스턴스에 액세스할 수 있는지 테스트하려면, 퍼블릭 서브넷에서 인스턴스를 시작하고 여기에 연결합니다. 먼저 인스턴스와 연결할 보안 그룹과 인스턴스에 연결하는 데 사용할 키 페어를 만들어야 합니다. 보안 그룹에 대한 자세한 내용은 VPC의 보안 그룹 단원을 참조하세요. 키 페어 액세스에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서Amazon EC2 키 페어를 참조하세요.

퍼블릭 서브넷에서 인스턴스를 시작하고 연결하려면

  1. 키 페어를 만든 다음 --query 옵션과 --output 텍스트 옵션을 사용하여 확장자가 .pem인 파일에 직접 프라이빗 키를 파이프합니다.

    aws ec2 create-key-pair --key-name MyKeyPair --query "KeyMaterial" --output text > MyKeyPair.pem

    이 예에서는 Amazon Linux 인스턴스를 시작합니다. Linux 또는 Mac OS X 운영 체제에서 SSH 클라이언트를 사용하여 인스턴스에 연결하려면, 사용자만 프라이빗 키 파일을 읽을 수 있도록 다음 명령으로 해당 권한을 설정합니다.

    chmod 400 MyKeyPair.pem
  2. create-security-group 명령을 사용하여 사용자의 VPC에서 보안 그룹을 생성합니다.

    aws ec2 create-security-group --group-name SSHAccess --description "Security group for SSH access" --vpc-id vpc-2f09a348
    { "GroupId": "sg-e1fb8c9a" }

    authorize-security-group-ingress 명령을 사용하여 어디서든 SSH 액세스를 허용하는 규칙을 추가합니다.

    aws ec2 authorize-security-group-ingress --group-id sg-e1fb8c9a --protocol tcp --port 22 --cidr 0.0.0.0/0
    참고

    0.0.0.0/0을 사용하면 모든 IPv4 주소에서 SSH를 사용하여 인스턴스에 액세스할 수 있습니다. 예제에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 특정 IP 주소 또는 주소 범위에 대해서만 승인하세요.

  3. 생성한 보안 그룹과 키 페어를 사용하여 퍼블릭 서브넷에서 인스턴스를 시작합니다. 출력에 표시된 인스턴스의 인스턴스 ID를 메모해 둡니다.

    aws ec2 run-instances --image-id ami-a4827dc9 --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-e1fb8c9a --subnet-id subnet-b46032ec
    참고

    이 예에서 AMI는 미국 동부(버지니아 북부) 리전의 Amazon Linux AMI입니다. 다른 리전에 있는 경우, 해당 리전에 적합한 AMI의 AMI ID가 필요합니다. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서Linux AMI 찾기를 참조하세요.

  4. 인스턴스에 연결하려면 인스턴스가 running 상태에 있어야 합니다. 다음 명령을 사용하여 인스턴스의 상태 및 IP 주소를 설명합니다.

    aws ec2 describe-instances --instance-id i-0146854b7443af453 --query "Reservations[*].Instances[*].{State:State.Name,Address:PublicIpAddress}"

    다음은 예제 출력입니다.

    [ [ { "State": "running", "Address": "52.87.168.235" } ] ]
  5. 인스턴스가 실행 상태에 있는 경우, 다음 명령을 사용하여 Linux 또는 Mac OS X 컴퓨터에서 SSH 클라이언트를 통해 인스턴스에 연결할 수 있습니다.

    ssh -i "MyKeyPair.pem" ec2-user@52.87.168.235

    Windows 컴퓨터에서 연결하는 경우에는 PuTTY를 사용하여 Windows에서 Linux 인스턴스에 연결 지침을 따릅니다.

4단계: 정리

인스턴스에 연결할 수 있는지 확인한 후, 인스턴스가 더 이상 필요하지 않은 경우 종료할 수 있습니다. 이렇게 하려면 terminate-instances 명령을 사용합니다. 이 예에서 만든 리소스를 삭제하려면 다음 명령을 나열된 순서대로 사용합니다.

  1. 보안 그룹 삭제:

    aws ec2 delete-security-group --group-id sg-e1fb8c9a
  2. 서브넷 삭제:

    aws ec2 delete-subnet --subnet-id subnet-b46032ec
    aws ec2 delete-subnet --subnet-id subnet-a46032fc
  3. 사용자 지정 라우팅 테이블 삭제:

    aws ec2 delete-route-table --route-table-id rtb-c1c8faa6
  4. VPC에서 인터넷 게이트웨이 분리:

    aws ec2 detach-internet-gateway --internet-gateway-id igw-1ff7a07b --vpc-id vpc-2f09a348
  5. 인터넷 게이트웨이 삭제:

    aws ec2 delete-internet-gateway --internet-gateway-id igw-1ff7a07b
  6. VPC 삭제:

    aws ec2 delete-vpc --vpc-id vpc-2f09a348