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 请求