简介
团队需要一台服务器来运行小型报表应用。在本实验中,你将启动 Amazon EC2 实例,通过 SSH 连接,修改应用的问候语,并在 AWS View 中检查响应。最后,你将终止实例并确认最终状态。
你应了解基本终端命令,以及 VPC、子网和安全组的用途。实验环境提供网络、Ubuntu 镜像、SSH 密钥对和应用软件。应用实例由你亲自创建和配置。
认证备考关联
本实验练习通过程序操作 AWS,以及选择 EC2 作为计算服务,对应 AWS Certified Cloud Practitioner CLF-C02 考试领域 3 的任务 3.1 和 3.3。你还将区分镜像、实例类型和运行中的实例。
启动应用实例
在本步骤中,你将检查预置镜像,并在提供的网络中启动一个 EC2 实例。
EC2 实例是一台虚拟服务器。Amazon Machine Image(AMI)提供操作系统和初始软件。实例类型规定计算与内存容量的组合。本实验选择小型通用实例类型 t3.micro 来运行入门应用。
首先进入项目目录:
cd /home/labex/project
launch.env 文件保存预置镜像、子网和安全组的标识符。查看文件,了解即将使用的资源:
cat launch.env
这些值是资源 ID,不同环境中的值会不同。使用 source 将它们加载到当前 shell;该命令会读取文件中的变量赋值:
source launch.env
检查 AMI。--image-ids 用于选择镜像,--query 用于限定显示的字段:
aws ec2 \
describe-images \
--image-ids "$AMI_ID" \
--query 'Images[].{Image:ImageId,Name:Name,Architecture:Architecture}'
确认镜像名称为 report-server-ubuntu-2204,架构为 x86_64。镜像包含 Ubuntu 和报表应用,因此你可以专注于启动和操作服务器。
子网决定实例所在的网络位置。预置安全组允许来自实验访问网络的 SSH 流量(端口 22)和应用请求(端口 8081)。密钥对 report-key 提供安装在实例上的公钥;项目目录中提供了对应私钥,用于 SSH 连接。
使用预置资源启动一个实例。--count 1 创建一台服务器,标签为它设置便于识别的名称 report-server:
aws ec2 \
run-instances \
--image-id "$AMI_ID" \
--instance-type t3.micro \
--subnet-id "$SUBNET_ID" \
--security-group-ids "$SECURITY_GROUP_ID" \
--key-name report-key \
--count 1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=report-server}]'
响应包含新实例的 ID 和初始状态。将实例 ID 保存到 shell 变量中,供后续命令使用。$(...) 会执行括号内的命令并保存输出;--output text 以纯文本形式返回 ID:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=report-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
检查实例的状态和地址:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
确认状态为 running,并且同时存在私有和公网 IPv4 地址。如果状态仍为 pending,稍等片刻后重复检查命令。私有地址标识 VPC 内的服务器;公网地址是通过实验访问网络连接服务器时使用的目标地址。
连接并配置应用
在本步骤中,你将通过 SSH 连接实例,修改报表应用的问候语,并在 AWS View 中测试响应。
将实例的公网 IPv4 地址保存到另一个 shell 变量:
PUBLIC_IP=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text)
SSH 建立到服务器的加密终端连接。Ubuntu 镜像使用登录名 ubuntu。预置的 ssh_config 指定私钥和实验连接路径;-F 告诉 SSH 读取该配置文件:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
终端现在位于应用实例内。确认当前登录用户:
whoami
输出应为 ubuntu。这可以区分应用实例和 LabEx 终端;后者的用户为 labex。
预置应用从 /etc/report-app/config.json 读取问候语。更新这个系统文件需要管理员权限。sudo tee 将以下文本写入文件,两个 JSON 标记之间的 here-document 提供要写入的内容:
sudo tee /etc/report-app/config.json <<'JSON'
{
"message": "Hello from EC2"
}
JSON
应用在每次请求时重新读取配置。使用 curl 通过实例的回环地址请求健康检查端点:
curl -sS http://127.0.0.1:8081/health
JSON 响应应标识 Report server 服务,并包含 "message": "Hello from EC2"。这说明实例内的应用正在使用你的配置返回响应。
退出 SSH 会话,回到 LabEx 终端:
exit
打开 AWS View,点击 Refresh resources。在实例表中找到 report-server。确认状态为 running,并将它的公网 IPv4 地址与 CLI 返回的地址进行比较。
在 Application requests 下选择运行中的实例,点击 Check application。确认收到包含 Hello from EC2 的 HTTP 200 响应。请求会发送到实例当前的公网地址,同时检查网络连通性和服务器中的应用。

示例检查点:应用返回 HTTP 200 和 Hello from EC2。你的资源 ID 和地址会不同。
终止服务器
在本步骤中,你将终止应用实例,并确认它不再运行。
终止操作会永久移除实例。使用之前保存的 ID,只选择你创建的应用服务器:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
响应显示操作前后的状态。AWS CLI 还提供 waiter,它会轮询资源,直到资源达到指定状态。等待终止完成:
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
条件满足后,waiter 不会输出内容。检查最终状态:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
确认状态为 terminated。实例记录可能在终止后仍可见;这并不表示服务器仍在运行。
在 AWS View 中点击 Refresh resources。实例应显示 terminated,并且不再出现在运行中的应用目标列表中。保留预置网络和密钥对。
总结
你使用 AMI、实例类型、网络资源和 SSH 密钥对启动了 EC2 实例。随后,你连接服务器、配置报表应用,并通过 AWS View 验证响应。最后,你终止实例并确认了最终状态。



