十二月 21, 2025
28 分钟阅读

初级 AWS 云工程师面试题与答案

interview
career-advice
job-search
entry-level
初级 AWS 云工程师面试题与答案
Milad Bonakdar

Milad Bonakdar

作者

围绕 EC2、S3、VPC、IAM、CloudWatch 和基础运维场景,准备初级 AWS 云工程师面试。


先重点准备什么

初级 AWS 云工程师面试通常会考察你是否能清楚解释核心服务、设计一个基础架构,并发现常见运维问题。先准备 EC2 生命周期、S3 存储类、VPC 路由、IAM 最小权限、CloudWatch,以及安全组和网络 ACL 的区别。

下面的答案适合用来练习,不是背诵稿。好的初级回答会说明服务作用、给出真实使用场景,并提到一个安全默认设置或关键取舍。


AWS EC2 (Elastic Compute Cloud)

1. 什么是 AWS EC2,其主要优势是什么?

答案: EC2 (Elastic Compute Cloud) 在云中提供可调整大小的虚拟服务器。

主要优势:

  • 弹性: 根据需求进行向上/向下扩展
  • 按需付费: 只为您使用的资源付费
  • 多样性: 多种实例类型适用于不同的工作负载
  • 全球性: 在全球多个区域部署
  • 集成: 与其他 AWS 服务无缝协作

常见用例:

  • Web 托管
  • 应用程序服务器
  • 开发/测试环境
  • 批量处理
  • 高性能计算

常见程度: 非常常见 难度: 简单


2. 解释停止和终止 EC2 实例之间的区别。

答案:

停止实例:

  • 实例关闭但未删除
  • EBS 根卷通常会保留
  • 已挂载的 EBS 卷和其他付费资源仍可能继续计费
  • 稍后可以使用相同的配置重新启动
  • 弹性 IP 会保持关联,但自动分配的公有 IPv4 地址可能会变化
  • 实例 ID 保持不变

终止实例:

  • 实例被永久删除
  • EBS 根卷默认会被删除,除非配置为保留
  • 计算费用会停止,但保留的卷、快照和未使用的弹性 IP 仍可能产生费用
  • 无法重新启动
  • 弹性 IP 被取消关联
  • 实例 ID 无法重复使用
# AWS CLI 示例

# 停止实例
aws ec2 stop-instances --instance-ids i-1234567890abcdef0

# 启动已停止的实例
aws ec2 start-instances --instance-ids i-1234567890abcdef0

# 终止实例
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0

常见程度: 非常常见 难度: 简单


AWS S3 (Simple Storage Service)

3. 什么是 Amazon S3,有哪些不同的存储类?

答案: S3 是一种对象存储,用于存储和检索来自任何位置的任意数量的数据。

面试中不要只背价格表。先说明访问模式,再选择合适的存储类。

存储类:

存储类用例可用性成本
S3 Standard频繁访问的数据99.99%最高
S3 Express One Zone单个 AZ 内非常频繁、低延迟访问的数据单个 AZ高性能
S3 Intelligent-Tiering未知/变化的访问模式99.9%自动优化
S3 Standard-IA不频繁访问99.9%较低
S3 One Zone-IA不频繁,非关键99.5%最低 IA
S3 Glacier Instant存档,即时检索99.9%非常低
S3 Glacier Flexible存档,几分钟到几小时的检索99.99%非常低
S3 Glacier Deep Archive长期存档,12 小时检索99.99%最低
# 创建 S3 存储桶
aws s3 mb s3://my-bucket-name

# 上传文件
aws s3 cp myfile.txt s3://my-bucket-name/

# 列出对象
aws s3 ls s3://my-bucket-name/

# 下载文件
aws s3 cp s3://my-bucket-name/myfile.txt ./

常见程度: 非常常见 难度: 简单-中等


AWS VPC (Virtual Private Cloud)

4. 什么是 AWS VPC,其主要组成部分是什么?

答案: VPC 是一个逻辑上隔离的虚拟网络,您可以在其中启动 AWS 资源。

主要组成部分:

Loading diagram...

