AWS CLI를 사용하여 프라이빗 서브넷과 NAT 게이트웨이가 포함된 VPC 생성
이 튜토리얼에서는 AWS CLI를 사용하여 프로덕션 환경의 서버에 사용할 수 있는 VPC를 생성하는 방법을 보여줍니다. 복원력 향상을 위해 Auto Scaling 그룹과 Application Load Balancer를 사용하여 2개의 가용 영역에 서버를 배포합니다. 보안 강화를 위해 프라이빗 서브넷에 서버를 배포합니다. 서버는 로드 밸런서를 통해 요청을 수신하고 NAT 게이트웨이를 사용하여 인터넷에 연결할 수 있습니다. 복원력 향상을 위해 각 가용 영역에 NAT 게이트웨이를 배포합니다.
다음 다이어그램에서는 이 튜토리얼에 포함된 리소스의 개요를 제공합니다. VPC에는 2개의 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷이 있습니다. 각 퍼블릭 서브넷에는 NAT 게이트웨이와 로드 밸런서 노드가 있습니다. 서버는 프라이빗 서브넷에서 실행되고, Auto Scaling을 사용하여 시작 및 종료되고, 로드 밸런서에서 트래픽을 수신합니다. 서버는 NAT 게이트웨이를 사용하여 인터넷에 연결할 수 있습니다. 서버는 게이트웨이 VPC 엔드포인트를 사용하여 Amazon S3에 연결할 수 있습니다.

사전 조건
이 튜토리얼을 시작하려면 다음이 필요합니다.
-
설치 및 구성된 AWS CLI(VPC 리소스, EC2 인스턴스, 로드 밸런서 및 Auto Scaling 그룹을 생성할 수 있는 권한 포함). AWS CLI 설치에 대한 내용은 AWS CLI의 최신 버전 설치 또는 업데이트를 참고하세요.
-
서브넷, 라우팅 테이블 및 인터넷 게이트웨이를 포함한 VPC 개념에 대한 기본 지식.
-
jq
명령줄 JSON 프로세서 설치. AWS CLI 명령의 출력을 구문 분석하는 데 사용됩니다. jq 설치에 대한 자세한 내용은 Download jq를 참조하세요. -
다음을 포함하여 생성할 리소스에 대한 충분한 서비스 할당량:
-
2개 이상의 사용 가능한 탄력적 IP 주소
-
2개 이상의 NAT 게이트웨이
-
1개 이상의 VPC
-
4개 이상의 서브넷
-
1개 이상의 Application Load Balancer
예상 비용: 이 튜토리얼에서 생성된 리소스에 대해 AWS 계정에 요금이 발생합니다. NAT 게이트웨이: 시간당 ~$0.045(데이터 처리 요금 별도) 탄력적 IP 주소: 실행 중인 인스턴스와 연결된 경우 무료, 연결되지 않은 경우 시간당 ~$0.005 EC2 인스턴스: 인스턴스 유형에 따라 다름(이 튜토리얼에서는 t3.micro 사용) Application Load Balancer: 시간당 ~$0.0225(데이터 처리 요금 별도)
VPC 및 서브넷 생성
먼저 최대 65,536개의 프라이빗 IP 주소를 제공하는 CIDR 블록이 10.0.0.0/16인 VPC를 생성합니다.
# Create a VPC with CIDR block 10.0.0.0/16 aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=ProductionVPC}]'
이 명령은 다음과 비슷한 출력을 반환합니다.
{ "Vpc": { "CidrBlock": "10.0.0.0/16", "DhcpOptionsId": "dopt-abcd1234", "State": "pending", "VpcId": "vpc-abcd1234", "OwnerId": "123456789012", "InstanceTenancy": "default", "Ipv6CidrBlockAssociationSet": [], "CidrBlockAssociationSet": [ { "AssociationId": "vpc-cidr-assoc-abcd1234", "CidrBlock": "10.0.0.0/16", "CidrBlockState": { "State": "associated" } } ], "IsDefault": false, "Tags": [ { "Key": "Name", "Value": "ProductionVPC" } ] } }
출력의 VPC ID를 기록하세요(예: vpc-abcd1234
). 후속 명령에서 이 ID를 사용합니다.
다음으로 리전에서 2개의 가용 영역을 식별하여 복원력이 있는 아키텍처를 생성합니다.
# Get available Availability Zones aws ec2 describe-availability-zones --query 'AvailabilityZones[0:2].ZoneName' --output text
이 명령은 다음과 비슷한 출력을 반환합니다.
us-east-1a us-east-1b
이제 4개의 서브넷을 생성합니다. 로드 밸런서 및 NAT 게이트웨이용 퍼블릭 서브넷 2개, 애플리케이션 서버용 프라이빗 서브넷 2개입니다. vpc-abcd1234
를 실제 VPC ID로 바꾸고, us-east-1a
및 us-east-1b
를 실제 가용 영역으로 바꿉니다.
# Create public subnet in first AZ aws ec2 create-subnet \ --vpc-id vpc-abcd1234 \ --cidr-block 10.0.0.0/24 \ --availability-zone us-east-1a \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=PublicSubnet1}]' # Create private subnet in first AZ aws ec2 create-subnet \ --vpc-id vpc-abcd1234 \ --cidr-block 10.0.1.0/24 \ --availability-zone us-east-1a \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=PrivateSubnet1}]' # Create public subnet in second AZ aws ec2 create-subnet \ --vpc-id vpc-abcd1234 \ --cidr-block 10.0.2.0/24 \ --availability-zone us-east-1b \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=PublicSubnet2}]' # Create private subnet in second AZ aws ec2 create-subnet \ --vpc-id vpc-abcd1234 \ --cidr-block 10.0.3.0/24 \ --availability-zone us-east-1b \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=PrivateSubnet2}]'
각 명령으로 서브넷 ID가 포함된 출력이 반환됩니다. 후속 명령에 사용할 ID를 기록합니다.
-
퍼블릭 서브넷 1:
subnet-abcd1234
-
프라이빗 서브넷 1:
subnet-abcd5678
-
퍼블릭 서브넷 2:
subnet-efgh1234
-
프라이빗 서브넷 2:
subnet-efgh5678
인터넷 연결 생성 및 구성
이 섹션에서는 VPC와 인터넷 간의 통신을 허용하는 인터넷 게이트웨이를 생성하고, 이를 VPC에 연결합니다.
# Create an Internet Gateway aws ec2 create-internet-gateway --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=ProductionIGW}]'
명령을 실행하면 인터넷 게이트웨이 ID가 포함된 출력이 반환됩니다. 이 ID를 기록합니다(예: igw-abcd1234
).
인터넷 게이트웨이를 VPC에 연결합니다. igw-abcd1234
를 실제 인터넷 게이트웨이 ID로 바꾸고, vpc-abcd1234
를 실제 VPC ID로 바꿉니다.
# Attach the Internet Gateway to the VPC aws ec2 attach-internet-gateway --internet-gateway-id igw-abcd1234 --vpc-id vpc-abcd1234
다음으로 퍼블릭 및 프라이빗 서브넷용 라우팅 테이블을 생성합니다. vpc-abcd1234
를 실제 VPC ID로 바꿉니다.
# Create a route table for public subnets aws ec2 create-route-table --vpc-id vpc-abcd1234 --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=PublicRouteTable}]' # Create route table for private subnet in first AZ aws ec2 create-route-table --vpc-id vpc-abcd1234 --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=PrivateRouteTable1}]' # Create route table for private subnet in second AZ aws ec2 create-route-table --vpc-id vpc-abcd1234 --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=PrivateRouteTable2}]'
각 명령으로 라우팅 테이블 ID가 포함된 출력이 반환됩니다. 다음 ID를 기록합니다.
-
퍼블릭 라우팅 테이블:
rtb-abcd1234
-
프라이빗 라우팅 테이블 1:
rtb-efgh1234
-
프라이빗 라우팅 테이블 2:
rtb-ijkl1234
퍼블릭 라우팅 테이블에서 인터넷 게이트웨이에 경로를 추가하여 인터넷 액세스를 활성화합니다. rtb-abcd1234
를 실제 퍼블릭 라우팅 테이블 ID로 바꾸고, igw-abcd1234
를 실제 인터넷 게이트웨이 ID로 바꿉니다.
# Add a route to the Internet Gateway aws ec2 create-route --route-table-id rtb-abcd1234 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-abcd1234
서브넷을 해당되는 라우팅 테이블과 연결합니다. 라우팅 테이블 ID와 서브넷 ID를 실제 ID로 바꿉니다.
# Associate public subnets with the public route table aws ec2 associate-route-table --route-table-id rtb-abcd1234 --subnet-id subnet-abcd1234 aws ec2 associate-route-table --route-table-id rtb-abcd1234 --subnet-id subnet-efgh1234 # Associate private subnets with their respective route tables aws ec2 associate-route-table --route-table-id rtb-efgh1234 --subnet-id subnet-abcd5678 aws ec2 associate-route-table --route-table-id rtb-ijkl1234 --subnet-id subnet-efgh5678
NAT 게이트웨이 생성
NAT 게이트웨이를 사용하여 프라이빗 서브넷의 인스턴스를 인터넷 또는 다른 AWS 서비스에 연결할 수 있도록 하되, 인터넷에서 해당 인스턴스와의 연결을 시작하지 못하도록 할 수 있습니다. 먼저 NAT 게이트웨이의 탄력적 IP 주소를 할당합니다.
# Allocate Elastic IP for NAT Gateway in first AZ aws ec2 allocate-address --domain vpc --tag-specifications 'ResourceType=elastic-ip,Tags=[{Key=Name,Value=NAT1-EIP}]' # Allocate Elastic IP for NAT Gateway in second AZ aws ec2 allocate-address --domain vpc --tag-specifications 'ResourceType=elastic-ip,Tags=[{Key=Name,Value=NAT2-EIP}]'
각 명령으로 할당 ID가 포함된 출력이 반환됩니다. 다음 ID를 기록합니다.
-
EIP 1 할당 ID:
eipalloc-abcd1234
-
EIP 2 할당 ID:
eipalloc-efgh1234
각 퍼블릭 서브넷에서 NAT 게이트웨이를 생성합니다. 서브넷 ID와 할당 ID를 실제 ID로 바꿉니다.
# Create NAT Gateway in public subnet of first AZ aws ec2 create-nat-gateway \ --subnet-id subnet-abcd1234 \ --allocation-id eipalloc-abcd1234 \ --tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=NAT-Gateway1}]' # Create NAT Gateway in public subnet of second AZ aws ec2 create-nat-gateway \ --subnet-id subnet-efgh1234 \ --allocation-id eipalloc-efgh1234 \ --tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=NAT-Gateway2}]'
각 명령으로 NAT 게이트웨이 ID가 포함된 출력이 반환됩니다. 다음 ID를 기록합니다.
-
NAT 게이트웨이 1:
nat-abcd1234
-
NAT 게이트웨이 2:
nat-efgh1234
NAT 게이트웨이를 프로비저닝하는 데 몇 분 정도 걸립니다. 사용 가능할 때까지 기다린 다음 계속할 수 있습니다. NAT 게이트웨이 ID를 실제 ID로 바꿉니다.
# Wait for NAT Gateways to be available aws ec2 wait nat-gateway-available --nat-gateway-ids nat-abcd1234 aws ec2 wait nat-gateway-available --nat-gateway-ids nat-efgh1234
프라이빗 라우팅 테이블의 NAT 게이트웨이에 경로를 추가하여 프라이빗 서브넷의 인스턴스에 대한 인터넷 액세스를 활성화합니다. 라우팅 테이블 ID와 NAT 게이트웨이 ID를 실제 ID로 바꿉니다.
# Add route to NAT Gateway 1 in private route table 1 aws ec2 create-route \ --route-table-id rtb-efgh1234 \ --destination-cidr-block 0.0.0.0/0 \ --nat-gateway-id nat-abcd1234 # Add route to NAT Gateway 2 in private route table 2 aws ec2 create-route \ --route-table-id rtb-ijkl1234 \ --destination-cidr-block 0.0.0.0/0 \ --nat-gateway-id nat-efgh1234
Amazon S3용 VPC 엔드포인트 생성
Amazon S3용 VPC 엔드포인트를 사용하면 프라이빗 서브넷의 인스턴스가 NAT 게이트웨이를 거치지 않고 S3에 액세스할 수 있어 데이터 전송 비용이 절감되고 네트워크 성능이 향상됩니다. vpc-abcd1234
를 실제 VPC ID로 바꾸고, 라우팅 테이블 ID를 실제 ID로 바꿉니다.
# Get the prefix list ID for S3 in your region S3_PREFIX_LIST_ID=$(aws ec2 describe-prefix-lists --filters "Name=prefix-list-name,Values=com.amazonaws.$(aws configure get region).s3" --query 'PrefixLists[0].PrefixListId' --output text) # Create the VPC endpoint for S3 aws ec2 create-vpc-endpoint \ --vpc-id vpc-abcd1234 \ --service-name com.amazonaws.$(aws configure get region).s3 \ --route-table-ids rtb-efgh1234 rtb-ijkl1234 \ --tag-specifications 'ResourceType=vpc-endpoint,Tags=[{Key=Name,Value=S3-Endpoint}]'
명령을 실행하면 VPC 엔드포인트 ID가 포함된 출력이 반환됩니다. 이 ID를 기록합니다(예: vpce-abcd1234
).
보안 그룹 구성
보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 어디서나 인바운드 HTTP 트래픽을 허용하는 로드 밸런서용 보안 그룹을 생성합니다. vpc-abcd1234
를 실제 VPC ID로 바꿉니다.
# Create security group for the load balancer aws ec2 create-security-group \ --group-name LoadBalancerSG \ --description "Security group for the load balancer" \ --vpc-id vpc-abcd1234 \ --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=LoadBalancerSG}]'
명령을 실행하면 보안 그룹 ID가 포함된 출력이 반환됩니다. 이 ID를 기록합니다(예: sg-abcd1234
).
로드 밸런서에 대한 인바운드 HTTP 트래픽을 허용합니다. sg-abcd1234
를 실제 로드 밸런서 보안 그룹 ID로 바꿉니다.
# Allow inbound HTTP traffic from anywhere aws ec2 authorize-security-group-ingress \ --group-id sg-abcd1234 \ --protocol tcp \ --port 80 \ --cidr 0.0.0.0/0
로드 밸런서에서의 인바운드 트래픽만 허용하는 애플리케이션 서버용 보안 그룹을 생성합니다. vpc-abcd1234
를 실제 VPC ID로 바꿉니다.
# Create security group for the application servers aws ec2 create-security-group \ --group-name AppServerSG \ --description "Security group for the application servers" \ --vpc-id vpc-abcd1234 \ --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=AppServerSG}]'
명령을 실행하면 보안 그룹 ID가 포함된 출력이 반환됩니다. 이 ID를 기록합니다(예: sg-efgh1234
).
로드 밸런서 보안 그룹에서 애플리케이션 서버로의 인바운드 HTTP 트래픽을 허용합니다. sg-efgh1234
를 실제 애플리케이션 서버 보안 그룹 ID로 바꾸고, sg-abcd1234
를 실제 로드 밸런서 보안 그룹 ID로 바꿉니다.
# Allow inbound HTTP traffic from the load balancer security group aws ec2 authorize-security-group-ingress \ --group-id sg-efgh1234 \ --protocol tcp \ --port 80 \ --source-group sg-abcd1234
EC2 인스턴스용 시작 템플릿 생성
시작 템플릿에는 AMI ID, 인스턴스 유형 및 보안 그룹 등 인스턴스를 시작하기 위한 구성 정보가 포함되어 있습니다. 먼저 인스턴스가 시작될 때 실행될 사용자 데이터 스크립트를 생성합니다.
cat > user-data.sh << 'EOF' #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<h1>Hello from $(hostname -f) in $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)</h1>" > /var/www/html/index.html EOF
사용자 데이터 스크립트를 base64로 인코딩합니다.
USER_DATA=$(base64 -w 0 user-data.sh)
최신 Amazon Linux 2 AMI ID를 가져옵니다.
# Get the latest Amazon Linux 2 AMI ID aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn2-ami-hvm-*-x86_64-gp2" "Name=state,Values=available" --query 'sort_by(Images, &CreationDate)[-1].ImageId' --output text
AMI ID, 인스턴스 유형, 보안 그룹 및 사용자 데이터를 사용하여 시작 템플릿을 생성합니다. sg-efgh1234
를 실제 애플리케이션 서버 보안 그룹 ID로 바꾸고, $AMI_ID
및 $USER_DATA
를 이전 명령에서 얻은 값으로 바꿉니다.
# Create a launch template aws ec2 create-launch-template \ --launch-template-name AppServerTemplate \ --version-description "Initial version" \ --tag-specifications 'ResourceType=launch-template,Tags=[{Key=Name,Value=AppServerTemplate}]' \ --launch-template-data '{ "NetworkInterfaces": [{ "DeviceIndex": 0, "Groups": ["sg-efgh1234"], "DeleteOnTermination": true }], "ImageId": "ami-abcd1234", "InstanceType": "t3.micro", "UserData": "IyEvYmluL2Jhc2gKeXVtIHVwZGF0ZSAteQp5dW0gaW5zdGFsbCAteSBodHRwZApzeXN0ZW1jdGwgc3RhcnQgaHR0cGQKc3lzdGVtY3RsIGVuYWJsZSBodHRwZAplY2hvICI8aDE+SGVsbG8gZnJvbSAkKGhvc3RuYW1lIC1mKSBpbiAkKGN1cmwgLXMgaHR0cDovLzE2OS4yNTQuMTY5LjI1NC9sYXRlc3QvbWV0YS1kYXRhL3BsYWNlbWVudC9hdmFpbGFiaWxpdHktem9uZSk8L2gxPiIgPiAvdmFyL3d3dy9odG1sL2luZGV4Lmh0bWw=", "TagSpecifications": [{ "ResourceType": "instance", "Tags": [{ "Key": "Name", "Value": "AppServer" }] }] }'
로드 밸런서 및 대상 그룹 생성
대상 그룹은 지정한 프로토콜과 포트를 사용하여 EC2 인스턴스 같은 등록된 대상으로 요청을 라우팅합니다. 애플리케이션 서버의 대상 그룹을 생성합니다. vpc-abcd1234
를 실제 VPC ID로 바꿉니다.
# Create a target group aws elbv2 create-target-group \ --name AppTargetGroup \ --protocol HTTP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type instance \ --health-check-protocol HTTP \ --health-check-path / \ --health-check-port traffic-port
명령을 실행하면 대상 그룹 ARN이 포함된 출력이 반환됩니다. 이 ARN을 기록합니다(예: arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/AppTargetGroup/abcd1234
).
퍼블릭 서브넷에서 Application Load Balancer를 생성합니다. 서브넷 ID와 보안 그룹 ID를 실제 ID로 바꿉니다.
# Create a load balancer aws elbv2 create-load-balancer \ --name AppLoadBalancer \ --subnets subnet-abcd1234 subnet-efgh1234 \ --security-groups sg-abcd1234 \ --tags Key=Name,Value=AppLoadBalancer
명령을 실행하면 로드 밸런서 ARN이 포함된 출력이 반환됩니다. 이 ARN을 기록합니다(예: arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/AppLoadBalancer/abcd1234
).
로드 밸런서가 활성화될 때까지 기다린 다음 계속합니다. arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/AppLoadBalancer/abcd1234
를 실제 로드 밸런서 ARN으로 바꿉니다.
# Wait for load balancer to be active aws elbv2 wait load-balancer-available \ --load-balancer-arns arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/AppLoadBalancer/abcd1234
HTTP 트래픽을 대상 그룹으로 전달하는 로드 밸런서의 리스너를 생성합니다. 로드 밸런서 ARN 및 대상 그룹 ARN을 실제 ARN으로 바꿉니다.
# Create a listener aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/AppLoadBalancer/abcd1234 \ --protocol HTTP \ --port 80 \ --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/AppTargetGroup/abcd1234
Auto Scaling 그룹 생성
Auto Scaling 그룹에는 자동 크기 조정 및 관리를 위해 논리적 그룹으로 취급되는 EC2 인스턴스 모음이 포함되어 있습니다. 시작 템플릿을 사용하고 프라이빗 서브넷에 인스턴스를 배치하는 Auto Scaling 그룹을 생성합니다. 서브넷 ID와 대상 그룹 ARN을 실제 ID와 ARN으로 바꿉니다.
# Create an Auto Scaling group aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name AppAutoScalingGroup \ --launch-template LaunchTemplateName=AppServerTemplate,Version='$Latest' \ --min-size 2 \ --max-size 4 \ --desired-capacity 2 \ --vpc-zone-identifier "subnet-abcd5678,subnet-efgh5678" \ --target-group-arns arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/AppTargetGroup/abcd1234 \ --health-check-type ELB \ --health-check-grace-period 300 \ --tags Key=Name,Value=AppServer,PropagateAtLaunch=true
구성 테스트
Auto Scaling 그룹이 인스턴스를 시작하고 상태 확인을 통과한 후 로드 밸런서를 테스트할 수 있습니다. 로드 밸런서의 DNS 이름을 가져옵니다. 로드 밸런서 ARN을 실제 ARN으로 바꿉니다.
# Get the DNS name of the load balancer aws elbv2 describe-load-balancers \ --load-balancer-arns arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/AppLoadBalancer/abcd1234 \ --query 'LoadBalancers[0].DNSName' \ --output text)
curl을 사용하여 로드 밸런서 이름으로 애플리케이션을 테스트합니다.
curl http://LoadBalancerName
페이지를 여러 번 새로 고치는 경우 서로 다른 가용 영역에 있는 서로 다른 인스턴스로부터 다른 응답이 표시될 것입니다.
리소스 정리
이 튜토리얼을 완료하면 요금이 발생하지 않도록 모든 리소스를 삭제해야 합니다. 모든 ID를 실제 리소스 ID로 바꿉니다.
# Delete the Auto Scaling group aws autoscaling delete-auto-scaling-group \ --auto-scaling-group-name AppAutoScalingGroup \ --force-delete # Wait for the Auto Scaling group to be deleted sleep 60 # Delete the load balancer aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/AppLoadBalancer/abcd1234 # Wait for the load balancer to be deleted sleep 30 # Delete the target group aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/AppTargetGroup/abcd1234 # Delete the launch template aws ec2 delete-launch-template \ --launch-template-name AppServerTemplate # Delete the NAT Gateways aws ec2 delete-nat-gateway --nat-gateway-id nat-abcd1234 aws ec2 delete-nat-gateway --nat-gateway-id nat-efgh1234 # Wait for the NAT Gateways to be deleted sleep 90 # Release the Elastic IPs aws ec2 release-address --allocation-id eipalloc-abcd1234 aws ec2 release-address --allocation-id eipalloc-efgh1234 # Delete the VPC endpoint aws ec2 delete-vpc-endpoints --vpc-endpoint-ids vpce-abcd1234 # Wait for security group dependencies to clear sleep 30 # Delete the security groups aws ec2 delete-security-group --group-id sg-efgh1234 aws ec2 delete-security-group --group-id sg-abcd1234 # Detach the Internet Gateway aws ec2 detach-internet-gateway --internet-gateway-id igw-abcd1234 --vpc-id vpc-abcd1234 # Delete the Internet Gateway aws ec2 delete-internet-gateway --internet-gateway-id igw-abcd1234 # Delete the route tables aws ec2 delete-route-table --route-table-id rtb-efgh1234 aws ec2 delete-route-table --route-table-id rtb-ijkl1234 aws ec2 delete-route-table --route-table-id rtb-abcd1234 # Delete the subnets aws ec2 delete-subnet --subnet-id subnet-abcd1234 aws ec2 delete-subnet --subnet-id subnet-efgh1234 aws ec2 delete-subnet --subnet-id subnet-abcd5678 aws ec2 delete-subnet --subnet-id subnet-efgh5678 # Delete the VPC aws ec2 delete-vpc --vpc-id vpc-abcd1234
다음 단계
프라이빗 서브넷 및 NAT 게이트웨이가 포함된 VPC를 생성했으므로 이제 관련 주제를 살펴볼 수 있습니다.