BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

一文掌握AWS,成为云计算工程师

| 作者 SpectralCoding 关注 0 他的粉丝 ,译者 安翔 关注 0 他的粉丝 发布于 2018年7月27日. 估计阅读时间: 12 分钟 | BCCon2018全球区块链生态技术大会,将区块链技术的创新和早期落地案例带回您的企业

如今,越来越多的人通过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/

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT