# AWS 入门介绍
AWS是亚马逊公司出品的云端计算平台
# 课程目标
- 实现弹性架构
- 实现高性能架构
- 实现高可用架构
- 实现安全的架构
- 实现成本优化
# 设计系统架构该考虑的问题
- 需要几台服务器
- 每个服务器的功能(Web, Cache, DB,...)
- 需要什么硬件配置的服务器(CPU, MEM, HDD/SDD,...)
- 服务器放在哪里(IDC, Cloud,...)
- 服务器需要什么OS(Linux, Windows,...)
- 服务器需要什么软件(Apache,Nginx,Tomcat,MySQL,PostgreSQL,...)
- 网络构成是怎样的(客户端,中间层,服务层,数据层,分析层,AI层,...)
- 网络IP该如何规划(根据角色分配IP范围)
- 需要几个子网(对外公开,对内公开)
- 如何设计网络安全(服务访问授权,跟踪,数据加密,传输加密,WAF,DDos,...)
- 如果与本地连接(公司内网和云端通信机制)
- 如何提高服务可用性(负载均衡,多区域部署)
- 如何节省成本(性价比)
# 申请AWS账号
- 邮件地址
- 手机号码
- 信用卡号
# 基本操作
- 设置CloudWatch - 监控我的成本
- 设置IAM管理员 - 把权利装进笼子
- Root根账号
- 普通管理员
- 普通成员
- 设置CloudTrial - 你干啥我都知道
- 记录系统中用户或API的活动行为(Who,When,What,...)
- 理解区域和可用区 - 让我们把世界切分
- 理解区域(Regions)
- 理解可用区(Availability Zones)
# 搭建网络
考虑到系统整体可用性,今后需要将服务部署到多个AZ区,所以应该提前做好IP地址的规划
公开网络 主要用于对外公开的服务器,如:Web,API服务器
- 172.16.10.0/24
- 172.16.11.0/24
私有网络 主要用于内部使用的服务器,如:DB, Redis等
- 172.16.20.0/24
- 172.16.21.0/24
建立VPC - 建立我们自己的IDC
- 172.16.0.0/16
- learning-vpc
- 亚太地区(新加坡) ap-southeast-1a 可用区
建立公私网 - 公私分明才能网络安全
- 子网所属VPC learning-vpc
- 公开网络
- 172.16.10.0/24
- learning-web-1a
- 私有网络
- 172.16.20.0/24
- learning-db-1a
建立互联网网关 - 公开网络和私有网络的主要区别
- 建立互联网网关, 并绑定到VPC上,使VPC子网可以连上互联网
- 建立互联网网关: learning-igw
- 绑定到VPC learning-vpc 上
- 建立互联网网关, 并绑定到VPC上,使VPC子网可以连上互联网
建立公网路由表 - 让我们的子网连接到互联网
- 建立 learning-vpc 时,会默认建立一个路由表learning-rtb(已重命名),其中路由规则
- 172.16.0.0/16 --> local(本地learning-vpc) 目前还不具备和外界通信的功能
- 新增路由表 learning-web-rtb
- 绑定vpc deeplearnaws-vpc
- 编辑路由 0.0.0.0/0 --> 互联网网关 learning-igw
- 把新路由绑定到 learning-web-1a 子网
- 建立 learning-vpc 时,会默认建立一个路由表learning-rtb(已重命名),其中路由规则
两个防火墙 - 网络ACL和安全组SG
- 网络存取控制列表 - ACL 针对整个VPC生效
- 安全组 - SecurityGroup 针对AWS资源生效
- learning-web-sg 开通 SSH(22端口号)
# 建立EC2实例
- OS: Amazon Linux 2023 AMI
- 实例类型: t2.micro
- VPC: learning-vpc
- 子网: learning-web-1a
- 自动分配公有 IP
- 内网IP: 172.16.10.10/32
- Name: learning-web1
- 密钥对: learning-ssh-key
# SSH连接
$ cp ~/Downloads/learning-ssh-key.pem ./
$ chmod 400 learning-ssh-key.pem
# ec2-user默认User
$ ssh -i ./learning-ssh-key.pem ec2-user@13.212.94.88
- 建立AMI - 把自己的系统克隆
# 安装docker
sudo yum install -y docker
# 修改 docker 附加组给 ec2-user
sudo usermod -a -G docker ec2-user
docker version
sudo systemctl start docker
ps aux | grep docker
sudo systemctl enable docker
# 安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-linux-x86_64" -o /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose
docker-compose version
# 安装 node.js
curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y gcc-c++ make
sudo yum install -y nodejs
node -v
# 安装 git
sudo yum install git -y
git version
# 选装
sudo yum install -y nmap
# 重启
sudo reboot
# 关闭
sudo init 0
- 创建learning-ami
# 互联网网关
- 在公开网络中建立NAT网关
- Name: learning-web-nat
- SubNet: learning-web-1a
- Elastic IP 收费 及时关闭
- 建立DB私有网络的路由表, 设置NAT网关
- Name: learning-db-rtb
- Target: learning-web-nat -> 0.0.0.0/0
- 建立DB私有网络的安全组, 开放 3306 - MySQL端口
- Name: learning-db-sg
- Port: 3306
# 建立私有网段的服务器 - For MySQL
- 修改私有网段安全组,增加 Port:22 支持
- learning-db-sg
- Port: 22
- 在私有网段建立 EC2 实例
- Name: learning-db1
- 通过公有网段 web-ec2 实例连接到 db-ec2 实例
- 本地连接到 learning-web1
- 拷贝本地连接私钥到 learning-web1
- 通过 learning-web1 连接到 learning-db1
- lerning-db1测试
# @learning-web1
ssh -i ./learning-ssh-key.pem ec2-user@172.16.20.10
# @learning-db1
sudo yum update -y
curl www.baidu.com