组成部分:

  1. 子网: VPC IP 范围的段

    • 公有子网:具有到 Internet 网关的路由
    • 私有子网:没有直接的互联网访问
  2. Internet 网关: 启用互联网访问

  3. NAT 网关: 允许私有子网访问互联网(仅限出站)

  4. 路由表: 控制流量路由

  5. 安全组: 实例级别的防火墙(有状态)

  6. 网络 ACL: 子网级别的防火墙(无状态)

常见程度: 非常常见 难度: 中等


5. 安全组和网络 ACL 之间有什么区别?

答案:

特性安全组网络 ACL
级别实例子网
状态有状态无状态
规则仅允许允许和拒绝
返回流量自动必须显式允许
应用选择性(每个实例)子网中的所有实例
规则评估所有规则规则按顺序

示例:

# 创建安全组
aws ec2 create-security-group \
  --group-name web-sg \
  --description "Web server security group" \
  --vpc-id vpc-1234567890abcdef0

# 添加入站规则(允许 HTTP)
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 80 \
  --cidr 0.0.0.0/0

# 添加入站规则(允许来自特定 IP 的 SSH)
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 22 \
  --cidr 203.0.113.0/24

常见程度: 非常常见 难度: 中等


AWS IAM (Identity and Access Management)

6. 解释 IAM 用户、组和角色。

答案: IAM 控制对 AWS 资源的访问。

IAM 用户:

  • 具有凭证的个人身份
  • 长期凭证(密码、访问密钥)
  • 用于人员或应用程序

IAM 组:

  • 用户的集合
  • 将策略附加到组
  • 用户继承组权限

IAM 角色:

  • 临时凭证
  • 由用户、应用程序或服务承担
  • 没有长期凭证
  • 用于 EC2 实例、Lambda 函数、跨账户访问
// IAM 策略示例(S3 只读)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ]
    }
  ]
}

最佳实践:

  • 使用角色用于 EC2 实例(而不是访问密钥)
  • 遵循最小权限原则
  • 为特权用户启用 MFA
  • 定期轮换凭证
  • 使用组进行权限管理

常见程度: 非常常见 难度: 中等


AWS 核心概念

7. 什么是 AWS 区域和可用区?

答案:

AWS 区域:

  • 地理位置(例如,us-east-1,eu-west-1)
  • 包含多个可用区
  • 与其他区域隔离
  • 根据以下因素选择:延迟、合规性、成本

可用区 (AZ):

  • 一个区域内的一个或多个数据中心
  • 与其他 AZ 中的故障隔离
  • 通过低延迟网络连接
  • 跨多个 AZ 部署以实现高可用性
Loading diagram...

高可用性示例:

# 在多个 AZ 中启动实例
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t2.micro \
  --subnet-id subnet-1a \
  --count 1

aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t2.micro \
  --subnet-id subnet-1b \
  --count 1

常见程度: 非常常见 难度: 简单


8. 什么是 AMI (Amazon Machine Image)?

答案: AMI 是用于创建 EC2 实例的模板。

包含:

  • 操作系统
  • 应用程序服务器
  • 应用程序
  • 配置设置

类型:

  • AWS 提供: Amazon Linux、Ubuntu、Windows
  • Marketplace: 第三方 AMI
  • 自定义: 您自己的 AMI

创建自定义 AMI:

# 从正在运行的实例创建 AMI
aws ec2 create-image \
  --instance-id i-1234567890abcdef0 \
  --name "My-Web-Server-AMI" \
  --description "Web server with Apache configured"

# 从 AMI 启动实例
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t2.micro \
  --key-name my-key-pair

用例:

  • 标准化部署
  • 备份和恢复
  • 自动伸缩
  • 多区域部署

常见程度: 常见 难度: 简单-中等


AWS 存储

9. 什么是 EBS,有哪些不同的卷类型?

答案: EBS (Elastic Block Store) 为 EC2 实例提供持久性块存储。

卷类型:

类型用例性能成本
gp3 (通用 SSD)大多数工作负载3,000-16,000 IOPS最低 SSD
gp2 (通用 SSD)遗留,通用高达 16,000 IOPS
io2/io1 (预配置 IOPS)数据库,关键应用程序高达 64,000 IOPS最高
st1 (吞吐量优化 HDD)大数据,数据仓库高吞吐量
sc1 (冷 HDD)不频繁访问最低成本最低

