EC2 인스턴스의 인벤토리 생성 - - Amazon Elastic Compute Cloud

EC2 인스턴스의 인벤토리 생성

Amazon EC2는 온디맨드로 확장 가능한 컴퓨팅 용량을 제공합니다. EC2 인스턴스는 AWS 네트워크에서 실행되는 가상 서버입니다.

다음 표에서는 EC2 인스턴스의 주요 특성을 설명합니다. 시스템 관리자는 이 가이드에 설명된 지침을 사용하여 이 특성에 대한 정보를 가져오고 이를 사용하여 온프레미스 또는 다른 클라우드 공급자의 네트워크에서 실행되는 기능적으로 동등한 서버를 구성할 수 있습니다.

기능 설명
지리적 위치 Amazon EC2는 전 세계 모든 AWS 리전에서 호스팅됩니다. 인스턴스를 고객에게 가까이 배치할 위치를 선택합니다. 여러 위치에서 인스턴스를 시작할 수 있습니다.
하드웨어 사양 Amazon EC2는 각 사용 사례에 최적화된 다양한 인스턴스 유형을 제공합니다. 인스턴스에 선택할 인스턴스 유형에 따라 컴퓨팅, 메모리, 네트워킹, 스토리지 리소스가 결정됩니다.
이미지 Amazon Machine Image(AMI)에는 시작 시 인스턴스에 설치할 소프트웨어가 포함되어 있습니다. 여기에는 운영 체제, 소프트웨어 패키지, 사용자 지정 구성이 포함됩니다.
IP 주소 및 DNS 호스트 이름 인스턴스는 프라이빗 IP 주소와 프라이빗 DNS 호스트 이름을 수신합니다. 인스턴스에 퍼블릭 IP 주소를 구성하면 퍼블릭 DNS 호스트 이름을 수신합니다.
보안 그룹 규칙 인스턴스와 연결된 보안 그룹 규칙에 따라 허용되는 인바운드 트래픽과 아웃바운드 트래픽이 결정됩니다.
사용자 데이터 사용자 데이터는 시작 시 인스턴스에서 사용할 수 있습니다. 쉘 스크립트(Linux) 또는 PowerShell 스크립트(Windows)로 구성됩니다.

지리적 위치

Amazon EC2는 전 세계 모든 AWS 리전에서 사용할 수 있습니다. 각 리전은 개별 지리 영역입니다. 대부분의 사용자와 가까운 서버의 리전을 선택하면 네트워크 지연 시간을 줄일 수 있습니다.

Amazon EC2 Global View를 사용하여 모든 리전에서 Amazon EC2 인스턴스를 나열할 수 있습니다. AWS Management 콘솔 및 API를 사용하면 각 리전의 인스턴스를 개별적으로 나열해야 합니다.

이것이 중요한 이유

인스턴스의 위치를 확인한 후 필요에 따라 기능적으로 동등한 서버를 동일한 위치에 배포할지 아니면 다른 위치에 배포할지 결정할 수 있습니다.

모든 리전에서 EC2 인스턴스의 요약을 가져오는 방법
  1. https://console.aws.amazon.com/ec2globalview/home에서 Amazon EC2 Global View 콘솔을 엽니다.

  2. 리전 탐색기 탭의 요약에서 인스턴스 수와 리전 수를 포함하는 인스턴스의 리소스 수를 확인합니다. 밑줄이 그어진 텍스트를 클릭하여 인스턴스 수가 리전에 어떻게 분산되는지 확인합니다.

  3. 글로벌 검색 탭에서 클라이언트 필터 리소스 유형 = 인스턴스를 선택합니다. 리전 또는 태그를 지정하여 결과를 추가로 필터링할 수 있습니다.

AWS CLI를 사용하여 리전의 EC2 인스턴스 수를 가져오는 방법

다음 describe-instances 명령을 사용하여 지정된 리전의 인스턴스를 계산합니다. 인스턴스가 있는 각 리전에서 이 명령을 실행해야 합니다.

aws ec2 describe-instances \ --region us-east-2 \ --query "length(Reservations[*].Instances[])"

출력의 예시는 다음과 같습니다.

27

인스턴스 수 대신 인스턴스 ID 목록을 가져오려면 대신 다음 --query 파라미터를 사용합니다.

--query "Reservations[*].Instances[].InstanceId"

하드웨어 사양

EC2 인스턴스에 지정하는 인스턴스 유형에 따라 사용 가능한 컴퓨팅, 메모리, 스토리지, 네트워킹 리소스가 결정됩니다. 인스턴스 패밀리마다 서로 다른 컴퓨팅, 메모리, 네트워크, 스토리지 리소스의 균형을 제공합니다. 자세한 내용은 Amazon EC2 인스턴스 유형 안내서를 참조하세요.

이것이 중요한 이유

인스턴스의 하드웨어 사양을 확인한 후 기능적으로 동등한 서버에 필요한 최소 사양을 결정할 수 있습니다.

인스턴스에서 사용하는 인스턴스 유형의 요약을 가져오는 방법

다음 describe-instances 명령을 사용합니다. sed 명령은 대괄호와 빈 줄이 있는 줄을 제거합니다. 인스턴스가 있는 각 리전에서 이 명령을 실행해야 합니다.

aws ec2 describe-instances \ --query "Reservations[*].Instances[].InstanceType" | sed 's/[][]//g;/^$/d' | sort | uniq -c | sort -nr

출력의 예시는 다음과 같습니다.

20 "c6i.4xlarge", 5 "t2.micro", 2 "g6e.2xlarge",
특정 인스턴스 유형 정보 가져오기

인스턴스 유형을 설명하려면 다음 describe-instance-types 명령을 사용합니다. --query 파라미터는 지정된 필드만 출력에 포함합니다. 이는 기본 특성입니다. 필요한 추가 필드를 포함하거나 Amazon EC2 인스턴스 유형 안내서에서 Amazon EC2 인스턴스 유형 사양을 참조할 수 있습니다.

aws ec2 describe-instance-types \ --instance-types c6i.4xlarge t2.micro g6e.2xlarge \ --query "InstanceTypes[*].[InstanceType,VCpuInfo.DefaultVCpus,MemoryInfo.SizeInMiB,NetworkInfo.NetworkPerformance]" \ --output table

출력의 예시는 다음과 같습니다. 열은 인스턴스 유형, vCPU, 메모리(GiB), 네트워크 대역폭(Gbps)입니다.

------------------------------------------------------ | DescribeInstanceTypes | +--------------+-----+--------+----------------------+ | t2.micro | 1 | 1024 | Low to Moderate | | c6i.4xlarge | 16 | 32768 | Up to 12.5 Gigabit | | g6e.2xlarge | 8 | 65536 | Up to 20 Gigabit | +--------------+-----+--------+----------------------+

이미지

Amazon Machine Image(AMI)는 운영 체제, 서비스, 개발 도구, 애플리케이션과 같이 시작 시 인스턴스에 설치된 소프트웨어를 제공합니다. AMI를 다른 서버와 함께 사용할 다른 형식으로 내보낼 수 있습니다.

이것이 중요한 이유

인스턴스의 AMI를 확인한 후 기능적으로 동등한 서버에 필요한 이미지를 계획할 수 있습니다. 다른 곳에서 사용할 수 있는 형식으로 AMI 내보낼 수 있습니다. 또는 각 AMI에서 시작한 인스턴스에 연결하고, 설치된 항목과 구성 방식을 확인하고, 필요한 모든 항목의 복사본이 있는지 확인해야 할 수 있습니다.

인스턴스의 AMI를 가져오는 방법

다음 describe-instances 명령을 사용합니다. sed 명령은 대괄호와 빈 줄이 있는 줄을 제거합니다. 인스턴스가 있는 각 리전에서 이 명령을 실행해야 합니다.

aws ec2 describe-instances \ --query "Reservations[*].Instances[].ImageId" | sed 's/[][]//g;/^$/d' | sort | uniq -c | sort -nr

출력의 예시는 다음과 같습니다.

20 "ami-0a70b9d193ae8a79", 5 "ami-07d9cf938edb0739b", 2 "ami-09245d5773578a1d6",
특정 AMI에 대한 정보를 가져오는 방법

다음 describe-images 명령을 사용합니다. --query 파라미터는 지정된 필드만 출력에 포함합니다. 필요한 추가 필드를 포함할 수 있습니다.

