建立 EC2 執行個體的庫存 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立 EC2 執行個體的庫存

Amazon EC2 提供隨需、可擴展的運算容量。EC2 執行個體是在 AWS 網路中執行的虛擬伺服器。

下表描述了 EC2 執行個體的關鍵特性。系統管理員可運用本指南提供的說明,取得這些特性的相關資訊,並用於配置在內部部署或其他雲端服務供應商網路中執行的功能等效伺服器。

特性 Description
地理位置 Amazon EC2 託管於全球所有 AWS 區域。您可以選取執行個體地點,使其靠近您的客戶。可以在多個地點啟動執行個體。
硬體規格 Amazon EC2 提供各式各樣的最佳化執行個體類型,以滿足不同的使用案例。您為執行個體選取的執行個體類型決定其運算、記憶體、聯網和儲存資源。
映像 Amazon Machine Image (AMI) 包含了啟動時要在執行個體上安裝的軟體。其中包括作業系統、軟體套件與自訂組態。
IP 位址與 DNS 主機名稱 執行個體會收到私有 IP 位址與私有 DNS 主機名稱。若您為執行個體設定公有 IP 位址,該執行個體也會收到公有 DNS 主機名稱。
安全群組規則 與執行個體相關聯的安全群組規則會決定允許哪些傳入流量與輸出流量。
使用者資料 使用者資料會在啟動時,提供給執行個體。它包含 shell 指令碼 (Linux) 或 PowerShell 指令碼 (Windows)。

地理位置

Amazon EC2 適用於全球每個 AWS 區域。各個 區域為獨立的地理區域。選擇靠近大多數使用者的區域部署伺服器,可降低網路延遲。

您可使用 Amazon EC2 Global View 列出所有區域的 Amazon EC2 執行個體。使用 AWS 管理主控台 和 API,您必須個別列出每個區域的執行個體。

為什麼這很重要

確認執行個體的部署位置後,您可根據需求決定,將功能等效伺服器部署在相同位置或不同位置。

取得全部區域的 EC2 執行個體摘要
  1. 前往 https://console.aws.amazon.com/ec2globalview/home 開啟 Amazon EC2 全域檢視主控台。

  2. 區域瀏覽器索引標籤的摘要下,檢查執行個體的資源計數,其中包括執行個體數量與區域數量。點選帶有底線文字,即可查看執行個體數量在各區域的分佈情況。

  3. 全域搜尋索引標籤上,選取用戶端篩選條件資源類型 = 執行個體。您可以透過指定區域或標籤進一步篩選結果。

使用 取得區域中的 EC2 執行個體數量 AWS CLI

使用下列 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 Hypervisor 相容)。如需 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 執行個體時,可藉助使用者資料將 shell 指令碼傳遞至執行個體。請注意,使用者資料是 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 執行個體之間分配流量: