从这篇博客,我们将开始Amazon Web Services (AWS)系列。如果你是完全的新手,从未接触过AWS,那么这将是你的完美起点。所有的博客都将面向初学者。我们将从零开始,逐步深入到更高级的内容。这将是一场漫长的旅程。我们将涵盖AWS的所有重要服务和功能。
这篇博客讲了什么- 云简介
- 创建 AWS 账户
- 地域和可用区
- EC2 介绍
- SSH
- 安全组
- 将该 Node.js 服务器部署到互联网。
- 销毁我们创建的 EC2 实例,以避免收费。
假设你写了一个监听8080端口的Node.js应用。现在你希望全世界都能访问你的应用。为此,你需要按照以下步骤操作。
- 你需要购买一个公共静态IP地址。这样别人才能通过“http://<你的IP>:8080”访问你的网站。
- 确保你的笔记本电脑24小时都开着。
- 你的笔记本配置有限,如果访问你网站的人多了,你可能需要升级配置来应对,这样会增加你的开销。
- 你还需要保护它免受网络攻击和物理攻击(例如被盗或被洪水损坏等)。
在云服务未普及之前,所有这些事情都是由想要在线开展业务的人自己处理的。现在,像“AWS”、“Azure”这样的公司以极低的成本为我们处理这些事情。
在 AWS 上注册账户我不会一步步教你如何在 AWS 上创建账户。你可以自己搞定。这就像注册 Instagram 一样简单。
哦,对了,只需要注意一点:你需要有一张借记卡或信用卡(任何一种都可以)来创建一个AWS账户。在你创建账户时,会从你的银行账户中扣除1卢比。确保你的借记卡或信用卡已经开通了国际支付功能。
区域和可用性区域 区域AWS 区域是指 AWS 在特定地理区域内拥有多个数据中心的区域。每个区域都是一个完全独立且隔离的环境。请注意您是在哪个区域创建的资源,因为一个区域中的资源在其他区域是不可见或不可用的。
区域允许用户选择部署资源(如服务器、数据库等)的位置,这在减少延迟时间、遵守当地法律或满足灾难恢复需求方面可能很重要。如果你的业务位于印度,那么你会在最近的区域(如孟买)创建资源,以减少用户的延迟体验。资源位置越远,延迟就越大,因为传输距离更长。
初学者理解延迟:它指的是数据包从一处到另一处所需的时间。如果一个网站加载迅速且无缓冲等待,说明它的延迟较低。
每个区域都有一个独特的标识符名称。说到孟买,它是“ap-south-1”。
我选择了孟买,将在那里创建所有相关资源。
可用区域可用区是区域内的独立位置。每个 AWS 区域通常有三个或更多的可用区。
例如:在孟买地区(ap-south-1),AWS 可以将其物理数据中心分布在孟买地区 100 公里半径内的不同位置。这些位置也称为可用区。
可用区域提供了冗余,从而确保高可用性。通过将资源分布在多个可用区域中,这样可以保护您的应用程序免受单个数据中心故障的影响。
目前,Mumbai 有 3 个数据中心,
区域标识符:
- ap-south-1a
- ap-south-1b
- ap-south-1c
“a”、“b”、“c”,……这些后缀会加在区域代码后面,以区分不同的可用区。
当你看到写成 ap-south-1 时,那它就是一个区域
当你看到它写成 ap-south-1a 时,那就是一个区域内的可用区。
Amazon EC2 介绍AWS提供了很多服务,我们将在这系列博客里研究那些在行业中常用的重要服务。
我们从研究AWS的EC2服务开始。
你在笔记本电脑上运行你的应用程序,比如NodeJS、FastAPI、Go或Springboot,它们都是在本地主机上运行的。现在的问题是,当你在自己的笔记本电脑上做这些时,其他人无法访问你笔记本上8080端口运行的程序,因为你的笔记本没有公网IP地址暴露到互联网上。如果你想将应用部署到互联网上,这样任何人都可以通过在浏览器中输入网址http://abc.com来访问你的应用。为此,你需要某种硬件(比如笔记本或操作系统),它运行在云上并提供公网IP地址。如果你能找到这样一台神奇的笔记本电脑并在这台笔记本上运行“node app.js”,那么你可以通过http://<那台笔记本的IP地址>:8080访问它。你可以从任何地方访问这个网址。
AWS 提供的具有公共 IP 地址并托管在云中的“魔法”笔记本电脑称为 EC2。它是一台你可以租用的虚拟计算机,可用于运行应用程序、存储数据等。别担心,AWS 在创建账号后的第一年内提供一个“免费套餐”服务。因此,在免费套餐期间使用这些机器,你将不会被收取费用。在这系列博客里,我们只会用免费套餐里的资源来学习。
你可以在这里点击这里查看一下AWS EC2的定价信息:here。
你可以查看一下免费层的资源,在这里了解更多 here。
我们启动的这个EC2虚拟机通常称为一个实例。
实例:实例就是在 AWS 中的虚拟服务器。它运行一个操作系统(如 Linux 或 Windows),并且可以配置不同的 CPU、内存和存储资源。我们会在博客中使用 Linux Ubuntu 系统。
实例类型: 这定义了实例的硬件配置,比如CPU的数量和内存的大小等。例子包括“t2.micro”(一个小的通用型实例)和“m5.large”(一个更强大的实例)。别担心,在本文中,我们会实际看到这些实例。
弹性IP(EIP): 一个静态公网IP地址,你可以将其与实例绑定,使其能通过互联网访问。
安全外壳(SSH)
假设你在 AWS 上租了一台 EC2 机器。你怎么访问那台 EC2 机器,又怎么在那上下载你的代码等等?
为此,我们使用一种称为SSH的工具。它允许你从本地笔记本电脑访问EC2机器的终端。神奇地,我们在本地笔记本电脑的终端上输入一些SSH命令,本地笔记本电脑的终端就会变成EC2机器的终端。现在,你可以执行如git clone、mkdir、_ls_等命令,这些命令就会在那台EC2机器上执行。
在创建EC2机器时,我们需要给EC2的安全组“允许从任何位置SSH连接”的权限,以便我们可以从笔记本电脑上进行SSH连接。然后,我们需要下载一个密钥对“.pem”文件,并在该pem文件所在的目录中运行SSH命令,这样我们的SSH连接就可以成功了。切记不要与任何人分享“.pem”文件,否则他们可以使用SSH连接你的机器并可能破解你的系统。在这篇博文中,我们将实际操作这些步骤。
注意:如果您使用的是Windows笔记本,并且想要使用SSH,则需要开启WSL。可以参考这个视频。
安全组一个 安全组 是一组规则,用于控制进出您的 EC2 实例的流量。可以将其视为一个防火墙,它根据 IP 地址、端口和协议来决定允许哪些流量。
- 入站规则:定义哪些流量可以从外界进入您的EC2实例。例如,您可以设置仅允许从您的IP地址访问SSH(端口22)的流量。现在,只有您能通过SSH连接到EC2实例。您还可以开放端口8080,这样全球任何人都可以访问运行在端口8080上的应用程序。
- 出站规则:定义允许从您的实例向外发送的流量。例如,如果数据库实例托管在其他地方,您只需允许实例的IP连接到数据库。这样,其他后端应用程序就无法连接到您的数据库。
当你在 AWS 中创建一个安全组后,你可以为该安全组命名,并将其附加到任何 EC2 实例。一个安全组可以附加到多个 EC2 服务器,一个 EC2 服务器也可以附加多个安全组。
把一个Node.js应用部署到互联网上
我们将部署下面的 Node.js(Node.js)到互联网。
const express = require('express');
const app = express();
app.get("/", (req, res) => {
res.send("欢迎来到由 Shivam Bhadani 主讲的 AWS 教程");
})
app.get("/health", (req, res) => {
res.send("一切良好");
})
app.listen(8080, () => console.log("服务器正在监听着8080端口"))
别担心,你可能看不懂上面的代码,它只是一个运行在8080端口的这样的应用服务器。
你可以在这里查看代码:https://github.com/shivam-bhadani/Simple-Nodejs-Server
前往AWS 控制台> 在搜索栏中输入“EC2”> 进入EC2,然后点击“启动实例”
我们即将开始运行我们的第一个EC2实例。
给您的实例命名,并选择 Ubuntu 免费层级的操作系统镜像。然后选择免费层级的实例类型。对于我在孟买区域的情况,它是“t2-micro”。
2. 往下滚动并选择“创建安全组”。这将创建一个安全组。如果你已有安全组,可以使用它。但我们没有,所以我们得创建一个。设置“允许从任何地方的SSH流量”。这将允许从任何地方的任何电脑SSH访问。
3. 滚动页面并点击“创建新的密钥对”。如果你已有密钥对,可以使用它,但我们没有现有的密钥对,所以我们将生成一个新的密钥对并下载。SSH 只会在你笔记本电脑上的同一个文件夹中运行,该文件夹中包含你的密钥对。我在前面博客的部分已经提到过这些内容。
4. 给密钥对起个名字,然后点击“创建密钥对”按钮。
5. 向下滚动页面并配置存储设置。默认情况下,它提供8GB的存储空间,我们就用这个设置。EBS存储也很重要,我们会在下一期博客里详细讲讲。
点击启动实例按钮。
6. 等2–3分钟,之后实例状态会变为“运行”。
祝贺你,你创建了你的第一个EC2实例啦。
7. 我们将从笔记本电脑通过SSH登录这个实例。首先选中您的实例,然后点击实例操作区左侧的“连接”按钮。
8. 如果你不想通过笔记本电脑的 SSH 连接到你的实例,而是直接使用 AWS 控制台中的“EC2 实例连接工具”或“EC2 实例连接界面”,你可以点击“连接”按钮,在“EC2 实例连接”下。
9. 我们想从笔记本电脑连接它。所以,我们将切换到“SSH客户端”选项卡,然后在Windows WSL终端中运行以下命令:
10. 我已经把“.pem”文件下载到D盘了。接下来,我将通过运行命令把它移动到根目录。
使用cp
命令将位于/mnt/d/shivam-security-group.pem的文件复制到用户的家目录下。```
cp /mnt/d/shivam-security-group.pem ~/
现在在终端通过上述SSH命令执行操作。
![](https://imgapi.imooc.com/59851c67097b51fc14000715.jpg)
11\. 恭喜,现在我们已经成功完成了SSH。我们现在可以通过终端访问EC2了。你可以将下面提到的IP地址“172.31.1.187”与步骤7中的截图中的实例私有IP地址核对一下。
![](https://imgapi.imooc.com/677b51fd09059bfd14000670.jpg)
12. 你有了你的新机器。现在,你需要在这台机器上安装 nodejs 和 npm,然后运行代码。
安装 NodeJS,可以执行以下命令
运行 sudo apt update
来更新软件包列表
sudo apt install nodejs
注意:此命令用于在基于 Debian 的系统中安装 Node.js。请确保您具有足够的权限来执行此操作。
接下来复制我们的仓库(或直接使用英文“clone”):
你可以使用这个命令克隆这个仓库:
git clone https://github.com/shivam-bhadani/Simple-Nodejs-Server.git
试试这个命令。
进入我们克隆版的仓库里,查看文件。
如果你想进入名为 Simple-Nodejs-Server
的目录,你需要在命令行中输入 cd Simple-Nodejs-Server
。
安装软件包并启动服务器
运行以下命令来安装依赖并启动应用:
npm i
node app.js
![](https://imgapi.imooc.com/677b51ff092c8f9914000649.jpg)
你可以运行这个命令来更新软件包列表:`sudo apt update`
![](https://imgapi.imooc.com/dae76c67097b520014000657.jpg)
克隆仓库
![](https://imgapi.imooc.com/677b520309fc745014000650.jpg)
打开克隆仓库
![](https://imgapi.imooc.com/8b79a967097b520414000684.jpg)
运行 `npm i` 安装包
![](https://imgapi.imooc.com/677b520809fe1eb414000671.jpg)
运行服务器时通过运行 `node app.js`
13\. 现在复制你在步骤 7 中可以看到的实例的公共 IP 地址。然后尝试在浏览器中打开 http://<你的实例公共 IP>:8080 来访问你的 Node.js 应用程序。
我们无法访问下面显示的应用程序。
![](https://imgapi.imooc.com/677b520a09d1de1414000677.jpg)
你能猜到我们犯了什么错吗?为什么我们打不开应用?
回答:如果你仔细阅读了关于安全组的说明,我们会提到入站规则。我们没有将8080端口的入站规则设置为允许来自任何地方。我们只设置了SSH可以被来自任何地方访问。
14\. 请选择如第7步所示的运行实例。在页脚中转到“安全”标签。然后选择“安全组”的链接。
![](https://imgapi.imooc.com/677b520d09bb4fa214000596.jpg)
15\. 可以看到,目前只允许 SSH 连接。点击“入方向规则”按钮。
![](https://imgapi.imooc.com/677b520d098d6ca614000604.jpg)
16\. 添加一条新规则,允许来自互联网的任何地方使用8080端口的“自定义TCP”
![](https://imgapi.imooc.com/71cd0767097b520e14000560.jpg)
17. 再次访问“http://your_instance_public_IP:8080”,嗖一下,你的网站已经在互联网上发布了,你可以把它分享给任何人。
![](https://imgapi.imooc.com/677b521309d9dadd14000572.jpg)
你看,这个URL看起来很丑。你可以这样做:从任何DNS服务商(如GoDaddy等)购买一个域名,并将这个域名指向你应用的IP地址。然后,人们就可以通过输入你的自定义域名来访问你的网站了。
18.
非常重要:结束你创建的那个实例。否则,如果你不在免费层的话,你就得掏腰包了。
![](https://imgapi.imooc.com/677b5214096dce0414000669.jpg)
这个部署方案有不少缺点。
1. 如果有大量的流量访问我们的网站,那么网站可能会崩溃,因为 t2.micro 无法处理如此大的流量。为此,你需要进行水平扩展以应对大量流量。
2. 我们公开了 SSH,这不是一个好的做法。
3. 我们的网站托管在 http 上,这并不安全。我们需要配置 SSL 证书以将网站变为“https”,这样网站就会是加密的。
这里也有很多问题,但这些问题会逐渐得到解决,我们也会在这一系列的 AWS 系列文章中逐渐学习如何在行业中部署应用程序。
但是如果你有个人项目或参加黑客松,你可以像本文所示,用自定义域名的部署你的网站。如果有你项目的实时链接在你的简历中,这对你的简历会有帮助。
## 这就到了说再见的时候了。
在接下来的文章中,我们将讨论EBS卷。如果你想获得通知,可以在Medium上关注我,或者订阅我的文章([Shivam Bhadani](https://medium.com/u/821bb7e71b90?source=post_page---user_mention--f06cdc80a1fc--------------------------------))。
如果你喜欢我的努力,并想支持我,可以在下面任意金额捐款。感谢您的支持。
* **印度用户可以通过UPI转账:** shivambhadani@slc
* **非印度用户可以点击这里:** <https://buymeacoffee.com/shivambhadani_>
你可以通过电子邮件、LinkedIn(领英)、Twitter(推特)联系我哦。
* [推特](https://x.com/shivambhadani_)(我的推特账号)
* [领英](https://www.linkedin.com/in/shivambhadani/)(我的领英主页)
谢谢你的阅读,希望你喜欢!
![](https://imgapi.imooc.com/677b521609274ba306400767.jpg)
共同学习,写下你的评论
评论加载中...
作者其他优质文章