创建和附加 EBS:

# 创建 EBS 卷
aws ec2 create-volume \
  --availability-zone us-east-1a \
  --size 100 \
  --volume-type gp3 \
  --iops 3000 \
  --throughput 125

# 附加到实例
aws ec2 attach-volume \
  --volume-id vol-1234567890abcdef0 \
  --instance-id i-1234567890abcdef0 \
  --device /dev/sdf

# 格式化和挂载(在实例上)
sudo mkfs -t ext4 /dev/sdf
sudo mkdir /data
sudo mount /dev/sdf /data

# 使其永久化(添加到 /etc/fstab)
echo "/dev/sdf /data ext4 defaults,nofail 0 2" | sudo tee -a /etc/fstab

EBS 快照:

# 创建快照
aws ec2 create-snapshot \
  --volume-id vol-1234567890abcdef0 \
  --description "Backup before upgrade"

# 从快照还原
aws ec2 create-volume \
  --snapshot-id snap-1234567890abcdef0 \
  --availability-zone us-east-1a \
  --volume-type gp3

# 将快照复制到另一个区域
aws ec2 copy-snapshot \
  --source-region us-east-1 \
  --source-snapshot-id snap-1234567890abcdef0 \
  --destination-region us-west-2

主要功能:

  • 持久性: 如果卷配置为保留,数据可以在实例删除后继续存在
  • 快照: 到 S3 的时间点备份
  • 加密: 静态和传输中
  • 可调整大小: 无需停机即可增加大小
  • 多重附加: io2 卷可以附加到多个实例

最佳实践:

  • 对于大多数工作负载,使用 gp3(更好的性价比)
  • 默认启用加密
  • 定期快照进行备份
  • 删除未使用的卷以节省成本

常见程度: 非常常见 难度: 简单-中等


10. 解释 S3 存储桶策略以及它们与 IAM 策略的不同之处。

答案: 两者都控制对 S3 的访问,但它们的工作方式不同:

IAM 策略:

  • 附加到用户、组或角色
  • 控制 身份 可以做什么
  • 在 IAM 中集中管理

S3 存储桶策略:

  • 附加到 S3 存储桶
  • 控制对特定存储桶的访问
  • 可以授予跨账户访问权限
  • 可以按 IP 地址限制

IAM 策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

