AWS 学习笔记之 EC2

EC2 - Elastic Compute Cloud

付费方式

了解不同付费方式的区别:

  • On Demand 比如:需要Auto Scaling
  • Spot 比如:有大量计算任务,可以随时开始和停止
  • Reserved 比如:必须要很多主机常开
  • Dedicated Hosts 比如:不接受多租户

对于 Spot instances

  • 如果你终止了这些instance,你需要为最后一个小时付费
  • 如果AWS终止了这些instance(当前价格大于出价),你无需为这个小时付费

Instance 分类

Family Speciality Use Case Remarks
D2 存储密集 文件服务,数据仓库,Hadoop Dense Storage
R4 内存优化 内存密集型应用,数据库 RAM
M4 通用 应用服务器 Main
C4 运算优化 CPU密集型应用,数据库 Compute
G2 图形计算 视频编码,3D应用程序 Graphic
I2 高速存储 NoSQL数据库,数据仓库 IO
F1 FPGA 硬件加速 FPGA
T2 便宜通用 Web服务器,小型数据库 “t2.micro”
P2 GPU加速 机器学习,挖矿 Powerful
X1 超大内存 SAP HANA,Spark Extreme

记忆方法:Dr Mc Gift Px

EBS - Elastic Block Storage

EBS包含以下几种类型:

Name Description Remarks
GP2 SSD, General Purpose 最多 10,000 IOPS
IO1 SSD, Provisioned IOPS 高于 10,000 IOPS
ST1 HDD, Throughput Optimized 经常访问(不能用于Boot Volume)
SC1 HDD, Cold 不经常访问(不能用于Boot Volume)
Standard HDD, Magnetic 便宜,不经常访问

注意!你不能把一个EBS mount到多个EC2 Instance,如果你想这么做,应该用EFS。

一些注意点

  • Termination Protection 默认情况下是关闭的,建议打开
  • 对于 EBS-backed instance,默认情况下 root EBS 会随着 instance 的终止一同被删除
  • 默认情况下,Root volume 不能加密,如果你一定要加密可能得求助于第三方工具,比如 BitLocker

Volumes 和 Snapshot

  • Volume 存在 EBS 上,就是虚拟磁盘
  • Snapshot 存在 S3 上
  • 为 Volume 做一个 Snapshot,这会把 Volume 当前的内容存到 S3 上
  • Snapshot 是 Volume 在某个时刻的拷贝
  • Snapshot 是增量的,这也就意味着,只有变化的 Block 才会被备份
  • 因为上一条的原因,第一次创建 Snapshot 花的时间比较长,之后再创建则会很快

安全方面:

  • 加密 Volume 的 Snapshot 也会自动加密
  • 从加密 Snapshot 恢复出来的 Volume 也会自动加密
  • 你可以分享未加密的 Snapshot,加密的不可以分享
    • 分享给其他的 AWS 账号,或者公开

特别注意 Root Volume 的快照:

  • 如果要创建 Root Volume 的 Snapshot,你应该先 stop 这个 instance

EBS vs Instance Store

  • Instance Store Volumes 也被称作 Ephemeral Storage
  • Instance Store instance 是不能 stop 的,如果这个 instance 当机,数据就会丢失
  • EBS-backed instance 可以 stop,不会丢数据(显然的)
  • 对于二者,你都可以 reboot,不会丢失数据
  • 默认情况下,Root volume 都会随着 instance 被 terminate 而被删除,但是对于 EBS Volume 你可以让 AWS 保留

RAID 的 Snapshot

对于一般的 Volume,快照不会管那些被 cache 的数据,这个是 OK 的;但是对于 RAID,这就会导致问题,因为阵列里的各个磁盘互相独立。

你不能简单的像之前一样创建快照,应该去创建 Application Cosistent Snapshot。为此,创建快照之前,你需要

  • 停止所有的磁盘写入
  • Flush 所有的 disk cache

那到底怎么做呢?

  • Freeze 文件系统
  • Unmount 这个RAID
  • 关机(最简单的)

AMI - Amazon Machine Images

AMI 是有区域性的,只能在它所在的 region 上 launch 新的机器。但是你可以通过 Console 或者 CLI 把 AMI 从一个 region 拷贝到另一个 region。

CloudWatch

  • Standard Monitoring: 每 5 分钟一次
  • Detailed Monitoring: 每 1 分钟一次

注意区分 CloudTrail 和 CloudWatch:

  • CloudWatch 是用来做性能监控、日志收集等
  • CloudTrail 监视 AWS 账户的变动,用于审计

可以用 CloudWatch 做哪些事情?

  • Dashboards - 创建酷炫的 Dashboard,监视你的 AWS 环境
  • Alarms - 可以创建某些告警,当达到阈值时通知你
  • Events - 帮助你对某些 AWS 资源的状态改变作出反应
  • Logs - 帮助你收集,监视和存储日志

IAM Roles

  • 比起把 Access Key / Secret Access Key 设置到 EC2 instance 上,使用 Roles 更为安全
  • Roles 更容易管理
  • Roles 可以在 EC2 创建之后再 assign 上去,但是到目前为止只能用 CLI 做这件事
  • Roles 是全局的(IAM都是)

Instance Metadata

  • 用于获取当前 instance 的信息
  • 地址:http://169.254.169.254/latest/meta-data
  • 没有用户数据

EFS (Elastic File System)

  • 支持 Network File System v4 (NFSv4) 协议
  • 只需要为使用的存储空间付费,无需 pre-provisioning
  • 易扩展,支持 PB 级别数据
  • 支持上千个 NFS 连接
  • 数据跨 AZ 存储
  • 保证读写一致性(Read-after-write consistency)

Lambda

AWS Lambda 是一个计算服务,你只需要上传你的代码,创建一个 Lambda 函数,AWS Lambda 会帮你搞定所需的服务器,你完全不用关心操作系统、补丁、扩展之类的事情。

你可以用以下两种方式使用 Lambda:

  • 作为一个 event-driven 的服务,响应某些 event,比如 S3 Bucket 的新文件,DynamoDB 表的变化等
  • 作为 API Gateway 的后端,应答 HTTP 请求