aws ec2 describe-images \ --image-id ami-0a70b9d193ae8a79 ami-07d9cf938edb0739b ami-09245d5773578a1d6 \ --query "Images[*].{ID:ImageId,CreateDate:CreationDate,Name:Name,Description:Description}"

출력의 예시는 다음과 같습니다.

[ { "ID": "ami-0a70b9d193ae8a799", "CreateDate": "2025-03-01T02:22:41.000Z", "Name": "web-server-3.1", "Description": "Image for web servers" }, { "ID": "ami-07d9cf938edb0739b", "CreateDate": "2025-02-01T23:59:03.000Z", "Name": "awesome-application-11.5", "Description": "Image for Awesome Application" }, { "ID": "ami-09245d5773578a1d6", "CreateDate": "2025-01-31T02:22:41.000Z", "Name": "monitoring-4.2", "Description": "Monitoring software" } ]
AMI에서 VM 파일을 생성하는 방법

export-image 명령을 사용합니다. 지원되는 이미지 형식은 VHD(Citrix Xen 및 Microsoft Hyper-V와 호환), VMDK(VMware ESX 및 VMware vSphere와 호환), 원시 형식(KVM 및 Xen 하이퍼바이저와 호환)입니다. VM Import/Export의 요구 사항 및 제한 사항에 대한 자세한 내용은 VM Import/Export 요구 사항을 참조하세요.

IP 주소 및 DNS 호스트 이름

사용자는 퍼블릭 DNS 호스트 이름을 사용하여 인터넷을 통해 EC2 인스턴스에 연결합니다. EC2 인스턴스의 퍼블릭 DNS 호스트 이름으로 퍼블릭 IP 주소를 확인합니다. EC2 인스턴스는 프라이빗 IP 주소를 사용하여 서로 통신할 수 있습니다.

이것이 중요한 이유

IP 주소를 사용하면 디바이스가 로컬 네트워크 또는 인터넷을 통해 서로 통신할 수 있습니다. 인스턴스의 IP 주소와 DNS 이름을 기록하면 기능적으로 동등한 서버가 인스턴스와 동일한 클라이언트 또는 디바이스와 통신할 수 있도록 할 수 있습니다. 예를 들어 로드 밸런서 구성 또는 DNS 공급자에 대해 생성한 DNS 레코드를 업데이트할 수 있습니다.

인스턴스의 IP 주소 및 DNS 호스트 이름을 가져오는 방법

다음 describe-instances 명령을 사용합니다. 인스턴스가 있는 각 리전에서 이 명령을 실행해야 합니다. --query 파라미터는 지정된 필드만 출력에 포함합니다. 필요한 추가 필드를 포함할 수 있습니다.

aws ec2 describe-instances \ --query "Reservations[*].Instances[].[InstanceId,PrivateIpAddress,PublicDnsName]" \ --output table

출력의 예시는 다음과 같습니다. 열은 인스턴스 ID, 프라이빗 IPv4 주소, 퍼블릭 IPv4 DNS 이름입니다.

---------------------------------------------------------------------------------------- | DescribeInstances | +---------------------+------------+---------------------------------------------------+ | i-0bac57d7472c89bac | 10.0.2.139 | ec2-192-0-2-142.us-east-2.compute.amazonaws.com | | i-0fa8b7678975a3fff | 10.0.14.85 | ec2-198-51-100-56.us-east-2.compute.amazonaws.com | ... ... | i-08fd74f3f1595fdbd | 10.0.1.241 | ec2-203.0.113.13.us-east-2.compute.amazonaws.com | +---------------------+------------+---------------------------------------------------+

보안 그룹 규칙

보안 그룹은 가상 방화벽의 기능을 수행합니다. 보안 그룹을 EC2 인스턴스와 연결한 후 해당 규칙은 특정 포트 및 프로토콜을 통한 EC2 인스턴스의 인바운드 및 아웃바운드 트래픽을 허용합니다.

이것이 중요한 이유

서버에 도달할 수 있는 인바운드 트래픽과 서버에서 나갈 수 있는 아웃바운드 트래픽을 확인한 후 기능적으로 동등한 서버에 필요한 방화벽 규칙을 계획할 수 있습니다.

인스턴스의 보안 그룹을 변경하는 방법

다음 describe-instances 명령을 사용합니다. sed 명령은 대괄호와 빈 줄이 있는 줄을 제거합니다. 인스턴스가 있는 각 리전에서 이 명령을 실행해야 합니다.

