概要:云是什么,在亚马逊云创建Ubuntu 16.04虚拟服务器,从本地机器连接到服务器,关闭、重启服务器,AWS计费方式
读者:计划使用云的朋友
时间:5000字,阅读10min,操作5min
前提:一个亚马逊“云”账号
首先说一下什么是云(粗浅的理解,懂得朋友请跳过或给予建议)。我们平时在使用电脑的时候,键盘和主机是连在一起的。使用过腾讯QQ“远程协助”功能的朋友会用自己的键盘鼠标控制对方的电脑。当使用电脑做科学计算的时候,大家一般使用一个叫命令行的东西远程连接到另一台电脑上,这个时候我们在用本地(local)键盘远程(remote)控制一台强大一点的电脑,我们把它叫做服务器。一般小型公司、学校都会有自己内部的服务器,集中放在一个叫机房的地方,只有内部人员才能连接到这些内部服务器上。当有一家公司建了一个机房,全世界所有人都能连接过去并操作里面的服务器的时候,我们就把这家公司的机房叫做“云”了。一个比喻是,想象一下你进了一家网吧,里面只有键盘鼠标和屏幕,然后网管对“云”说了一句话,“帮我开一台电脑,并且把这个位置的键盘鼠标和屏幕连接到那台电脑上”,然后你就可以遥控那台电脑了。云的一个优点是,如果你只是要写一个word文档,发一封电子邮件,网管会说,开一台配置低一点的的电脑(实际上,这个时候你会和别人共用一台电脑,所以也就有了虚拟服务器的说法。),然后你要交的上网费就少一些;如果你要玩游戏,那就开一台符合那款游戏所需配置的电脑;如果你要做大量科学计算,那就开一台超级计算机。当你使用完毕之后,网管会要求云把那台电脑终止掉。所以是按需求选择服务器,按使用付费。亚马逊是很早就开始提供云服务并做的很不错的一家公司。
然后说下几个词。AWS 是 Amazon Web Service 的缩写,也就是 亚马逊云服务 ,本系列教程中会使用该缩写。EC2 是 Elastic Compute Cloud 的缩写(估计是有2个C所以写成EC2避免和其他领域的ECC混淆),即 弹性计算云(我的理解就是按需使用吧)。还有一个词,叫 Instance , 实例 。EC2只是一个概念,当你开了一台EC2的服务器,那台服务器就是一个 EC2实例 。就像“苹果”这个词只是一个人们交流时候的一个概念,而你手上拿着的准备吃的“一个苹果”是这个概念的一个 实 际的 例 子。
接下来我们开始今天的主要内容。大家需要一个 AWS 的账号以完成后面的学习。如果你是第一次注册的话,会有免费试用一台微型服务器12个月的优惠。如果你是老用户,并且免费使用额度已用完,那么跟随本教程将产生费用,请查询 AWS 官网获取最新价格列表。注册页面。
区域选择
首先登录到 AWS ,在右上角用户名后面,会有一个选择地理区域的下拉框,列表里面是AWS在全球的几个机房中心,大家可以选择一个离自己最近的位置,这会直接决定你连接并控制远程服务器的速度。国内用户推荐选择“Asia Pacific (Tokyo)”。之后,如果你有一些特殊的计算需求,如GPU计算,需要选择支持相应需求的地域。就像一个学校有两个食堂,大家一般都会选择离自己近的食堂吃饭。但是如果有你特别想吃的菜,你可能会去另一个食堂。(延伸:不同区域的价格会有些许不同。)
创建EC2实例
点击左上角的 Services,中间有一个搜索框,输入EC2,按下回车键进入EC2管理界面。页面中央第一栏是 Resources (资源),第二栏是 Create Instance (创建实例),点击 Create Instance 栏目下的蓝色按钮 Launch Instance (启动实例)。
接下来有一系列步骤,有一点像 Windows 系统下安装新软件的流程,问你要安装在哪个位置,是否需要添加桌面快捷方式等等。启动一个EC2实例的步骤比较多,不过有很多地方可以使用默认值,我们第一次只做必要的修改,大部分都保留为默认值,在后面的教程中,会陆续讲到相应的含义和设置方法。
第一步,选择 Amazon Machine Image (AMI)。 假设你去商场买一台 Windows 电脑,里面会有 Windows 的系统和 Word、Excel 等常用软件;如果你买的是一台苹果电脑,里面会有苹果系统和 Safari、Reminders 等常用软件。AMI 负责的就是服务器的预装系统和预装软件等东西。我们选择 ”Ubuntu Server 16.04 LTS (HVM), SSD Volume Type“,目前(20170429)是第四个选项,这是一款开源的、常用的 Linux 系统。
第二步,选择 Instance Type (实例类型)。这个就是服务器的配置了。比如如果你只是发邮件,那就选低配一点的;如果是科学计算、人工智能的模型运算,就选高配一些的。我们选择第二个,”t2.micro“,然后点击右下角的”Next: Configure Instance Details“。【延伸:类型有很多,有针对 CPU 计算的,有针对 GPU 计算的,有针对高内存使用的,也有通用类型的。在这个价格页面可以看到详细的分类和其价格。其命名是 样式.大小,就像衣服的样式,和衣服的大小一样。如 c4.2xlarge,是计算优化的第4代(我推测),2x 大小的。一般同样大小下,新一代的要比旧的性能更好,价格更低。如 c4.large 比c3.large 性能高,但是价格更低。如果需要做大规模 GPU 计算,建议选择 p2 类型,原因详见这里。前述价格页面可以查看不同区域的价格,一般房价高的地方,价格会更高。如东京、首尔、新加坡单价都是很高的,弗吉尼亚北部、俄亥俄、俄勒冈的单价较低。t2.micro 是可以免费试用的。因为只是做教程和学习,所以选择了 t2.micro, 降低 Amazon 的消耗,也降低了需要付费的朋友的学习成本。】
第三步,这里是一些细节的配置,我们全部保留为默认值。不过这里面的 Subnet 选项会在之后讲解扩大存储的教程的时候用到。点击”Next: Add Storage“。
第四步,这里是初始化存储大小。默认使用SSD,下面蓝色背景的方框提示说,免费额度有30GB的SSD存储。我们把 Size(GiB) 默认的 8 改为15,对后面有些教程来说,8GB可能有点小。然后点击下一步,也就是”Next: Add Tags“。
第五步,添加标签。默认留空,直接下一步。【延伸:标签是以键值对的方式设置的。可以放很多东西,比如说服务器的 名字:小白(小黑,阿猫,阿狗,...);功能:人工智能计算(网站服务器,生物信息学计算,...);软件:TensorFlow, Anaconda, …,管理员:管理员的名字。总之,想放什么就放什么吧。标签的一个功能是当启动的服务器太多之后(比如说一家使用亚马逊产品的公司,有几十台服务器),便于分类管理。】
第六步,配置安全组。保留默认值,点击”Review and Launch“。这一步会在后面配置 Jupyter 或 搭建网站服务器 的时候讲到。
第七步,检查并启动实例。检查第 1-6 步设置的内容,确认无误后点击右下角”Launch“ (启动)。
第八步,选择密钥对。在第一个下拉框选择"Create a new key pair";在”Key pair name“输入该密钥对的名字,可以是任意值,我这里使用”tutorial“(没有双引号);点击”Download Key Pair“。这个密钥对是用来连接该服务器实例的,需要保存好。然后点击右下角”Launch Instances“。【延伸:我对密钥对的粗浅理解是,就像接头暗号一样,你说上句,对方说下句,对上了,就可以连接到服务器了。所以,密钥对不能丢,也不能被盗。你只有一次机会下载这个文件,也就是刚刚点击下载的时候,下载的文件是密钥对中的一半,私有密钥,亚马逊的服务器会保存一个另一半,公有密钥。后面的教程会讲到绕开密钥对的连接方式,那之后就可以丢掉私有密钥了。】
连接EC2实例
在EC2界面,点击第一栏”Resources“下面的”Running Instances“进入实例管理页面;或者大家也可以通过EC2界面左侧的”INSTANCES“下的”Instances“进入实例管理页面。你会看到你刚刚创建并启动的那个实例。鼠标左键单击那个实例,页面下半部分会显示实例的细节描述(”Description“)。在里面大家会看到有一项是”IPv4 Public IP“(右边第二个),我们一会儿要用这里的值链接到服务器上面,我把它称为 Public_IP。在实例列表里面,分别有Name,Instance ID, Instance Type 等信息。其中有一列是”Status Checks“(状态检查),当其显示”2/2 checks passed”之后,服务器就可以连接并使用了。(通常情况下,Public_IP 显示出来之后就可以连接了;但是对于GPU实例,一般要多等一会儿。等待显示 Public_IP 就类似于你要等待一台电脑开机,而状态检查就是看看开机是否成功了。)
在连接服务器之前,要有一些准备工作。一般大家和一台电脑交互(比如说打开浏览器,看视频等)是通过桌面程序来完成的,也就是点几下鼠标,屏幕会显示一些相对人性化的窗口。我们并没有直接和 CPU、内存 进行交互,这里桌面程序是我们和电脑交互的媒介。但是产生这些人性化的窗口是需要消耗CPU和内存资源的,对于一台应该专注于计算任务的服务器来说,不合算,所以一般操控服务器我们会使用一个叫命令行终端的东西而不是桌面程序。终端程序(Terminal)对应于桌面系统的图形界面,终端程序里面会运行一些 Shell
指令(命令行),每一个命令行就对应一个操作。比如在桌面系统中我们新建一个名字叫“folder_name”的文件夹,一般是点击鼠标右键然后选择“新建文件夹”,然后输入名字“folder_name”,在Linux命令行中,就对应这样一条指令mkdir folder_name
,"mkdir" 就是 make directory 的缩写,然后跟着一个 参数 ,"folder_name", 就是你想要设置的文件夹的名字。所以桌面程序和终端程序都是和计算机交互的媒介,不过前者更人性化,而后者在使用熟练了之后,会更高效。所以要连接服务器,我们需要一个 终端程序 和 Shell 。
使用Windows的朋友,我推荐 babun,它自带 zsh (babun就是终端程序了,zsh 是一种 Shell)。使用 Mac 的朋友,我推荐 iTerm2,然后安装 zsh ,安装方法详见这里;如果嫌麻烦,使用 Mac 自带的 Terminal 程序(使用 bash 作为Shell)也很不错。后面的教程提到的命令行都是假定大家会在 zsh 或 bash 中运行的,这两个shell类似,必要的时候我会提到他们的区别。
接下来我们开始连接到服务器。打开终端( babun 或 iTerm2 或 Terminal ),进入之前下载的“tutorial.pem”私有密钥的文件夹,因为我保存在 Downloads 文件夹下,所以是使用命令行 cd Downloads
,然后按下回车。“cd”是 change directory 的缩写。然后输入 chmod 400 tutorial.pem
,然后按下回车,这是在更改文件的权限。注意:这条命令和后面的命令只能在含有私有密钥的文件夹内运行,否则,需要指明私有密钥的完整路径。就像档案室里面有很多档案,每个档案只有特定的人才能查看或更改,其他人不可查看;这句命令行是说,只有你自己运行的命令可以查看“tutorial.pem”这个文件,其他程序,比如说潜在的病毒程序,不可以查看这个文件。然后我们在AWS EC2管理页面找一找之前提到的 Public_IP,输入下面的命令,大家需要把 Public_IP 更换成自己的IP地址,是一串三个点隔开的数字,然后按下回车键(所有的命令都需要输入,然后按下回车键执行)连接到服务器:
ssh -i tutorial.pem ubuntu@Public_IP
这句话,是告诉终端,我想用私有密钥 “tutorial.pem” 作为接头暗号,使用ssh这个程序,连接到 IP 为 Public_IP 的服务器上,并且使用用户名 ubuntu (这个是Ubuntu系统的默认用户名)。在执行这句话之前,我们是在本地的机器上,在执行这句话之后,我们就已经去到了服务器里面的Shell了,之后如果再执行命令的话,就已经是在操控服务器了。就像使用这句话之前,你还在自己电脑的QQ里面在和朋友聊天,使用这句话之后,你已经通过远程协助开始控制朋友的电脑了;在这里远程协助这个功能就类似于ssh在做的事情。如果你是第一次连接一台服务器,你的本地电脑会问你:
The authenticity of host 'Public_IP (Public_IP)' can't be established.
RSA key fingerprint is 2e:a1:77:26:9e:xx:40:da:3f:b5:xx:3b:89:11:xx:39.
Are you sure you want to continue connecting (yes/no)?
形象的理解就是,因为你的本地电脑和那台服务器是第一次见面,不认识服务器,问你是否要继续连接,输入yes
继续。连接成功后,大家会看到如下的欢迎信息:
➜ Downloads ssh -i tutorial.pem ubuntu@34.210.62.130
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-1013-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
我们可以用命令ls
查看根目录的文件夹,输出结果如下:
ubuntu@ip-172-31-2-87:~$ ls /
bin dev home lib lost+found mnt proc run snap sys usr vmlinuz
boot etc initrd.img lib64 media opt root sbin srv tmp var
这个是告诉你,服务器里面,根目录 / 下面有哪些文件夹和文件。
然后,我们可以使用
exit
来退出服务器。大家可以再输入ssh那条命令再次进入服务器(更改私有密钥权限那句话只需要运行一次),然后再用exit
来退出。
关闭、重启、清除EC2实例,AWS EC2计费方式
就像一台电脑,大家会开机,重启、关机,甚至是卖掉/废弃这台电脑一样,服务器也可以。当我们通过 AWS 的 EC2 创建向导(那7个步骤)创建一个服务器实例的时候,点击“Launch”的时候,就是开机。大家可以再次进入到EC2管理页面,点击左侧“Instances”查看已创建的,右键单击刚刚创建的实例,点击“Instance State”(实例状态),可以看到有“Start, Stop, Reboot, Terminate”,分别对应“开机,关机,重启,清除”。关机之后再开机的话,AWS EC2的Public_IP会变;但是如果是重启的话,就不会变。清除 是当你再也不会使用这台服务器时所需的操作,就相当于是你把家里的一台电脑扔到了垃圾箱里。
AWS的EC2计费方式是,每次开机就扣除一个小时的钱,当持续运行一个小时后,就再扣除一个小时的钱。所以如果你在一个小时内,开机、关机、再次开机,是会扣除两个小时的钱的;而你开机一次,运行1h 59min,也是扣除两个小时的钱,详见。当 关机 之后,就只收取存储的钱,我们的服务器使用的是 EBS 存储,价格列表在这里。当 清除 之后,就不收取费用了,因为AWS会删除你存储的所有文件。建议大家先 关机 或 清除,然后阅读之后的教程。
后续教程需要大家会使用Linux/Unix命令行的基本指令,如ls
, cd
, cp
, mv
, top
, sudo
等。大家可以在文末的 推荐阅读 找到推荐的资料。
推荐阅读
- 亚马逊云教程2:新建Ubuntu用户,sudo权限,安装软件
- Getting Started with Amazon EC2 Linux Instances official guide Amazon EC2 Linux 实例入门 官方教程
- Connecting to Your Linux Instance Using SSH, 中文版 使用 SSH 连接到 Linux 实例
- Linux/Unix 命令行入门教程,UNIX Tutorial for Beginners 这个是我当时上计算生物学的一节课时老师让大家跟的教程,大家可以找对应的中文版的。如果是想学的非常深,推荐阅读《鸟哥的Linux私房菜》这本书。
集锦卡
- 登录AWS,选择区域,进入EC2,依次选择“Launch Instance, Ubuntu Server 16.04 LTS (HVM), SSD Volume Type, t2.micro”,设置存储为15GB,下载私有密钥。
-
chmod 400 tutorial.pem
更改私有密钥权限。 -
ssh -i tutorial.pem ubuntu@Public_IP
连接服务器。
第一篇教程,欢迎拍砖、建议。
本文于2017-04-29发布于个人博客,现原文搬运于此,如有过时信息,欢迎指正。
网友评论