一文掌握 AWS,成为云计算工程师
开始之前,我先假设你具备以下能力:
- 拥有初级或者中级的 Linux 系统管理技能。
- 至少熟悉一门编程语言或者脚本语言。不必特别精通,但是要有实际的编程经历。
- 愿意花时间去解决一些复杂的问题。
- 需要花费一点钱购买 AWS 服务,从而提高自己的技能。
本指南使用须知:
- 首先,本指南不会一步一步手把手地教你如何操作。
- 我会循序渐进地引导你。因此,你需要真正理解每一部分,然后再阅读下一部分。
- 遇到问题时你要善用谷歌搜索、AWS 文档以及 Stack Overflow 网站去寻找答案。
- 使用最正确的方式,不要只顾图快。当然,先用快速的方法完成,然后再进行重构也未尝不可。
- 在学习过程中充分理解之后再去服务器上进行实际操作。使用不到 50 美元的 AWS 版本即可完成本指南中的所有工作。重新构建的过程能够帮助你加深理解。
- 跳过开头先去阅读“成本分析”和“自动化”两部分的内容,阅读其他部分的时候保证这两部分的内容了然于胸。
- 最后,一定要多动手进行实际操作。此时不做,更待何时。
项目概况
本指南不是教你如何在 AWS 上开发网站。而是通过一个网站示例来介绍 AWS 提供给你的所有技术服务。通过概念的学习和实际操作,你能够对 AWS 有非常全面的了解。
本指南将从最基本的网页开始,最后使用极其便宜的 ASW 构建 Web 应用程序。虽然网站很小,但是无所谓。它可以做任何你想做的事情,可谓麻雀虽小,五脏俱全。
示例网站名为“每日财富”,每次加载页面随机显示一个财富值,在页面底部提供一个输入框和一个按钮,通过这两个组件向随机财富列表中添加新的财富数据。
帐户相关的基础知识
创建一个 IAM 用户供你个人使用。为 root 用户设置 MFA,关闭所有 root 用户的 API 密钥。设置帐单提醒,以便超过指定的价钱后你能够及时知道。使用 API 凭证为你的用户配置 AWS CLI。本阶段目标:你可以使用 AWS CLI 查询你的 AWS 账户信息。
虚拟主机的基础知识
部署 EC2 虚拟机并显示一个简单的静态网页,页面上呈现“每日财富网站即将推出”的字样。拍摄虚拟机快照,接着删除虚拟机,然后从快照中部署一个新的虚拟机,并选中基本的磁盘备份和磁盘还原功能。本阶段目标:你可以查看 EC2 实例提供的简单 HTML 页面。
弹性伸缩配置
从虚拟机中创建一个 AMI 并将其放入弹性伸缩组中,确保至少有一个虚拟机在运行。给虚拟机添加弹性负载均衡器,并在两个可用区域之间实行负载均衡。本阶段目标:你可以查看来自两个 EC2 实例的简单 HTML 页面。你任意关闭其中一个,网站仍然可以访问。
数据库访问
创建一个 DynamoDB 数据库表,并手动执行数据插入和检索操作,然后通过本地计算机上的脚本执行相同的操作。将你的静态页面重构为每日财富网站,使用 Node、PHP 或者 Python 都可以,对 AWS DynamoDB 数据表中的财富数据执行读取和更新操作。本阶段目标:你的网站现在可以在用户和会话之间将数据加载并保存到数据库中。
虚拟主机 PaaS
将这个简单的网站重新部署到 Elastic Beanstalk 上。创建一个静态的 S3 Bucket,上传一些静态的页面文件和图片,并将这些资源添加到你的 Elastic Beanstalk 网站。注册一个域名,或者使用现有的域名,总之你得有一个。然后配置 Route53 域名服务。把 < 你的域名 > 指向你的 Elastic Beanstalk,并配置 static.< 你的域名 > 从 S3 Bucket 获取数据。为你的静态 S3 网站启用 SSL,这很重要。为你的 Elastic Beanstalk 网站启用 SSL。本阶段目标:你的网站现在通过 HTTPS 提供所有数据。除非你不必自己管理服务器、Web 服务软件、网站部署或者负载均衡器,否则将会与从前一样。
微服务
对你的 Elastic Beanstalk 网站进行重构,使其仅仅提供 API。只能通过 POST 和 GET 从 DynamoDB 数据库更新和检索特定的数据。使其成为一个简单的 REST API,把 api.< 你的域名 > 作为 URL 提供。将你的 Elastic Beanstalk 网站的 UI 部分移到你的静态 S3 网站,当页面加载时使用 Javascript 从 api.< 你的域名 > URL 中检索数据。将数据发送到 Elastic Beanstalk URL 以使其更新 DynamoDB 数据库。将数据地址从 static.< 你的域名 > 改为 < 你的域名 >。本阶段目标:你的 Elastic Beanstalk 部署现在只是一种从数据库检索数据的结构化方式。所有 UI 和应用程序逻辑均通过 S3 Bucket 提供。由于你不再使用昂贵的服务器来提供网站的静态数据,因此你可以支持更多的用户。
Serverless
编写一个 AWS Lambda 函数,每天晚上定时将 DynamoDB 表中的所有财富数据通过邮件发送给你。可以使用 Python 3 的 Lambda、Boto3、亚马逊 SES 或者 CloudWatch 的预定功能都可以。将上述应用重构为无服务器应用。这有点抽象,你需要自己做很多研究和实验。架构:静态 S3 网站前端调用 API 网关,它执行 Lambda 函数来读取和更新 DyanmoDB 表中的数据。使用启用了 SSL 的存储区作为包含静态内容的主域名登录页面。创建一个 AWS API 网关,使用它将 HTTP 请求转发到 AWS Lambda 函数,该函数从 DynamoDB 查询与 Elastic Beanstalk 微服务相同的数据。你的 S3 静态内容应该使用 Javascript 调用 API 网关,然后使用检索到的数据更新页面。首先提供“Get Fortune”API 网关并确保 Lambda 函数能够工作,然后提供“New Fortune”API。本阶段目标:你的 API 网关和 S3 Bucket 由 CloudFront 通过 SSL 进行配置。你没有部署 EC2 实例。所有工作均由 AWS 服务完成,根据使用情况计费。
成本分析
熟悉 AWS 的定价方式,了解满足自己服务的最低价。当你构建服务时,问问自己下列问题:每个月大概会花费多少钱?将会进行怎样的扩展,成本会如何变化?明确架构基本虚拟主机:静态网页使用 HA EC2 实例即可微服务:Elastic Beanstalk SSL 仅适用于 API + S3 的静态网站,所有静态内容的静态网站还需 DynamoDB 数据库表 + Route53 + CloudFront SSL本阶段目标:使用 API网关 + Lambda 函数的无服务器网站 + 针对所有静态内容的 DynamoDB + Route53 + CloudFront SSL + S3 静态网站
自动化
这些技术在自动化时最为强大。你可以在几分钟内创建一个开发环境,体验之后可以随意抛弃。这并不容易,只有真正熟练的人才擅长这样做。将上述系统进行自动化部署。使用任何你想要的工具。比较流行的是 AWS CloudFormation 或者 Teraform。将代码存储在 AWS CodeCommit 或者 GitHub 上。是的,你可以使用原生 AWS 工具将上述所有内容进行自动化部署。我的建议是,当你手动完成与应用程序相关的部分时,就会返回并自动执行基础架构的配置。比如,自动配置你的 EC2 实例。在启用静态网站托管的情况下自动创建 S3 Bucket。这并不容易,但当你看到它工作时,这一切都是值得的。
持续交付
当你对自动化部署足够熟悉之后,你应该去探索并实施持续交付。开发一个 CI/CD 管道,以便在新代码发布时自动更新基础架构的开发部署,然后构建一个函授工作流程以在批准时更新生产版本。Travis CI 是一款强大的 SaaS 工具,Jenkins 的关注度也很高,如果你想坚持使用 AWS 特有的技术,可以试试 CodePipeline。
其他
以下内容也是 AWS 的重要主题,值得你探索:
IAM:你应该真正了解如何创建复杂的 IAM 策略。为 EC2 实例角色和 Lambda 执行角色执行基本的角色和策略当然是必不可少的,但实际上这里还有许多更加高级的功能。网络:从头开始创建一个新的 VPC,其中包含多个子网,当其正常工作之后,再创建一个 VPC 并将它们放在一起。在每个子网中获取一个虚拟机,互相使用其私有 IP 地址来通信。KMS:重做早期的 EC2 实例,在磁盘上启用加密。学习如何加密 AMI。
我最近一直在负责云系统工程师和云系统管理员的招聘工作。我们面试了几十个具有相关经验的求职者。一开始,我都会和他们聊一聊 DynamoDB 或者弹性伸缩。我发现很少有人真的会动手操作。许多人对这些概念很熟悉,但是当涉及到细节的时候,他们都不太了解。实际动手,你会学到很多。
如果你在工作中没有机会学习,我建议你构建一个小巧而华丽且令人印象深刻的个人项目,你可以通过这个项目来提升自己的技能。将它开源到 GitHub 上,编写专业的文档,尽可能获得更多的评论,并提供网站的演示。将项目链接添加到你的 LinkedIn 上,在你的简历中引用它,并在求职过程中展示给面试官答案。如果你完成了这个任务并熟悉了 AWS 的大部分服务,我相信你在面试时能够回答很多实操性的问题。
#学习路径#