aws ec2 describe-instances \ --query "Reservations[*].Instances[].SecurityGroups[].GroupId" | sed 's/[][]//g;/^$/d' | sort | uniq -c | sort -nr

출력의 예시는 다음과 같습니다.

27 "sg-01dd3383691d02f42", 10 "sg-08c77cc910c0b3b2c", 2 "sg-00f4e409629f1a42d",
보안 그룹의 인바운드 규칙을 가져오는 방법

다음 describe-security-group-rules 명령을 사용하여 IsEgressfalse인 지정된 보안 그룹에 대한 규칙을 표시합니다.

aws ec2 describe-security-group-rules \ --filters Name=group-id,Values=sg-01dd3383691d02f42 \ --query 'SecurityGroupRules[?IsEgress==`false`]'

출력의 예시는 다음과 같습니다. 첫 번째 규칙은 기본 인바운드 규칙으로,이 보안 그룹에 할당된 모든 리소스의 인바운드 트래픽을 허용합니다. 다른 규칙은 지정된 접두사 목록의 IP 주소에서 SSH 트래픽을 허용합니다. 접두사 목록의 CIDR 블록을 설명하려면 describe-prefix-lists 명령을 사용합니다.

[ { "SecurityGroupRuleId": "sgr-06c8b42574a91db1b", "GroupId": "sg-01dd3383691d02f42", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "ReferencedGroupInfo": { "GroupId": "sg-01dd3383691d02f42", "UserId": "123456789012" }, "Tags": [], "SecurityGroupRuleArn": "arn:aws:ec2:us-west-2:123456789012:security-group-rule/sgr-06c8b42574a91db1b" }, { "SecurityGroupRuleId": "sgr-0886a5d46afcd1758", "GroupId": "sg-01dd3383691d02f42", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "PrefixListId": "pl-f8a6439125e7bf465", "Tags": [], "SecurityGroupRuleArn": "arn:aws:ec2:us-east-2:123456789012:security-group-rule/sgr-0886a5d46afcd1758" } ]
보안 그룹의 아웃바운드 규칙을 가져오는 방법

다음 describe-security-group-rules 명령을 사용하여 IsEgresstrue인 지정된 보안 그룹에 대한 규칙을 표시합니다.

aws ec2 describe-security-group-rules \ --filters Name=group-id,Values=sg-01dd3383691d02f42 \ --query 'SecurityGroupRules[?IsEgress==`true`]'

출력의 예시는 다음과 같습니다. 모든 아웃바운드 IPv4 트래픽을 허용하는 기본 아웃바운드 규칙만 포함됩니다.

[ { "SecurityGroupRuleId": "sgr-048f09a719247dce7", "GroupId": "sg-01dd3383691d02f42", "GroupOwnerId": "123456789012", "IsEgress": true, "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIpv4": "0.0.0.0/0", "Tags": [], "SecurityGroupRuleArn": "arn:aws:ec2:us-east-2:123456789012:security-group-rule/sgr-048f09a719247dce7" } ]

사용자 데이터

EC2 인스턴스를 시작하면 사용자 데이터를 사용하여 인스턴스에 쉘 스크립트를 전달할 수 있습니다. 사용자 데이터는 base64로 인코딩되므로 스크립트를 읽으려면 사용자 데이터를 디코딩해야 합니다.

이것이 중요한 이유

인스턴스 설정의 일부로 시작 시 명령을 실행하는 경우 기능적으로 동등한 서버를 설정할 때 동일한 작업을 수행해야 할 수 있습니다.

인스턴스의 디코딩된 사용자 데이터를 보는 방법

다음 describe-instance-attribute 명령을 사용합니다. base64 명령은 사용자 데이터를 디코딩합니다.

aws ec2 describe-instance-attribute \ --instance-id i-1234567890abcdef0 \ --attribute userData \ --output text \ --query "UserData.Value" | base64 --decode

출력의 예시는 다음과 같습니다.

#!/bin/bash yum update -y service httpd start chkconfig httpd on

다음은 EC2 인스턴스의 추가 특성입니다.

다음을 사용하여 EC2 인스턴스를 시작하는지 또는 EC2 인스턴스 간에 트래픽을 분산하는지 확인할 수 있습니다.