AWS云服务实战:EC2、S3与Lambda深度解析

一、EC2(弹性计算云)

核心功能:提供可扩展的虚拟服务器
实战场景:部署Web应用

# 创建安全组(开放HTTP/HTTPS)
aws ec2 create-security-group --group-name WebServerSG --description "Web Traffic"

# 启动Ubuntu实例(t2.micro)
aws ec2 run-instances --image-id ami-0abcdef1234567890 --count 1 --instance-type t2.micro \
--key-name MyKeyPair --security-groups WebServerSG

关键公式:
实例成本计算(按需定价):
$$ \text{月费用} = \text{实例单价} \times \text{运行小时数} \times 30 $$
例如:$0.0116/\text{小时} \times 24 \times 30 = 8.352\text{美元}$


二、S3(简单存储服务)

核心功能:对象存储服务(99.999999999%持久性)
实战场景:静态网站托管

import boto3
s3 = boto3.client('s3')

# 创建存储桶并启用静态网站
s3.create_bucket(Bucket='my-website-bucket')
s3.put_bucket_website(
    Bucket='my-website-bucket',
    WebsiteConfiguration={
        'IndexDocument': {'Suffix': 'index.html'}
    }
)

# 上传HTML文件
s3.upload_file('index.html', 'my-website-bucket', 'index.html')

存储成本模型:
$$ \text{月费用} = \frac{\text{存储量(GB)} \times \text{单价}}{1000} + \text{请求次数} \times \text{请求单价} $$
标准存储:$0.023/GB·月$


三、Lambda(无服务器计算)

核心功能:事件驱动型代码执行(无需管理服务器)
实战场景:图片缩略图生成

const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const sharp = require('sharp');

exports.handler = async (event) => {
  const bucket = event.Records[0].s3.bucket.name;
  const key = event.Records[0].s3.object.key;
  
  // 下载原图
  const image = await s3.getObject({ Bucket: bucket, Key: key }).promise();
  
  // 生成缩略图
  const thumbnail = await sharp(image.Body)
    .resize(200, 200)
    .toBuffer();
  
  // 上传缩略图
  await s3.putObject({
    Bucket: bucket,
    Key: `thumbnails/${key}`,
    Body: thumbnail
  }).promise();
};

成本优势:
$$ \text{费用} = \frac{\text{执行时间(ms)} \times \text{内存(GB)}}{1000} \times \text{单价} $$
每百万请求最低$0.20(128MB内存)


四、协同实战:自动化数据处理流水线

架构流程:

  1. S3触发:用户上传CSV文件至raw-data桶
  2. Lambda处理:
    • 数据清洗
    • 格式转换
    • 存储至processed-data桶
  3. EC2调度:
    • 每日启动分析实例
    • 处理processed-data数据
    • 生成报告后自动终止

效益公式:
$$ \text{总成本} = \underbrace{\text{S3存储}}{\text{低频访问}} + \underbrace{\text{Lambda执行}}{\text{按次计费}} + \underbrace{\text{EC2运行}}_{\text{定时关闭}} $$
对比全天运行EC2:成本降低约$70%$

最佳实践:

  • EC2用于长时间稳定负载
  • Lambda处理突发/事件驱动任务
  • S3作为数据中枢连接各服务
    通过VPC对等连接确保组件间安全通信

更多推荐