如今,越来越多的人通过 AWS 来入门云计算。很多初学者都迫切地想要知道如何才能成为一名 Linux 管理员,于是我想通过本文详细介绍一下云计算的相关知识,希望能够借此来解答开发者心中的疑问。本文既包括 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 域名服务。把 www.< 你的域名 >.com 指向你的 Elastic Beanstalk,并配置 static.< 你的域名 >.com 从 S3 Bucket 获取数据。
- 为你的静态 S3 网站启用 SSL,这很重要。
- 为你的 Elastic Beanstalk 网站启用 SSL。
- 本阶段目标:你的网站现在通过 HTTPS 提供所有数据。除非你不必自己管理服务器、Web 服务软件、网站部署或者负载均衡器,否则将会与从前一样。
微服务
- 对你的 Elastic Beanstalk 网站进行重构,使其仅仅提供 API。只能通过 POST 和 GET 从 DynamoDB 数据库更新和检索特定的数据。使其成为一个简单的 REST API,把 api.< 你的域名 >.com 作为 URL 提供。
- 将你的 Elastic Beanstalk 网站的 UI 部分移到你的静态 S3 网站,当页面加载时使用 Javascript 从 api.< 你的域名 >.com URL 中检索数据。将数据发送到 Elastic Beanstalk URL 以使其更新 DynamoDB 数据库。将数据地址从 static.< 你的域名 >.com 改为 www.< 你的域名 >.com。
- 本阶段目标:你的 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 的大部分服务,我相信你在面试时能够回答很多实操性的问题。
原文链接: https://www.reddit.com/r/sysadmin/comments/8inzn5/so_you_want_to_learn_aws_aka_how_do_i_learn_to_be/
评论