S3 存储桶策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-public-bucket/*"
    },
    {
      "Sid": "RestrictByIP",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "203.0.113.0/24"
        }
      }
    }
  ]
}

应用存储桶策略:

# 创建策略文件 (policy.json)
# 然后应用它
aws s3api put-bucket-policy \
  --bucket my-bucket \
  --policy file://policy.json

# 查看当前策略
aws s3api get-bucket-policy \
  --bucket my-bucket

# 删除策略
aws s3api delete-bucket-policy \
  --bucket my-bucket

常见用例:

1. 公共网站托管:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-website/*"
    }
  ]
}

2. 跨账户访问:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::shared-bucket",
        "arn:aws:s3:::shared-bucket/*"
      ]
    }
  ]
}

3. 强制加密:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
  ]
}

何时使用:

  • IAM 策略: 控制您的用户/应用程序可以做什么
  • 存储桶策略: 控制谁可以访问您的存储桶(包括外部帐户)

常见程度: 非常常见 难度: 中等


监控与管理

11. 什么是 CloudWatch,您如何使用它进行监控?

答案: CloudWatch 是 AWS 的监控和可观察性服务。

主要组成部分:

1. 指标:

  • 随时间变化的数值数据点
  • EC2:CPU、网络、磁盘
  • RDS:连接、IOPS
  • 自定义指标:特定于应用程序
# 查看 EC2 CPU 指标
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
  --start-time 2024-11-25T00:00:00Z \
  --end-time 2024-11-25T23:59:59Z \
  --period 3600 \
  --statistics Average,Maximum

# 发布自定义指标
aws cloudwatch put-metric-data \
  --namespace MyApp \
  --metric-name PageLoadTime \
  --value 0.5 \
  --unit Seconds

2. 告警:

# 为高 CPU 创建告警
aws cloudwatch put-metric-alarm \
  --alarm-name high-cpu-alarm \
  --alarm-description "Alert when CPU exceeds 80%" \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --statistic Average \
  --period 300 \
  --threshold 80 \
  --comparison-operator GreaterThanThreshold \
  --evaluation-periods 2 \
  --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
  --alarm-actions arn:aws:sns:us-east-1:123456789012:my-topic

3. 日志:

# 创建日志组
aws logs create-log-group \
  --log-group-name /aws/application/myapp

# 创建日志流
aws logs create-log-stream \
  --log-group-name /aws/application/myapp \
  --log-stream-name instance-1

# 放入日志事件
aws logs put-log-events \
  --log-group-name /aws/application/myapp \
  --log-stream-name instance-1 \
  --log-events \
    timestamp=1234567890000,message="Application started" \
    timestamp=1234567891000,message="Processing request"

# 查询日志
aws logs filter-log-events \
  --log-group-name /aws/application/myapp \
  --filter-pattern "ERROR" \
  --start-time 1234567890000

4. 仪表板:

# 使用 boto3 创建仪表板
import boto3
import json

cloudwatch = boto3.client('cloudwatch')

dashboard_body = {
    "widgets": [
        {
            "type": "metric",
            "properties": {
                "metrics": [
                    ["AWS/EC2", "CPUUtilization", {"stat": "Average"}]
                ],
                "period": 300,
                "stat": "Average",
                "region": "us-east-1",
                "title": "EC2 CPU Utilization"
            }
        },
        {
            "type": "metric",
            "properties": {
                "metrics": [
                    ["AWS/RDS", "DatabaseConnections"]
                ],
                "period": 300,
                "stat": "Sum",
                "region": "us-east-1",
                "title": "RDS Connections"
            }
        }
    ]
}

cloudwatch.put_dashboard(
    DashboardName='MyAppDashboard',
    DashboardBody=json.dumps(dashboard_body)
)

常见监控场景:

监控 EC2 实例:

# CPU、网络、磁盘指标是自动的
# 对于内存,需要 CloudWatch 代理

# 安装 CloudWatch 代理
wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
sudo rpm -U ./amazon-cloudwatch-agent.rpm

# 配置代理(创建配置文件)
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

# 启动代理
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config \
  -m ec2 \
  -s \
  -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

监控应用程序日志:

# 具有 CloudWatch 日志记录的 Python 应用程序
import boto3
import logging
from datetime import datetime

class CloudWatchHandler(logging.Handler):
    def __init__(self, log_group, log_stream):
        super().__init__()
        self.client = boto3.client('logs')
        self.log_group = log_group
        self.log_stream = log_stream
        
    def emit(self, record):
        log_entry = self.format(record)
        self.client.put_log_events(
            logGroupName=self.log_group,
            logStreamName=self.log_stream,
            logEvents=[{
                'timestamp': int(datetime.now().timestamp() * 1000),
                'message': log_entry
            }]
        )

# 用法
logger = logging.getLogger()
logger.addHandler(CloudWatchHandler('/aws/myapp', 'instance-1'))
logger.info("Application started")

最佳实践:

  • 为关键指标设置告警
  • 使用日志组来组织日志
  • 创建仪表板以进行快速概览
  • 设置保留策略以控制成本
  • 使用指标筛选器进行日志分析

常见程度: 非常常见 难度: 中等


结论

准备初级 AWS 云工程师面试需要了解核心服务和云概念。 重点关注:

  1. EC2: 实例类型、生命周期、安全性
  2. S3: 存储类、存储桶策略、版本控制
  3. VPC: 网络、子网、安全组
  4. IAM: 用户、角色、策略、最小权限
  5. 核心概念: 区域、AZ、AMI

练习使用 AWS 控制台和 CLI 以获得实践经验。 祝你好运!

Newsletter subscription

真正有效的每周职业建议

将最新见解直接发送到您的收件箱

停止申请,开始被录用

使用全球求职者信赖的AI驱动优化,将您的简历转变为面试磁铁。

免费开始

分享这篇文章

战胜75%的ATS拒绝率

4份简历中有3份从未被人眼看到。我们的关键词优化将您的通过率提高了80%,确保招聘人员真正看到您的潜力。