写点什么

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

  • 2018-07-22
  • 本文字数:3553 字

    阅读完需:约 12 分钟

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

2018-07-22 13:142711

评论

发布
暂无评论
发现更多内容

在线JSON转YAML工具

入门小站

json

Tableau Day3:智能分析

贾献华

Tableau 1月月更

ubuntu隐藏终端路径

Ayosh

ubuntu #Ubuntu

企业办公IM风云再起,未来将朝三大方向发展

BeeWorks

中文分词的原理与方法及其在运维领域中的实践

云智慧AIOps社区

算法 分词 智能运维 日志解析 技术黑板报

做数据分析已经会Excel了,还要学Python吗?

博文视点Broadview

java开发之SpringBoot 定时任务动态管理

@零度

JAVA开发 springboot

2021 年 25 大 DevOps 工具(下)

禅道项目管理

DevOps

KubeMeet 新年首站成都开放报名!5 场云原生应用交付开源实践

阿里巴巴云原生

阿里云 开源 云原生 KubeMeet 线下活动

青藤:东西向流量占比80%,安全如何有效搞定?

青藤云安全

技术干货 | 基于标准 WebRTC 低延迟直播的开源实践

网易云信

WebRTC 网络协议 直播技术 低延迟

企业级开发平台的业务场景/运行机制/功能

BeeWorks

Kafka架构及基本原理简析

编程江湖

kafka

5步带你掌握工作流Activiti框架的使用

华为云开发者联盟

工作流 流程 任务 Activiti 静态数据

Spring中用了哪些设计模式

编程江湖

spring

大数据开发之Hive调优技巧

@零度

大数据 hive调优

Linux之chmod命令

入门小站

Linux

关于熟经济和通胀--《香帅中国财富报告》摘录(2/100)

hackstoic

经济

设计模式【9】-- 外观模式?没那么高大上

秦怀杂货店

Java 设计模式 外观模式

ReactNative进阶(七):导航组件 react-navigation

No Silver Bullet

React Native 导航 1月月更

没想到,学棋五年的我竟然输给了昇腾CANN!

华为云开发者联盟

机器人 强化学习 CANN 昇腾 机械臂

2022 年 Python 项目管理最佳实践(qbit)

qbit

前端开发之JS中localStorage的使用

@零度

JavaScript 前端开发

【LeetCode】括号的最大嵌套深度Java题解

Albert

算法 LeetCode 1月月更

深度剖析:Kafka 请求是如何处理的? 看完这篇文章彻底懂了

Kafka中文社区

熬夜整理56个JavaScript高级的手写知识点!!专业扫盲!

Sunshine_Lin

JavaScript 面试 进阶 ES6 手写

物联网平台分为几层,你了解吗

华为云开发者联盟

物联网平台 终端 物联网 IoTAgent 智慧家庭

云计算厂商们,你们辜负了中国的用户

Geek_2749b8

云计算 云服务

Vue3的8种组件通信方式

编程江湖

Vue 3

带你认识FusionInsight Flink:既能批处理,又能流处理

华为云开发者联盟

flink 批处理 流处理 FusionInsight Flink 计算框架

全新UI西游H5决战天宫游戏详细图文架设教程

echeverra

一文掌握AWS,成为云计算工程师_服务革新_SpectralCoding_InfoQ精选文章