什么是EC2,它做什么?

大卫·克林顿(David Clinton)

本文摘自一个月的午餐学习Learn Amazon Web Services。

EC2(“弹性计算云”的缩写)在AWS平台的核心是一项非常成功的服务,它使您可以有效租用AWS庞大基础架构中运行的计算能力,存储空间和网络连接单位。 如果您需要为客户,用户或读者提供基于Web的服务-从社区Wiki到完全集成的多层商业移动应用程序-可以使用这些资源来创建虚拟机(称为“ AWS圈子中的“实例”),那么外界的行为和感觉就像真实的事物一样。 对于我们来说,当我们在AWS云中迈出第一步时,真正的好处是服务器启动所需的时间和精力很少,因此,如果我们犯了错误或以某种方式弄乱了一些重要的配置文件,我们可以轻松地拉出插入实例并进行更换并运行-通常不到一分钟。

如果您还没有AWS账户,请立即访问aws.amazon.com并注册。 虽然您必须向他们提供您的信用卡信息,但是除非您主动启动资源(默认情况下,新帐户上没有任何内容,您仅需为激活的服务负责),否则您将无需支付任何费用。 不仅如此,我们将在本文中介绍的所有资源都将落入Amazon慷慨的“免费”层级,第一年中所有帐户均可使用。 因此,不必担心收费。

安全

注意 :由于此AWS账户将与您的信用卡关联,因此您应采取正常的预防措施,包括使用由大小写字母,至少一个数字和一个非字母数字字符组成的良好密码

启动一个AWS实例

我们将开始启动新的虚拟Linux服务器的过程(如果您以前没有Linux经验,请不要担心;这将是一个很浅的学习曲线)。 为什么选择Linux? 因为它可以自由调整以适合几乎所有角色,并且在大多数情况下,操作系统本身是免费提供的。 此外,我上次访问The Cloud Market(thecloudmarket.com/stats#/totals)时,启动的所有EC2实例中有92%以上运行的是一种版本或另一种版本或Linux。 您不想反社会吗?

尽管我们将专注于访问和管理基于AWS的Linux实例(以及您需要掌握的所有特定于Linux的技能),但没有什么可以阻止您在EC2实例中运行Windows的,即使是在Free Tier中。

激活帐户后,将您的Web浏览器指向AWS控制台(http://console.aws.amazon.com),然后单击EC2图标(见图1)。

图1 AWS控制台的一部分,显示了按主题分组的关键服务…并突出显示了计算和存储服务。

EC2仪表板上将有一个标记为* Launch Instance *的蓝色大按钮。 点击它。 向下滚动一点,直到看到Ubuntu Server 16.04 LTS卷类型,然后单击右侧的蓝色“选择”按钮(在图2中可见)。 该16.04版本可能会在2018年末的某个时候被Ubuntu Server 18.04取代。我使用Ubuntu,但有一些细微的变化,我们将在此处进行的所有操作都将在使用任何风格的Linux时同样有效。

图2选择一个Ubuntu Amazon Machine Image(AMI)-还请注意一些可以作为AMI使用的替代操作系统。

在随后的“选择实例类型”页面上,可能会预先选择“通用t2.micro”“符合免费套餐资格”类型。 因为我们的服务器只能使用很少的电源,所以这将为我们提供足够的功能,并且使我们花费最少,因此请确保已选择它。 对于一个名为“ micro”的实例配置文件,t2包含了很多麻烦。 您可能不希望使用具有此类规格的计算机来进行高端游戏,但是让我感到惊讶的是,这个小家伙可以很好地处理相对较少的网站工作量的要求。

现在,单击右下角的“下一步:配置实例详细信息”按钮。 通过“ 配置实例详细信息”页面,我们可以自定义实例将驻留的网络邻居。 对于某些更高级的方案,某些编辑是必需的,但就目前而言,诸如VPC,子网和关闭之类的设置的预设值对我们来说将非常有用。

我们将点击“下一步:添加存储”以继续添加存储 。 我们提供的默认存储值(一个用于托管基本操作系统的8 GB SSD(固态驱动器))也可以。 实际上,构成我们的Linux服务器的所有软件都可能使用不到我们分配给它的一半的空间。 并且,除非以后我们在保留旧日志数据或在哪里存储大型应用程序和数据库文件时做出一些非常错误的选择,否则在可预见的将来,八GB应该会绰绰有余。

接下来出现的“ 标签实例”页面使我们有机会为我们的实例分配一个标识名称。 正如我们将在本书后面学习的那样,标签对于从长长的资源列表中快速查找特定对象非常有用。 不过,到目前为止,请随时在此字段中键入任何有用的标识名(例如“ MyInstance”),或根本不输入任何名称。

接下来,我们具有“配置安全组”页面,该页面的设置应保护我们免受攻击,或者换句话说,确切定义谁可以访问我们项目的每个资源。 AWS安全组的工作方式与您可能已经熟悉的各种网络防火墙的工作方式几乎相同,但是您也可以将它们视为仅允许大小和重量合适的对象穿过另一侧的过滤器。

我将通过一个简单且重要的示例来说明这是如何工作的。 默认情况下的设置方式,任何拥有您的私有认证密钥(我们将在后面讨论)的人都可以从世界上任何地方进入您的服务器。 假设您要小心不要不小心暴露您的私钥,那实际上并不像听起来那样可怕。 但是将SSH访问限制为仅来自您自己的台式PC使用的唯一公共IP地址后面的那些请求是一个好主意,并且AWS强烈建议您这样做。

继续,然后单击标记为“ Anywhere”的“源”列下的下拉菜单,然后选择“我的IP”。 AWS会自动使用您的Internet提供商为您提供的公共IP地址填充该字段。 例如,如果您想授予访问远程办公室的团队成员访问权限,则可以指定一个自定义IP地址。

有多个IP地址?

提示:如果需要使用多个IP地址的计算机进行访问,则可以创建多个安全组规则,每个地址一组。 另外,如果您使用的IP地址是动态的(意味着它会不时更改-通常在重新启动调制解调器/路由器时),那么您必须先更新安全组中的值,然后才能访问实例。

让我们再对安全组进行一次编辑。 由于我们正在构建Web服务器-毕竟其目的是使用HTTP协议提供网页服务-我们需要创建一条新规则来打开默认的HTTP端口(80-大多数未加密的浏览器使用的端口)基于网络的流量)。 单击一次“添加规则”,然后单击标记为“自定义TCP规则”的下拉菜单。 从将出现的列表中选择HTTP。 请注意,在图3中,此规则的“端口范围”的值是如何自动设置为80,“源”是“何处”(即0.0.0.0/0 –意味着Internet上任何地方的任何用户都可以访问我们的内容)。 除了HTTP之外,您还可以从一长串通用协议中进行选择,包括各种电子邮件和数据库标准。

图3 AWS安全组配置页面

让我们单击“审阅并启动”,然后单击“启动” –尽管从技术上讲,直到最后一步:选择密钥对之后,实际上什么也不会发生。 如果您只想保留一两个段落的好奇心,我将解释这一切。 同时,让我们选择“创建新的密钥对”并为其命名-可能反映项目的名称,例如:book-sa​​les-site-key。 我将只使用“键名”。 单击“下载密钥对”以将密钥下载到本地计算机,然后会弹出一个对话框,询问您要将新文件保存在何处。 我建议您将其保存到用户的主目录,以便在打开终端时立即可以轻松访问它。 请注意,新密钥的扩展名为.pem。

完成此操作后,单击“启动实例”即可完成操作。 您的第一个EC2实例! 实例将需要一两分钟才能准备就绪,但是与此同时,要访问EC2实例仪表板(包括其所有重要的登录信息),最快的方法是单击“查看实例”按钮将会出现。 一旦进入Instances仪表板(参见图4),当您看到实例的公用IP地址出现在仪表板的Instance Description选项卡中时,便知道该实例已准备就绪。

图4 EC2实例详细信息页面显示重要信息(包括实例的公共IP地址)以及指向实例相关资源的链接。

由于该网站没有通常的人类可读网址(例如google.com),因此IP(即107.22.95.59)是您用于登录实例本身并加载网络的地址我们即将创建的页面。

访问您的AWS实例

现在,您的实例处于活动状态并正在运行时,它并没有代表人类做任何事情。 如果要使其正常工作,则必须实际登录并配置一些软件。 您访问AWS等远程服务器的方式将取决于两个主要因素:服务器上运行的是哪种操作系统; 以及本地台式机上正在运行的操作系统。

由于我们的EC2服务器使用Linux,因此希望通过安全的远程管理工具SSH进行访问。

使用SSH(“安全外壳”协议)

您可能会惊讶地发现,几乎可以物理访问网络上任何点的任何人都可以轻易看到计算机之间移动的未加密数据。 为了确保您交换的私人数据或密码安全,您绝对必须使用某种加密工具(例如密钥对)在传输过程中对数据进行有效加密,然后在到达另一端时对其进行可靠地解码。 OpenSSH程序就是用于此目的的工具,事实证明它是如此流行,以至于Microsoft甚至都已开始在Windows内部原生支持SSH。

密钥对是一对包含长字符串的纯文本字符的文本文件。 这是一对公共半部的(无效)示例:

SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAABAQDKu2XRjOEtABbkatlP S7 / 3CkqSo5tdhuMOKVgJGRpgIBe / riiby6PCTc53maT28hD5AfM1yV1lba1iUEZyh3yvaoCuC3jZ3 + kiTyTYm / dpZ5eInMMAAj5DFhev4sTFfzWClo3BuvOS2U9 / 5fRPTz8YPYuuYnTr + 84Kta28Yd6 / IqDb7hz6UaMNv + Z36MhG0NOXJhRBBYiyPYQFd9nxE + cyMZ + FmGjMz6y8Q8dS4v5f6cnz8V3mbSFdZyn3OSMD0DxDxEu47GRNUYw + i9x7DkAKc / DKNN94RPD3bQm1W9koNL0MQNHgp4LJfvMKbo1852FNBbd1OIPTVBvlLjH39wbF根@容器

字符串代表数字键,其内容出于所有意图和目的都是无法猜测的。 可以将指定为该对的公共部分的文件复制到您要稍后登录的远程计算机上。 两台计算机上两个对的一半都存在,从而确保OpenSSH(及其用户)可以安全地开始会话。

对于Amazon实例,AWS将在启动时将一对的公共一半嵌入到您的实例中。 您只需要安全地下载私钥并将其存储在要连接的任何计算机上即可。 假设您还没有一个,AWS还将帮助您创建一个新的密钥对。

从Linux或OS X机器访问

现在是时候打开终端窗口,以便我们可以连接到新的AWS实例了。 根据您在计算机上运行的Linux发行版,这可能通过CTRL + ALT-t键盘组合或通过桌面菜单来工作。 键入“ ls”以列出当前目录的内容,确认其中存在密钥对.pem文件。

ls

如果钥匙不在那,则必须找到它。 在Linux机器上,可以预见的是,您可以使用* locate *工具来执行此操作。

须藤更新

找到keyname.pem

什么是“ sudo” -y?

出于许多实际原因,使用具有完全管理权限的操作系统帐户会带来不必要的风险,因为任何发现自己已登录的用户(包括工作同事正在暂时无人值守的计算机上徘徊)将具有自动的完全控制权。 另一方面,将自己限制为非管理帐户将使几乎不可能完成任何事情。

Linux的许多形式都通过为选定的帐户提供管理员权限来解决此问题,在大多数情况下,这纯粹是理论上的,但是可以在必要时通过在命令前加上单词“ sudo”来调用(如上述示例)。 通过提供密码确认身份后,您的命令将被视为由root用户发出。

想看看它是如何工作的? 尝试不使用sudo运行以上命令。

找到密钥后,您需要加强文件的权限(即,对其进行设置,以便只有其所有者–您–可以进行任何访问)。 否则,您的AWS Ubuntu服务器将完全无法登录。在Linux或OS X上,您都可以使用基本的Unix命令行程序(称为Change Mode)来更改文件权限,该程序是所有Bash环境中的一部分。基于Unix的系统。 用您给密钥输入的实际名称替换“ keyname”:

chmod 400键名.pem

记下文件的路径(可能类似于/ home / yourname / Downloads之类的东西),稍后将需要它。

现在,我们可以使用密钥对(如果不在当前目录中,则使用通过find找到的完整路径),用户名“ ubuntu”和您刚刚在EC2仪表板上看到的IP地址登录实例。

ssh -i keyname.pem ubuntu@54.152.9.184

在这里(图5),将要求您通过键入单词“是”(单词“是”的所有三个字母)来对主机进行身份验证。 我记得一个非常聪明的DevOps专业人员在经过十到十五分钟的挫折后无法登录到远程服务器后向我寻求帮助,因为他一直只回答“ y”。

图5到AWS EC2实例的SSH登录屏幕

如果收到告诉您“未安装openssh”之类的错误消息,那么显然,您必须安装它。 在Ubuntu,Mint或Debian系统上,请执行以下操作:

sudo apt安装openssh服务器

sudo systemctl启动ssh

在某些较旧的Ubuntu系统上,最后一个命令将是“ sudo service ssh start”。

在CentOS Linux上,改用Yum:

须藤yum -y install openssh-server openssh-clients

chkconfig sshd在

服务sshd启动

从Windows机器访问

尽管Windows 10现在允许您安装Linux BASH界面,您可以通过它使用SSH,如上所述,但是您可能更喜欢使用Windows SSH客户端PuTTY。 您首先需要从其网站下载免费的PuTTY远程访问程序:

http://www.chiark.greenend.org.uk/~sgtatham/putty/

接下来,您将在AWS中生成的.pem密钥转换为PuTTY的.ppk格式。 在开始菜单中,单击所有程序> PuTTY> PuTTYgen。

对于“要生成的密钥类型”,我将选择最常用的加密算法SSH-2 RSA。 其他大多数都只是为了向后兼容。 然后单击“加载”按钮,确保将显示“所有文件(*。*)”,然后选择您的.pem文件,然后单击“保存私钥”以开始转换(确保您使用相同的.pem版本使用的密钥名称)。 如果不需要,您不需要添加密码,但是让本地计算机每次启动远程SSH登录时提示您输入密码确实会增加额外的安全性。

现在,您可以通过所有程序> PuTTY> PuTTY打开PuTTY程序本身。

由于我们在AWS上运行的实例是Ubuntu服务器,因此主机名将为ubuntu。 选择“ SSH”作为“连接类型”,并确保您的端口设置为22(这是SSH连接使用的默认端口)。 您将通过左侧的“类别”窗格选择.ppk文件。 单击以展开连接,然后是SSH,然后单击身份验证。 从那里浏览到保存.ppk文件的文件夹并选择它。 最后,单击“是”,您的会话将打开。

构建Ubuntu Linux Web服务器

安装软件

如果一切按计划进行,那么您的终端现在应该已连接到Amazon Ubuntu服务器实例,并且您将准备开始为托管网站做好准备。 这意味着是时候开始安装我们将要使用的软件了。 首先,我们将更新软件存储库。 键入“ sudo apt更新”。

什么是软件存储库,为什么需要更新?

数以万计的免费程序可帮助使Linux保持其自身的安全性,效率和实用性,其中大多数都是由两组受信任的管理员之一来管理和管理的。 这些管理员运行的在线软件档案称为存储库。 为了使您的Linux副本不时(理想情况下,在安装每个软件之前)知道可用的软件以及如何找到该软件,您需要更新存储在计算机索引中的本地版本的存储库信息。 作为Debian发行版系列的一部分,Ubuntu使用* apt *命令行界面来管理软件包,而yum则负责Red Hat / CentOS存储库的工作。

那个几乎没有伤害。 现在,我们将安装将为我们的网站提供动力的三个软件包。 特别是这三个软件包经常与Linux一起使用,以至于组合甚至都有自己的缩写:LAMP(Linux,Apache,MySQL和PHP)。

  • Apache Web服务器管理工​​具(将入站Internet访问者指向您的网站资源)。
  • MySQL数据库(因此,我们稍后将使用的任何软件(包括WordPress)都将具有一个平台来构建所需的数据库)。
  • PHP脚本语言(对于许多应用程序(包括WordPress)也是必需的)。

在命令末尾不要遗漏插入符号(^)。 这是命令的外观(以及输出的一小部分选择):

sudo apt安装lamp-server ^

什么? 没有密码?

我不是只是说调用sudo总是需要我输入密码吗? 另一个问题:这个AWS实例上的密码是什么? 简短的答案:出于安全原因,您没有密码。 (略)较长的答案:由于您设法使用唯一且高度安全的密钥对登录,因此AWS假定您就是您所声称的身份。

在安装过程中,系统会要求您为MySQL数据库创建密码。 确保您不会丢失它,因为稍后将需要它。

因此,我们可以开始建立我们的新网站,我们将访问新的Web根目录,默认情况下,该目录将保存访问者访问我们网站的所有文件。 “ Web根目录”仅指Linux文件系统中的目录,Apache将在其中寻找组成我们网站的文件。 在Ubuntu机器上,通常为/ var / www / html /,但是您可以将Apache配置为在您喜欢的任何地方使用它。

cd / var / www / html

输入“ ls”以列出当前目录内容。

ls

正如您在图6中看到的那样,目前唯一的文件称为index.html – Web浏览器通常在访问站点时首先加载该文件。

图6 / var / www / html目录的内容。 —注意显示现有index.html文件的“ ls”命令。

建立网站

要查看index.html文件产生的内容,请在浏览器URL字段中输入AWS分配给您服务器的IP地址(与从终端打开SSH Shell会话时使用的四部分数字地址相同)。 从图7中可以看到,当前的index.html将显示Apache-Ubuntu的欢迎和方向页面。

图7默认的Apache欢迎页面,其中包含有关如何从Ubuntu服务器运行Apache的重要信息。

让我们回到终端的命令行进行一些自定义。 使用mv(移动)命令将默认的index.html文件重命名为index.html.backup。 这样,我们可以自由地创建一个新的index.html文件,同时将旧文件保留为原始状态以备将来参考。 在服务器上使用配置文件时,始终最好制作旧版本的备份副本,而不是简单地覆盖它们。

sudo mv index.html index.html.backup

现在,我们可以使用您喜欢的文本编辑器来编写自己的简单html页面-我的是Nano。

须藤nano index.html

在编辑器中键入您想要的任何内容。 为了让您了解它的工作原理,请尝试添加一些HTML格式,也许是这样的:

欢迎!

希望您真的在这里过得愉快。

完成后,按CTRL + x,然后单击“ y”以保存文件并关闭Nano。 要查看您的新页面,请点击浏览器选项卡上的刷新按钮,直到现在,该按钮已显示您站点的Apache页面。

就这样–您自己的Web服务器!

由于让未使用的AWS实例运行永远不是一个好主意(它们最终最终会花费您很多钱,并且可能会带来安全风险),因此,一旦从各个角度欣赏完它,就应该将其关闭。 返回EC2控制台(console.aws.amazon.com/ec2),确保实例突出显示,单击页面顶部附近的“操作”按钮,将鼠标悬停在“实例状态”菜单项上,并单击“终止”。将警告您EBS及其所有内容将永久丢失,并且SSH会话(如果仍处于活动状态)现在将结束。

9:58…9:59…10:00分钟!

就是这样。 尽管我们还没有产生任何有用的东西,但我想您已经可以看到AWS的一些潜力,更重要的是–如何使用AWS来比以往更快,更好地完成工作。

如果您想了解更多信息,请在一个月的午餐中免费下载学习Amazon Web Services的第一章。