ACloudGuru 博客中文翻译(十六)

原文:ACloudGuru Blog

协议:CC BY-NC-SA 4.0

借助 Puppet ,摆脱配置漂移的困扰

原文:https://acloudguru.com/blog/engineering/how-to-get-rid-of-configuration-drift-with-puppet

不幸的是,在您的环境中有同事说不要碰的服务器是很常见的。这些脆弱、陈旧的机器只会通过票证和断电提醒你它们的存在。

这些是漂移服务器(这也将是一个乐队令人敬畏的名字)。使用像 Puppet 这样的配置管理工具将这些错误的服务器恢复到正常状态是对您最有利的。

什么是配置漂移?

配置漂移是指机器被调整和更改到不再匹配原始状态的程度。

像这样难以控制的系统需要花费时间和精力来管理和排除故障。让它们回到正常工作的稳定状态需要不断检查并确保它们配置正确,就像制造厂的质量控制人员一样。

如何用 Puppet 修复配置漂移

Puppet 可以通过将配置(文件、注册表、软件等等)转换成易读、易懂,而且最重要的是可执行的代码来帮助您解决配置漂移问题。下面是怎么做的!


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

云迁移:角色扮演游戏 云迁移活动需要策略和知识——有点像龙与地下城&的游戏。加入这一独特的角色扮演练习,让专家通过真实的云迁移场景进行游戏。


1.从信息收集开始

第一步是尽可能找到关于该机器配置的所有信息。

您找到的任何文档都会有所帮助,但是很有可能自服务器部署后就没有更新过。毕竟,上一次有人在修复服务器故障后检查文档更新是什么时候?这变成了事后的想法,这也是为什么代码为的基础设施不仅是部署的更好方式,而且是跟踪您的变更和配置的更好方式。

请确保您还检查了票务系统,以了解有关该服务器的事件和更改。最重要的是,看一下系统,确保它匹配。环境中发生了许多未记录的变化,最好是识别出那些潜在的“陷阱”


使用 Puppet 却不想自己编写模块?

尝试使用 Puppet Forge 的动手实验室,这是一个由 PuppetLabs 托管的在线存储库,存储在 Puppet 基础设施中使用的公共模块。


2.构建一个副本

一旦确定了所有的配置,就该将这些知识转化为代码,并构建一台与原始机器完全一样的机器(没有奇怪的问题)。

从最基本的选项开始,逐步深入到更复杂、更具体的细节。您可能会注意到,并非所有的配置都是工作状态所必需的,这是很自然的。绷带被放在伤口上,你在建造一个新的身体。(弗兰肯斯坦会骄傲的。)

如果这不是您第一次使用 Puppet,那么您可能已经有了一套可以参考和重用的基本配置,而不是重新发明轮子。如果没有,恭喜你!你现在也在为你所有的未来构建创建它们。回收是节省时间和制定标准的关键。说到标准,这让我们进入下一步。

3.试图标准化

大多数容易出问题的构建往往不会经常被触及,这意味着过时的软件需要升级。

将配置转化为基础设施的代码可以让你的部门有一个特殊的交换筹码。特别是更新、升级和更改系统软件和操作系统以符合稳定性和安全性标准的能力。您需要部署的软件越少,环境就越容易管理和修复。

想想看,如果一个机械师只需要和一个制造商和一种型号的汽车打交道,他们的工作会有多容易。管理基础架构也是如此!只要确保你的新标准版本仍然与应用程序或平台一起工作。


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

获得痛苦的云词典
说云不一定要努力。我们分析了数以百万计的回复,找出了最容易让人犯错的概念。抓住这个云指南获取一些最痛苦的云术语的简洁定义。


4.测试,测试,部署

因为您的代码将成为管理和重新部署服务器的事实标准,所以请确保它能够工作!保持对每个版本的测试,并确保系统在部署后立即工作,无需额外的配置。如果没有,找出原因并修改代码。

当该说的都说了,该做的都做了,并且您准备好实现时,您将不得不决定是将您的代码应用到现有的系统中,还是用一个新的系统来替换它。不管怎样,高兴吧!。。。把旧系统踢到路边。

5.重复使用你创造的东西

现在,您的机器已经重新联机,不会再给您带来任何麻烦,是时候用另一台机器重新开始了。

这不可能是唯一需要修理的机器。像以前一样,从信息收集开始,然后继续下一步。将您所编写的代码应用到您企业的其他系统中。

控制失控的服务器对您部门的底线和您的心理健康非常重要。使用 Puppet,您会慢慢地发现自己有了更好的基础设施,需要解决的问题更少,并且有更多的时间从被动转变为主动。


做一个木偶大师

准备好成为傀儡大师了吗?(假设你不是想成为一名口技表演者或组建一支重金属乐队,那你来对地方了!)在 ACG 对初学者友好的木偶入门课程中学习木偶如何工作以及何时使用它。

如何使用微软 Azure 入门人工智能

原文:https://acloudguru.com/blog/engineering/how-to-get-started-with-ai-using-microsoft-azure

你是否曾经想要创建自己的人工智能解决方案来进行预测或正确检测图像中的对象?你有没有想过“我怎么入门 AI?”在这篇文章中,我们将讨论如何以及从哪里开始学习人工智能的基础知识,以及如何在 Microsoft Azure 上充分利用人工智能。


蔚蓝你的事业成功

从 ACG 开始通过微软 Azure、AWS、谷歌云等领域的课程和实际动手实验室改变你的职业生涯。


人工智能(AI)如今变得越来越普遍。从自动驾驶汽车和家庭自动化到会走路、会说话的机器人!好吧,最后一个没说太多,但是我们快到了!(与此同时,至少我们已经掌握了如何让机器人变得令人毛骨悚然。)

准备好了解更多关于如何与 AI 相处以及 Azure 如何帮助您开始学习之旅的信息了吗?让我们开始吧!

什么是人工智能?

人工智能(或 AI)是使用软件或计算机系统来复制人类的行为或动作,如语音识别或视觉感知。

举个常见的例子,想想语音助手——比如 Siri、Cortana 或者 Alexa。它们像人类一样“听到”声音并做出反应。自动驾驶汽车和下棋的计算机是人工智能的其他例子。

我如何开始学习人工智能?

学习一项新技术总是令人生畏的。有这么多地方可以开始,通常主题会非常复杂——特别是如果你来自非技术背景。

不幸的是,人工智能也不例外。。。

但是等等!好消息是,微软已经认识到这一挑战,并推出了人工智能基础认证(众多 Azure 认证之一),旨在给你投身人工智能的信心。

更好的消息是,我们在一个名为 AI-900:微软认证 Azure 人工智能基础的云专家那里开设了一门课程,旨在带你从对人工智能一无所知到通过 AI-900 认证!

学 AI 需要有技术背景吗?

不要!即使你来自非技术背景,我们的 AI-900:微软认证 Azure AI 基础课程也不需要任何编码技能。我们从基础开始,逐步提高,直到你准备好通过人工智能基础考试。


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

得到蔚蓝云痛苦辞典
说云不一定要辛苦。我们分析了数以百万计的回复,找出了最容易让人犯错的概念。抓住这个云指南获取 Azure 中一些最痛苦术语的简洁定义。


充分利用 Azure 上的人工智能的 3 个技巧

现在我们知道了从哪里开始,让我们来看看在 Azure 上最大限度利用 AI 的三种方式。

1。阅读文档并探索人工智能演示

你会看到“阅读文档”在云专家那里出现了很多次。这并不是最激动人心的任务,但是阅读文档是使用云计算的重要组成部分。

在人工智能的背景下,你应该看看你正在使用的任何服务的文档。

例如,如果你正在使用 Azure Face,请确保查看它提供的文档和功能。(右此处。)

当你开始的时候,只看概述或者快速启动是一个好的开始。

一旦你对这项服务更加熟悉,并且想要构建一些东西,那么参考部分和操作指南就会变得非常有用。

此外,一定要看看微软的 AI 演示。这些将让您了解服务是如何工作的,并且可以在不需要自己进行任何编码或设置的情况下使用。

2。使用 Azure 上的机器学习工具

机器学习是大多数人工智能服务或功能的基础。因此,我们想要很好地理解它是如何工作的,并利用 Azure 提供的工具是有意义的。

首先是 Azure 自动化机器学习,如果你刚刚开始,这是很好的,因为它将帮助你自动化大部分过程,并给你一个工作模型,你可以部署和使用它来开始进行预测!

我们的第二个选择是 Azure 机器学习设计师。当您想进一步设计自己的管道并调整各个方面以获得性能更好的模型时,这是非常好的。

3。亲身体验各种服务

最后,你要确保你获得了各种人工智能服务的实践经验。这些选项从我上面提到的机器学习选项到 Azure Custom Vision、Azure Face 等等。

通过动手实践,你将能够更快地了解人工智能是如何工作的,并且你将处于一个很好的位置来制定你自己的人工智能解决方案!

增加你的人工智能智商

现在是开始使用人工智能的最佳时机——而且从未如此简单!在我们的 AI-900 课程和您将在网上找到的工具和资源之间,您将能够为人工智能的未来奠定坚实的基础,并获得进入人工智能世界的起点。在你知道它之前,你将会建立你自己的人工智能解决方案来接管世界!(注:请不要创造一个 AI 解决方案来接管世界。)

想要跟上所有事物的蔚蓝和云?在 YouTube 上订阅一位云专家的每周微软 Azure 新闻(以及其他云提供商的新闻)。你也可以在脸书上喜欢我们,在推特上关注我们,或者在 Discord 上加入对话。

如何在云专家 GCP 上开始使用基础设施即代码(IaC)

原文:https://acloudguru.com/blog/engineering/how-to-get-started-with-infrastructure-as-code-iac-on-gcp

想知道如何在谷歌云平台(GCP)上开始使用基础设施即代码(IaC)吗?好吧,如果你对 GCP 有所了解,但对 IaC 了解不多,那么我有一个故事给你!聚集起来,大师们,来听一个关于 IaC、GCP、一个叫做谷歌部署管理器的工具和一个叫罗伊的人的故事。

从前…

从前,有一个叫罗伊·g·比夫的人。他是 Virtucon 公司的新实习生。他的第一个任务是熟悉 Google Cloud Deployment Manager。他在办公桌前坐下来,在那里他找到了下面的架构图。

“嗯,”罗伊想。尽管罗伊熟悉谷歌云平台的基础知识,但他之前从未使用过部署管理器。

他决定做一些严肃的研究(也就是快速的谷歌搜索)来挖掘一些关于谷歌云部署管理器的信息。Roy 了解到,Deployment Manager 是一个 GCP 工具,用于将基础架构定义为可重用模板的代码。

Roy 对图表有了更多的了解,他决定应该使用云外壳向部署管理器 API 提交一个配置文件。然后,部署管理器将使用计算引擎 API 来请求所需的资源,即使用默认 VPC 网络的 VM 实例。

罗伊匆匆写了一份清单,以确保他把所有的事情都安排妥当。


设置多台服务器?我们都知道在几台服务器上连续运行命令是乏味且容易出错的。查看我们的动手实验室,学习使用引导脚本在谷歌计算引擎中自动完成新服务器的基本设置。


Google 云部署管理器清单

  • 启用了部署管理器和计算引擎 API 的 Google 云项目
  • 定义资源和项目信息的配置文件
  • 将配置文件发送到部署管理器 API 的能力

让我们看看 Roy 是如何完成这三项任务的。


对 Amazon Web Services 上的基础设施代码感兴趣?
查看AWS 上的 IaC 指南


部署管理器配置文件

Roy 继续阅读关于使用云部署管理器的文档。在早期的项目启动同步中,Roy 获得了一个启用了正确 API 的 GCP 项目。

他的下一步是学习更多关于用于以代码形式设计基础设施的配置文件。他了解到配置文件描述了要在 Google 云平台上创建或配置的资源。每个资源都有三个在 YAML 文件或 Python 模板中定义的组件**。YAML 文件必须包括资源部分。**

资源定义
名称:第一虚拟机资源名称
类型 : compute.v1.instance我们想要创建的资源类型
属性:此资源类型的参数

Roy 知道,在代码文件的资源部分,他需要添加一个关于要创建的资源的名称、类型和属性。这不是很难编码,也很容易记住。

如果 Roy 想创建一个不同的资源,比如说一个 VPC 网络,他会将类型改为 compute.v1.network 并使用与网络资源相关的属性。Roy 收藏了下面的站点,它提供了一个所有支持的资源类型的列表。

突击测验

下面是一个配置文件的摘录。关注一下 my-first-vm 实例的属性,您能确定属性中的每个主要参数定义了什么吗?

在思考上述问题时,Roy 注意到有四个不同的参数用于 compute.v1.instance 类型,它们是:

  • zone: 指定将在 Google Cloud 中创建资源的区域
  • machineType: 指定机器大小——考虑实例的内存和 RAM
  • disks: 指定要使用的磁盘类型,如果是引导磁盘,则指定要安装的操作系统映像
  • **网络接口:**指定 VPC 网络,需要外部 IP 地址

罗伊还注意到了文件上的凹痕图案。Roy 记得配置文件是用 YAML 结构编写的,它使用缩进来分隔资源、参数(属性)和值。

对配置文件有了很好的理解后,Roy 接下来需要将文件传递给部署管理器 API。根据图表,要使用的工具是 Google Cloud Shell

在幕后,Roy 用 Google 项目细节更新了示例配置文件。

谷歌云外壳

Roy 之前在准备 Google Certified Associate Cloud Engineer 考试期间使用了 Cloud Shell,因此他记得 Cloud Shell 是一个基于网络的终端,连接到一个预装了工具的容器化实例,以便与 Google 云平台进行交互。

云壳预装了 Google SDK。Roy 决定将配置文件提交给部署管理器 API,并使用 Google Cloud Shell gcloud 命令行工具。

设置配置文件

罗伊连接到谷歌云控制台,并在他的网络浏览器中启动了云壳连接。进入终端后,Roy 验证他是否在正确的项目中,并在活动的配置文件中设置区域。

接下来,罗伊推出了云编辑器,一个有用的基于云的 IDE 工具。在编辑器中,Roy 在一个已知的位置创建了一个名为roys.yaml的新文件。(文件的扩展名需要是 YAML 格式。)

Roy 然后将在该网页上找到的示例配置文件复制并粘贴到编辑器中。Roy 记得他需要将标记为“ My_Project 的部分更改为他的项目名称。(这个完成的比较早,不过是个例子让你知道 Roy 改了什么。)

也许您还想更改虚拟机名称或用于部署的网络?使用此链接下载或复制 roys.yaml 文件,以便在您的 Cloud Shell 实例中跟进。

使用 gcloud 部署配置文件

完成后,Roy 就可以部署文件了。Roy 使用命令行界面切换到保存 roys.yaml 配置文件的目录。

Roy 使用下面的命令通过 Cloud Shell 向部署管理器 API 提交资源请求。

gcloud deployment-manager deployments create roys-test --config roys.yaml

  • gcloud 是谷歌 SDK 工具
  • 部署管理器是资源
  • 部署是我们需要的服务
  • 为了创建一个名为 roys-test 的部署
  • 使用配置文件命名为**<roys . YAML>**

部署经理

单击 submit 后,Roy 观察了部署管理器进度指示器。15 秒钟后,他收到了一条返回消息,表明操作已经成功完成。

Cloud Deployment Manager 非常出色地让您知道文件中是否有任何错误,以及如何修复它们,所以不要担心:如果您遇到错误,请列出更改列表并重试。

在 Roy 的案例中,一切都按计划进行,他使用 gcloud compute instances list 命令查看新部署的详细信息。(部署是使用部署管理器部署的资源的名称。)

删除资源以降低成本

在故事的这一点上,Roy 打破了第四堵墙,并提醒我们在结束时删除 Google Cloud 测试资源。(我们不希望你拿个账单,怪这个故事。)所以要像罗伊一样。不要忘记使用这个命令删除项目中的资源——如果您更改了它,用您的部署名称替换 roys-test.yaml

gcloud deployment-manager deployments delete roys-test

通过完成上面的步骤,你(或者更确切地说,Roy)应该在 Google Cloud 上的项目中创建了一个 VM。从此每个人都过着幸福的生活。

掌握将基础设施作为代码进行管理

像所有技能一样,将基础设施作为代码来管理需要实践。谷歌有一个很好的关于使用部署管理器的演练。但是你可以亲自去学习如何在谷歌云平台上以代码形式管理你的基础设施,这是一门名副其实的云大师课程在 GCP 用部署管理器以代码形式管理基础设施。

培养技能,成为现实世界中的专业云架构师。Google Certified Professional Cloud Architect课程旨在高效教授专业云架构师认证所需的技能,即使用 Google Cloud 技术设计、开发和管理动态解决方案,以推动业务目标。看看您是否具备通过当今最具挑战性和最受欢迎的云计算认证的条件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Explore using Google Cloud Deployment Manager as your tool of choice for orchestrating infrastructure needs on GCP in this course from A Cloud Guru.

如何在云职业生涯游戏中获得金牌

原文:https://acloudguru.com/blog/engineering/how-to-go-for-gold-in-the-cloud-career-game

对云人才的需求非常大,这导致了超高的薪水、丰厚的津贴和面向未来的职业道路。但是这到底是什么意思呢?

雇主们竞相寻找拥有云计算技能的员工

LinkedIn 连续多年将云计算列为最受欢迎的硬技能之一,并给出了以下 2021 年的 T2 评估,称雇主越来越多地寻求和投资围绕 T4 AWS(或亚马逊网络服务)的技能。

“现在,全球各地都非常需要技术技能,因为公司希望保持竞争优势,并通过创新创造成功的记录。今年,领英顶级公司的员工在 AWS (增长 42%)、 Python (增长 25%)和机器学习(增长 23%)方面增长了技能——所有这些技能都在推动几乎每个行业的创新

雇主寻找的不仅仅是 AWS 技能。对微软 Azure 技能的需求也在上升,尤其是在企业组织中——95%的财富 500 强公司都在使用微软的云。谷歌云 (GCP)技能也很抢手,GCP 认证经常高居薪酬最高的云认证榜首。

随着无数公司寻求云人才,投资云技能可以帮助员工在当前的组织中晋升或获得新的工作(今天大约有 120,000 人列在实际上是上)。

云工程师的平均工资为 117,000 美元

听起来不错,是吗?但是让我们谈谈报酬。跳槽可能会让人觉得是一项艰巨的任务。值得你付出努力吗?

事实上报道目前美国云工程师的平均基本工资是 117,360 美元(外加 10,000 美元的年度奖金)。

不算太寒酸。当然,你的里程数可能会因地点而异(或者在日益增长的远程优先的工作世界中可能不会如此),但简而言之:如果你正在寻求加薪和更多机会,投资发展你的云技能可能是明智之举。

但是你从哪里开始呢?


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看点:解决“无经验”的云招聘问题
需要经验才能得到工作,但需要工作才能得到经验。这是一个多云的第 22 条军规!观看免费点播的网络研讨会,了解帮助数十人获得第一份云计算工作的 ACG 挑战赛。


预备,预备,云!

无论你是一个完全的技术新人,希望开始你的云职业生涯,还是有一些经验并希望掌握新技能,云大师的实践学习方法都可以让你走上职业成功之路。有了 ACG 的支持,您可以获得专家指导和实践,让您的云事业有一个良好的开端。

考虑一下云大师学员 Thad McMullen 的职业生涯。Thad 在 3 个月内工资翻了一番,从一份服务台工作转到了云计算职业。

凭借 400 多门课程和 1,800 多个动手实验室,您可以微调您的云培训方案,以满足您的确切需求。今天就开始为你梦想的工作进行培训。95%的 ACG 用户表示我们的工具和内容直接帮助了他们的职业生涯。

现在是开始云计算生涯的最佳时机。

在您的云计算职业生涯中坚持到底

说到云技术,游戏规则总是在变。幸运的是,有一个云计算专家,很容易保持领先。

为了帮助您抢占先机,请查看我们的当前促销和交易以获得 ACG 会员的最优惠价格。或者注册一个免费账户,查看我们目前的免费云培训阵容

后续步骤

一旦 ACG 站在你这边,你应该从哪里开始呢?

  • 查看 ACG 的学习路径,通过云学习内容绘制一条最适合你理想职业的路径。

  • 查看官方的 ACG 不和谐服务器。在这里,您可以提问、与朋友一起学习、赢取奖品,并在您的云之旅中寻求支持。

  • 云技术一直在变化。与云趋势保持同步,通过 ACG 的原创系列了解云的最新动态,包括:

面向云学习者的相关资源


在您的云计算职业生涯中获得金牌

立即加入游戏。开始掌握推动你职业发展的技能。

如何用亚马逊 S3 托管静态 HTML 网站

原文:https://acloudguru.com/blog/engineering/how-to-host-static-web-sites-with-amazon-s3

如何使用 AWS 实现持续优化

原文:https://acloudguru.com/blog/engineering/how-to-implement-continuous-optimization-with-aws

随着组织的快速成长和发展,持续优化(CO)的实施非常重要。有很多方法可以做到这一点,但在实践中执行起来可能会很棘手。持续优化有四个阶段:可见性感知管理和实际优化。让我们深入了解如何使用 AWS 来实现这一点。

能见度

这个阶段主要是收集数据。这包括监控您现有的架构、工作负载和资源。这可能需要使用 CloudWatch、Security Hub、QuickSight 和 Cost Explorer 等服务。您还可以利用 S3 透镜等服务功能,更深入地了解您的铲斗使用情况。

CloudWatch 可以用来监控你的资源使用情况。查看每个资源的使用情况。使用量有随机峰值吗?资源使用是否有一个时间表?你看到太多未被充分利用的资源了吗?这是你注意到所有这些问题的阶段。

(不熟悉 CloudWatch?查看这个动手实验

AWS 安全中心从其他几个安全服务收集信息,如 AWS 防火墙管理器、Amazon GuardDuty、Amazon Inspector 和 AWS Config。当您想要查看环境的安全状况时,这是您的首选服务。寻找任何需要解决的问题。AWS Security Hub 为每个调查结果分配低、中或高状态,以帮助您确定这些调查结果的优先级。

在优化的这一部分,你应该看看你的发现,并在头脑中得到一个好的游戏计划。计划解决这些发现,并找出所有需要纠正这些发现的人。我写了一篇关于安全中心的更深入的文章,你可以看看。

亚马逊 QuickSight 是一项商业智能服务。使用它来可视化您的环境和资源中的所有数据,包括来自亚马逊 S3、亚马逊红移和亚马逊雅典娜等服务的数据。它可以用来可视化从成本到使用的一切。亚马逊 QuickSight 也有一些非常惊人的功能,如可共享的仪表盘。您可以创建一个仪表板,并提供一个可以共享和嵌入的 URL,以防您想要在应用程序中实现它。

Amazon QuickSight Q 允许您对您的数据提出自然语言问题,并以可视化方式接收您的答案。Amazon QuickSight 分页报告可以帮助您创建、安排和共享报告以及数据导出。在优化的这一阶段,使用 Amazon QuickSight 将您的数据整合在一起,并通过仪表板可视化。使用仪表板帮助将信息传递给合适的人。更多详情,请阅读我们的 QuickSight explainer 文章

AWS Cost Explorer 是一款云财务管理服务。使用它来可视化、理解、预测和管理您的成本和使用情况。AWS Cost Explorer 可用于按服务、帐户、指定时间和节约计划或预订生成成本报告。报告也可以定制和共享。

尽可能细化这些报告,并确保您收集的信息与需要包含的内容相匹配。与最需要查看报告的合适人群保持一致。我做了一个关于 AWS 成本优化的深度课程,你可以查看一下,其中包括八个动手实验。)

意识

现在,我们已经看到了我们现有的架构、工作负载和资源的现状,我们准备传播意识。把我们收集的所有信息交给决策者。您还可以记录正在使用的托管服务的数量。这将帮助你更容易处理下一步。

这也是我们拜访老朋友信任的顾问的时候。值得信赖的顾问可以帮助我们了解架构在哪些方面不符合最佳实践。它从其他服务中收集信息以产生其发现。这些发现跨越几个类别:成本优化、性能、安全性、容错和服务限制。这些调查结果还按建议的行动、建议的调查和排除项目的检查进行优先排序。将这些发现传递给正确的团队。

管理

我们的下一步是采取行动。所有这些未充分利用的资源都需要削减。应该清除快照。应该释放未使用的弹性 IP。需要实施使用计划。应该为您的实例设置自动缩放。有几个像 Amazon RDS 这样的服务会自动缩放,因为它是一个托管服务。尽可能利用托管服务将有助于您提前控制成本,并从长远来看节省您的团队工作。

在此阶段,需要修补安全漏洞,这可能包括实施新服务或使用 AWS Systems Manager Patch Manager 更新实例。这还包括更新您的 AMIs,以确保随着您的发展,使用这些 AMIs 的任何实例都不会带来安全风险。从安全中心和值得信赖的顾问那里获得这些发现,并加以纠正。

如果没有预算警报,那就设置它,并设置它来提醒合适的人。控制您的云预算对于量化组织如何从总体上使用云中获益非常重要。

最佳化

这是我们的“最后”阶段。您已经纠正了所有问题,现在您正在微调现有的架构、工作负载和资源。通过使用 AWS Compute Optimizer 之类的服务来尽可能地收紧,或者在最初的可视化中获得更多的粒度。

虽然这是最后一个阶段,但这并不意味着你已经完成了。一点也不。优化的想法是一个持续的过程。尽可能经常地保持监测、观察、分享、纠正和重新开始。随着您的组织的发展壮大,您的架构也在发展壮大。引用伟大的沃纳的话,“进化或死亡。”

使用事件驱动架构实现可以轻松发展和增长的架构。这将有助于你更顺利地推进优化过程,而不会碰壁。

非常感谢你今天和我一起,大师们。记住:深呼吸,小步走,一如既往,保持牛逼!


从这些 10 个有趣的动手项目开始构建你的云计算技能,学习 AWS


受控故障的混沌工程

原文:https://acloudguru.com/blog/engineering/how-to-improve-your-systems-by-injecting-controlled-failure-with-chaos-engineering

混沌工程是关于将受控中断引入分布式系统,仔细研究行为,识别薄弱区域,并通过自动化提高弹性。

通过自动消防演习使您的系统防火。

随着微服务架构的发展,分布式系统变得越来越复杂,并且随着开发速度的增加,变得更加不可预测。

分布式系统可能有不同的服务,这些服务在隔离状态下运行良好,但是与其他系统组件的交互可能会产生不可预测的行为—通常只在生产环境中暴露和观察到。

“任何事情都会失败。我们会失去整个数据中心!这些事情会发生。”

Werner Vogels

那么,我们如何在这些弱点扩散到我们的生产系统并影响客户体验之前识别它们呢?

受控中断

通过精心设计引入受控中断的实验,我们可以主动识别和解决弱点,并摆脱功能失调和被动的事件响应模式。

中断可以简单到终止一个 Linux 服务器上的进程,或者导致为生产中的客户服务的实时流量段出错。

将受控中断引入复杂分布式系统的混沌工程示例实验包括:

  • 停止、重启和终止个虚拟机
  • 删除网络服务、路由器和负载平衡器
  • 模拟整个区域的故障
  • 在服务之间引入延迟、丢失消息主题、随机错误和崩溃的 docker 容器
  • 模仿第三方 API 的不可用性或造成额外的延迟
  • 模拟 I/O、CPU 和内存峰值的操作系统问题

虽然混沌工程技术仍在被较小的组织学习和采用,但这些方法已经在亚马逊和网飞这样的大型组织中制度化了。

失败即服务

为了支持受控中断,FaaS(Failure as a Service)架构是在伯克利大学的一项研究中提出的。

目标类似于消防演习。也就是说,在经历意外的故障场景之前,云服务可以不时地执行故障演习,以找出其恢复不起作用的真实部署场景。

该架构基于三个重要特征:

  1. 故障演练基于大规模的中断注入
  2. 针对在线生产环境进行故障演练
  3. 故障演练作为一项易于使用的服务可供组织使用

该架构包括以下组件:

  • FaaS 控制器是一种容错服务,它向虚拟机中运行的代理发送防火练习命令。
  • FaaS 代理运行在与目标服务相同的虚拟机上,并接收调用受控中断的钻取命令。
  • 监控服务收集有关目标服务的数据,这些数据用于故障演练场景和规范。

该体系结构为设计用于在大规模分布式系统中引入常见故障模式的系统提供了基本模型。

通过利用混沌工程的原理来应对大规模的在线故障,你的组织和系统可以发展成一种更有弹性的——防火的——文化。

您对混沌工程有什么经验,或者您的组织在采用这些技术时面临什么挑战?在推特 上留言或 联系我!


获得更好职业所需的技能。

掌握现代技术技能,获得认证,提升您的职业生涯。无论您是新手还是经验丰富的专业人士,您都可以通过实践来学习,并在 ACG 的帮助下推进您的云计算职业生涯。


如何使用 Amazon event bridge API Destinations 将您的工作负载与 Slack 相集成

原文:https://acloudguru.com/blog/engineering/how-to-integrate-your-workload-with-slack-using-amazon-eventbridge-api-destinations

API 使您的应用程序能够发出请求、传递数据和使用第三方服务的功能。随着在 Amazon EventBridge 中 API 目的地的推出,您现在可以直接从 AWS 中的事件调用外部 API。这使得将您的应用程序与软件即服务(SaaS)提供商(如 ZendeskPagerDuty )集成更加容易,或者将数据发送到任何公开 REST API 端点的服务。

当系统状态发生变化或您的工作负载发生变化时,就会发生事件。它可能是存储在 S3 中的新对象,来自控制台的新登录,或者是在您的电子商务应用程序中处理的支付。事件是一个 JSON 结构,它包含了所发生事件的细节,并且有许多事件是由 AWS 服务自动生成的。

对于无服务器开发人员来说,API Destinations 使得构建微服务变得更加简单,这些微服务可以响应工作负载内部或 AWS 服务生成的事件。这种集成取代了定制代码,有助于管理机密和 API 密钥,并自动处理下游请求的排队和节流。

通过将 AWS 事件与外部服务相连接,您可以:

  • 当审批工作流在 AWS 步骤功能中完成时,通过 Stripe 发放信用卡退款。
  • 自动打开 GitHub 问题以响应 AWS CodeStar 中的构建失败。
  • 当 Amazon DynamoDB 表中的数据发生变化时,在 Contentful 中创建新的产品页面。

在这篇博文中,我将展示如何与 Slack 进行集成。这会导致基于您的 AWS 帐户中的事件的消息发布到 Slack 通道。

这个示例使用 AWS 无服务器应用程序模型 (AWS SAM)将解决方案部署到您的 AWS 帐户。您可以使用这里介绍的代码来构建与服务的类似集成,如 GitHubStr i peContentful

概观

在示例应用程序中,您为 Slack 配置 API 目的地,并配置 EventBridge 规则来路由特定事件。架构看起来是这样的:

  1. AWS 服务和自定义应用程序生成事件。这些都用 JSON 表示。
  2. 一个 Amazon EventBridge 事件总线接收事件。
  3. 规则评估事件是否匹配指定的模式。这些模式也用 JSON 表示,可以匹配传入事件的属性。匹配 Slack 规则的事件被转发到 API Destinations 目标。
  4. API 目的地配置使用一个包含授权秘密的连接和一个 API。API 包含目标 URL、http 方法和其他配置信息。
  5. 外部 API 接收事件。这个例子使用 Slack,但是目标 URL 可以是任何 REST API 或 webhook。

要开始,你需要安装 AWS CLIAWS SAM 。你还需要一个备用账户,但这里显示的一切都可以使用免费账户完成。

API 目的地功能如何工作

EventBridge 规则将匹配的消息路由到目标,API 目的地是一种目标。它由包含认证信息的连接API 配置组成。连接中提供的凭证安全地存储在 AWS 秘密管理器中。一个连接代表一个目标服务,一个连接可以被多个 API 和规则使用。

虽然您可以使用 Lambda 函数调用外部 REST API,但是 API Destinations 提供了额外的管理和配置选项,否则您将使用自定义代码编写这些选项。您可以配置一个每秒调用速率,这可以保护 API 免受突发流量高峰的影响,并有助于减少繁忙系统中的调用数量。

在内部,EventBridge 使用一个队列来保存超过此速率的请求。它可以缓冲这些消息长达 24 小时。API 目标的最大超时是 5 秒,服务将重试任何超过此超时的调用。


自动化 AWS 成本优化
AWS 为您的企业提供了前所未有的价值,但经济高效地使用它可能是一项挑战。在这个免费点播的网络研讨会中,您将了解 AWS 成本优化工具和策略的概况。


测试 API 目的地功能

Webhook.site 是一个有用的调试工具,可以回应任何传入的请求,帮助查看 API 调用中发送了什么。在创建 Slack 集成之前,首先部署一个 EventBridge 规则,该规则带有一个路由到 Webhook.site 的 API 目的地。

要部署此解决方案:

  1. 导航到https://webhook.site/并复制唯一的 webhook URL。

  2. 克隆代码回购:
    git clone https://github.com/aws-samples/serverless-patterns

  3. 更改目录:
    cd ./eventbridge-api-destinations/1-webhook-site

  4. 部署 AWS SAM 模板:
    sam deploy --guided

  5. 当提示输入 MyWebhookURL 时,输入步骤 1 中的 URL。

要测试应用程序:

  1. 将目录改为主代码库:
    cd ..

  2. 向 EventBridge 发送测试事件:
    aws events put-events --entries file://testEvent.json

  3. API 调用到达 Webhook.site,在这里您可以看到有效负载和头:

这个示例应用程序将整个事件负载传递给 API 端点。testEvent.json 中的测试事件出现在 Webhook.site 的原始内容字段中。

了解 AWS SAM 模板

该模板部署多个 AWS 资源。首先,它创建了一个新的事件总线:

 MyEventBus:
    Type: AWS::Events::EventBus
    Properties:
      Name: "MyEventBus" 

API 目的地由一个连接和一个 API 组成。由于这是一个开放的 API,所以授权被定义为 API_KEY,并由 Webhook.site 注销:

 MyConnection:
    Type: AWS::Events::Connection
    Properties:
      AuthorizationType: API_KEY
      Description: 'My connection with an API key'
      AuthParameters:
        ApiKeyAuthParameters:
          ApiKeyName: MyWebhook
          ApiKeyValue: MyAPIkey 

API 将调用端点设置为在部署期间作为参数提供的 URL。它将 HTTP 方法配置为 POST ,并将消息限制为每秒 10 条:

MyApiDestination:
    Type: AWS::Events::ApiDestination
    Properties:
      Name: 'MyWebhookTest'
      ConnectionArn: !GetAtt MyConnection.Arn
      InvocationEndpoint: !Ref MyWebhookURL
      HttpMethod: POST
      InvocationRateLimitPerSecond: 10 

最后,模板定义了一个规则,该规则确定一个事件模式,然后将目标设置为新的 API 目的地:

 EventRule: 
    Type: AWS::Events::Rule
    Properties: 
      Description: "EventRule"
      State: "ENABLED"
      EventBusName: !Ref MyEventBus
      EventPattern: 
        source:
          - "MyTestApp"
        detail-type:
          - "MyTestMessage"       
      Targets: 
        - Arn: !GetAtt MyApiDestination.Arn
          RoleArn: !GetAtt EventBridgeTargetRole.Arn
          Id: "MyAPIdestination" 

EventBridge 服务也需要调用 API 目的地的权限,因此 IAM 角色授予了这种访问权限。


获得痛苦的云词典
说云不一定要努力。我们分析了数以百万计的回复,找出了最容易让人犯错的概念。抓住这个云指南获取一些最痛苦的云术语的简洁定义。


将 Slack 设置为 API 目标

首先,您必须配置对 Slack 帐户的 bot 访问。为此,请按照 中的说明为您的工作区 创建一个 bot,并记下 bot 的令牌(该代码以 xoxb 开头)和通道 ID。您需要这两个值来部署此解决方案。

API 目的地支持三种不同类型的授权:基本用户名和密码、OAuth 和 API 密钥。Slack bot 使用 OAuth 方法,在 Authorization 头中作为载体令牌传递。这个令牌随每个 API 请求一起传递,使 Slack 能够验证发送者。

要部署松弛示例,请执行以下操作:

  1. 从终端,改变目录:
    cd ../2-slack

  2. 部署 AWS SAM 模板:
    sam deploy --guided

  3. 系统会提示您输入三个参数:

    1. MySlackToken:从 Slack 配置中输入 bot 令牌(这个从 xoxb 开始)。
    2. MySlackChannel:输入 Slack 中的频道 ID。
    3. MyEventBusName:接受默认值 MyEventBus ,因为该模板使用第一个示例中部署的相同事件总线。

要测试松弛集成,请执行以下操作:

  1. 将目录改为主代码库:
    cd ..

  2. 向 EventBridge 发送测试事件:
    aws events put-events --entries file://testEvent.json

  3. 该消息出现在松弛频道中:

了解 AWS SAM 模板

这个模板中使用的连接资源配置一个在 API 请求的授权头中传递的令牌。它在松弛令牌前添加“承载”关键字:

 Type: AWS::Events::Connection
    Properties:
      AuthorizationType: API_KEY
      Description: 'My connection with an API key'
      AuthParameters:
        ApiKeyAuthParameters:
          ApiKeyName: 'Authorization'
          ApiKeyValue: !Sub 'Bearer ${MySlackToken}' 

API 配置使用 Slack 的 Post Message API,并将调用速率限制为每秒 10 条消息:

 MyApiDestination:
    Type: AWS::Events::ApiDestination
    Properties:
      Name: 'MySlackNotifier'
      ConnectionArn: !GetAtt MyConnection.Arn
      InvocationEndpoint: 'https://slack.com/api/chat.postMessage'
      HttpMethod: POST
      InvocationRateLimitPerSecond: 10 

该规则使用与前面定义的相同的事件模式,过滤源为 MyTestApp 和细节类型为 MyTestMessage 的所有事件:

 EventRule: 
    Type: AWS::Events::Rule
    Properties: 
      Description: "EventRule"
      State: "ENABLED"
      EventBusName: !Ref MyEventBusName
      EventPattern: 
        source:
          - "MyTestApp"
        detail-type:
          - "MyTestMessage"       
      Targets: 
        - Arn: !GetAtt MyApiDestination.Arn
          RoleArn: !GetAtt EventBridgeTargetRole.Arn
          Id: "MyAPIdestination"
          InputTransformer:
            InputPathsMap:
              text: $.detail.event
            InputTemplate: !Sub >
              {
                "channel": "${MySlackChannel}",
                "text": <text>
              } 

在第一个示例中,整个事件负载被传递给目标。然而,Slack 需要特定的 JSON 属性,所以它使用一个输入转换器从有效负载中提取这些属性。输入路径映射部分定义了有效载荷的变量,而输入模板嵌入了 AWS SAM 参数和输入路径变量。结果是您可以配置一个有效负载来匹配 API 的特定需求。

结论

使用 API 目的地,您可以使用 EventBridge 调用第三方 API,而无需编写任何业务逻辑。该服务提供可配置的节流和安全的密钥管理,同时为超过此限制的消息缓冲长达 24 小时的消息。

通过过滤由 AWS 服务或定制应用程序生成的事件,您可以使用这种集成来扩展工作负载的功能。API Destinations 构建于现有的 EventBridge 功能之上,引入了连接API 资源来帮助配置凭证和定义 API 端点。

在这些例子中,您将消息发送到 webhook 调试服务和 Slack。使用所示的方法,您可以修改模板和有效负载格式来过滤不同的事件,并与几乎任何外部 REST API 端点集成。

要部署这些模式和其他模式,请参阅无服务器世界中新的无服务器模式集合。想了解更多无服务器提示和技巧吗?查看我们的 6 款最受欢迎的工具,让无服务器过渡变得轻而易举!


获得更好职业所需的技能。

掌握现代技术技能,获得认证,提升您的职业生涯。无论您是新手还是经验丰富的专业人士,您都可以通过实践来学习,并在 ACG 的帮助下推进您的云计算职业生涯。

通过应用服务环境在 Azure 中隔离您的应用

原文:https://acloudguru.com/blog/engineering/how-to-isolate-your-apps-in-azure-with-app-service-environments

在这篇博文中,我们将讨论如何使用应用服务环境来帮助保护 Microsoft Azure 中的应用。

在云中构建 web 和无服务器应用变得越来越普遍。当你想到利用像微软 AzureAWSGCP 这样的云提供商变得越来越容易时,你就会明白为什么了。

云计算可以让您更轻松地部署可扩展、高性能、甚至可全球访问的应用程序,通常比传统的托管平台省力得多。

然而,还有一些东西也变得越来越常见:头版新闻报道公司应用程序和数据的安全漏洞。


通往更好职业的钥匙

从 ACG 开始通过 AWS、Microsoft Azure、Google Cloud 等领域的课程和实际动手实验室改变你的职业生涯。


如何在 Azure 中隔离应用?

因此,如果您正在询问(或被询问)有关安全性的问题,您并不孤单。你可能会被问到的一个具体问题是:我如何将我的应用程序与其他客户隔离开来?

有几种技术可以保护 Azure 中的应用。在这篇博客中,我们将通过了解应用服务环境来关注一种特定的方法。

有哪些 App 服务环境?

应用服务环境(也称为 ASE)允许您通过使用隔离的计算和虚拟网络资源在 Azure 中托管应用程序,因此您的应用程序可以与其他客户工作负载更加隔离。

你为什么要这么做?如果你正在构建一个必须遵守严格标准的应用程序,这通常是很重要的——比如在处理机密信息时。

为了理解这是如何工作的,以及为什么这很重要,我们将看看 Azure 应用服务的幕后,并特别关注它与应用服务环境的不同之处。因为你将会了解到,应用服务环境实际上很容易建立和运行,并且与 Azure 应用服务非常相似(只是更具隔离性)。

什么是 Azure App 服务?

如果你在 Azure 中构建一个 web 应用,你可以使用 Azure 应用服务。Azure 应用服务是一种流行的 PaaS 产品,可以简化 web 应用部署和托管。Azure 应用服务提供负载平衡、自动扩展和 SSL 加密等功能,而无需管理底层基础设施。

Azure App Service 还支持 Azure Functions,这是一种 Azure 服务,通过允许您专注于正在实现的功能的单独代码,来帮助您构建无服务器应用程序。您可以配置触发器,以便代码只在需要时运行,并简化与其他 Azure 服务的集成。

当你使用 Azure App Service 时,你可以以比你自己管理所有必需的基础设施的成本低得多的价格获得所有这些功能。

应用服务应用是否运行在共享基础设施上?

云提供商如何提供比你更便宜的服务?通过规模经济。Azure App 服务是一个多租户服务。也就是说,许多客户与您共享相同的基础架构。

微软确保你的应用与其他客户分开,但当你保护你的解决方案时,了解其他客户确实与你共享服务元素是很重要的。

使用 Azure App Service 时,您的应用需要负载平衡、前端连接、出站连接和计算来执行代码。根据您使用的是共享应用服务计划还是专用应用服务计划,许多组件将与其他人共享。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这对于云计算来说很正常。其他人(如微软)管理许多客户共享的基础架构。这也是为什么它有助于理解云中的共享责任。

那么,如果你想在云中开发一个解决方案,但是不允许使用共享基础设施,会发生什么呢?

在处理必须保持安全的信息时,这种情况很常见。例如,对于某些政府或国防机构,可能不允许在共享基础架构上处理最高级别的机密信息。

为什么要使用 App 服务环境?

在这些场景中,有可能以更隔离的方式利用应用服务功能。现在可能已经不足为奇了——您可以通过使用 ASE 来实现这一点。

尤其是使用 ASE 第 3 版,将您的 Web 应用或功能应用部署到隔离的基础架构变得非常容易。所有这些对开发者体验的改变都很小,并且可以访问普通应用服务应用可用的相同类型的功能。

使用 ASE 隔离基础架构有两种主要方式。

  • 首先,您可以利用专用主机,这意味着您的应用将在其上运行的底层虚拟机管理程序仅对您可用。不再与其他顾客分享。

  • 其次,您的应用服务环境可以部署到您自己的虚拟网络中,确保您能够更好地控制应用的网络安全、入口和出口。

如果你正在构建一个只能内部访问的应用,你可以使用内部 ASE。这确保了只允许通过虚拟网络进行访问。另一方面,如果仍然需要公共可访问性,您可以部署外部 ASE。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置好应用服务环境后,部署 web 或功能应用的流程与普通应用服务应用的流程大致相同。您将像以前一样配置一个应用程序,但不是为您的位置选择像 West US 这样的位置,而是选择您之前为您的位置配置的 ACE。

使用 ASE 时仍然需要应用服务计划,但您将选择一个独立的计划。这是指你的应用程序将与其他应用程序隔离开来。您可能还会注意到,该计划提供了与以前相同的功能,但具有更大的规模,这是一个额外的好处!

了解有关 Azure security 的更多信息

安全性通常是一种平衡行为,需要考虑很多事情。您可能想知道如何保护您用于 ASE 的虚拟网络,甚至想知道如何保护一个普通的应用服务应用。

如果你有兴趣了解更多关于在 Azure 中保护许多服务的信息,从身份到应用程序秘密,你可能会对我们的 AZ-500 微软 Azure 安全技术课程感兴趣。这是一门深入的实践课程,旨在通过 Azure 解决方案的实际操作为您准备 AZ-500 考试。


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

得到蔚蓝云痛苦辞典
说云不一定要辛苦。我们分析了数以百万计的回复,找出了最容易让人犯错的概念。抓住这个云指南获取 Azure 中一些最痛苦术语的简洁定义。

如何让您的 AWS Lambda 功能保持温暖

原文:https://acloudguru.com/blog/engineering/how-to-keep-your-lambda-functions-warm

了解如何安排 CloudWatch 事件规则来解冻 AWS Lambda 函数,并帮助将响应时间从 3 秒减少到几百毫秒。


通往更好职业的钥匙

立即开始 ACG 通过 AWS、Microsoft Azure、Google Cloud 等领域的课程和实际动手实验室来改变你的职业生涯。


使用无服务器架构有很多优点,有数百篇优秀的文章赞美它的优点,但一个令人痛苦的缺点是不常用的无服务器功能的响应时间通常很慢。

这是因为,有时,创建函数的容器不会被重用。因此,对于某些请求,AWS 需要在处理请求之前用您的代码重新提供一个容器。

对于后台任务,这显然不是问题。但是,如果你有一个由用户输入触发的任务,并且在收到响应之前阻止你的应用程序,那么这个函数必须是热的,这样你的响应时间可以是几百毫秒,而不是 3 秒。

另一方面,有时您的代码只是冻结在一个容器中,在处理新的请求之前可以“解冻”,这只需要几毫秒。

理想情况下,AWS 会有一个类似“保持温暖”的选项,您可以切换并同意支付更多费用来让 AWS 让未使用的容器一直运行。唉,这还没有(还没有?)已经实现,所以我们的下一个最佳选择是使用 CloudWatch 计时器。

那么如何才能让我们的 AWS Lambda 函数保持温暖呢?正如在栈溢出中所建议的,你需要每 5-15 分钟 ping 你的 Lambda 函数来保持它们的热度。这比你想象的要容易。

1.创建 Amazon CloudWatch 事件规则

首先,打开 AWS 控制台(是的,有一种方法可以通过 CLI 做到这一点),然后进入 CloudWatch 。从那里,转到Events并点击Create rule。将事件类型设置为Schedule,每 1 分钟运行一次该事件。

然后从Targets列表中选择您想要的 Lambda 函数并保存。然后,您需要创建一个名称和描述。

就是这样!你现在每 1 分钟检测一次 Lambda 函数。

2.测试 Amazon CloudWatch 事件规则

为了测试我们的计时器是否真的让函数保持活动,我们将创建一个函数,在全局范围内(在单个函数之外)将惟一的awsRequestId存储在一个名为containerID的变量中。

从技术上讲,这不是容器的 ID,但它会告诉我们一个容器是否被后续请求重用,因为我们只在尚未定义值的情况下写入它。

在部署这个函数、设置一个计时器并等待一段时间后,您可以检查您的 CloudWatch 日志,您会看到containerID在请求之间持续存在,这告诉我们,如果调用之间的间隔少于 1 分钟,AWS 会保持函数的热度。

所以为了科学起见,我继续为 1-15 分钟,以及 30、45 和 60 分钟的间隔设置了间隔计时器。这应该让我们知道 AWS 能让这些容器保温多长时间。

3.检查结果

快进 8 小时,我们就有结果了。我希望结果足够有趣,可以创建一个漂亮的图表,但是相反,我发现所有函数都是这种模式。

基本上,所有 Lambda 函数在实验期间都保持温暖,除了在世界协调时 14:00 左右的某个时候,AWS 决定重置所有容器,而不管它最近是否被使用过。

即使是 1 小时的 ping 也连续几个小时使用同一个容器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

These requests were 1 hour apart, but still used the same container.

所以看起来(至少从这个实验来看)脉冲的频率并不那么重要…

无论哪种方式,每 15 分钟左右 ping 一次仍然几乎不花什么钱,所以没有理由吝啬你的 CloudWatch 定时器。


获得更好职业所需的技能。

掌握现代技术技能,获得认证,提升您的职业生涯。无论您是新手还是经验丰富的专业人士,您都可以通过实践来学习,并在 ACG 的帮助下推进您的云计算职业生涯。


Sam Corcos 是 CarDash 的联合创始人,这是一家全方位的汽车礼宾服务提供商,消除了汽车服务、护理和维护的麻烦。他也是 学凤凰 的作者,以及 视线图 的创始人。

如何通过 AWS 认证 DevOps 工程师-专业考试

原文:https://acloudguru.com/blog/engineering/how-to-pass-the-aws-certified-devops-engineer-professional-exam

如果你正在考虑参加 AWS 认证 DevOps 工程师-专业认证考试,我在这里帮助你粉碎它!以下是我对如何准备考试的一些建议,以及考试中不同的领域所涵盖的内容。


加速您的职业发展

从 ACG 开始通过 AWS、Microsoft Azure、Google Cloud 等领域的课程和实际动手实验室改变你的职业生涯。


如何通过 AWS 认证考试?

在我们谈论 DevOps Pro 考试之前,这里是我关于参加和通过 AWS 认证考试(或任何认证考试,就此而言)的顶级提示。

  1. 快速浏览问题,做好复习标记
    考试开始时总是有些紧张。所以我试着快速行动。我会浏览一个问题的内容,如果我感到有点不确定,我会很快标记它以便复习,然后继续下一个问题。

    当你在考试中前进时,一个问题或答案常常会唤起你对你标记为复习的东西的记忆。我几乎总是发现,我标记为复习的问题在第二次阅读时更容易回答。

  2. 不要先看答案
    先看那些选择题答案很诱人,但是不要!当我阅读一个问题时,在查看答案之前,我会思考哪些 AWS 服务可能是相关的*。当我看到这些选择时,就很难让我改变主意了。这是筛选和剔除不正确答案的好方法。*

  3. 确定关键词和术语
    我最有效的省时技巧就是使用关键词和术语。场景中提到“实时”了吗?这通常与亚马逊 Kinesis 有关。当你看到那个关键词时,跳到答案并搜索 Kinesis。这样可以快速排除错误答案。

    您是否需要保护 S3 的数据(如个人身份信息)?这让亚马逊玛西尖叫。快速扫描给 Macie 的答案,剔除不提 Macie 的烂苹果。长期储存?意思是冰川。建立用于开发运维的服务列表,研究该服务的服务页面和常见问题,找到关键词和术语,并创建您自己的参考列表。

    本着节省时间的精神,就参加我的 DevOps Pro 培训课程!我确保在整个课程中识别关键词和术语。

总的来说,我考试时的主要策略是动作要快。记住,每个问题你只有两分钟多一点的时间。在你知道的问题上节省时间。不要在困难的问题上磨磨蹭蹭。做好复习标记,继续前进!

AWS 认证 DevOps 工程师-专业考试涵盖哪些内容?

AWS DevOps 认证难吗?如果你了解你的东西就不会。让我们把事情按领域分解,并强调一些粉碎考试的顶级技巧。

领域 1: SDLC 自动化

这个领域主要关注关键的 AWS 开发工具——AWS 代码提交AWS 代码构建AWS 代码部署AWS 代码管道。我最喜欢的掌握这个领域的技巧是不要走,而是运行AWS 管理控制台,转到 CodePipeline,并开始构建!

这是关键——研究落差!从源阶段开始,展开下拉列表。可以用什么回购?都在下拉列表中。接下来是构建阶段。有哪些选择?点击下拉菜单。哦,对了,CodeBuild 或 Jenkins!等等,它说构建阶段是可选的。然后是部署阶段(也是可选的)。

对于我们可以部署的内容,有许多选项。研究下拉菜单并记住它。使用不同的选项(CloudFormation、CodeDeploy、Elastic Beanstalk 等)进行一些部署。),而且有戏。

域 2:配置管理和基础设施代码

该领域重点关注 AWS CloudFormationAWS OpsWorksAWS Elastic Beanstalk 。理解这些服务做什么,它们的用例,以及何时使用其中一个而不是另外两个是很重要的。

对于这个领域,理解部署方法也很重要,比如蓝/绿部署。对于 CloudFormation,了解助手脚本及其用例。

域 3:监控和记录

这个领域由亚马逊 CloudWatch亚马逊 Kinesis 主导。了解 Kinesis 的四种风格及其各自的用例。记住“实时”这个关键术语!

EventBridge 是 CloudWatch 事件服务的演进。但重点还是在事件上。CloudWatch 还没有被弃用, CloudWatch 警报还在。所以要做好准备,因为你可能会在考试中同时看到 EventBridge 和 CloudWatch。请将它们视为可互换的。

领域 4:政策和标准自动化

该领域涵盖了执行特定但相对简单的任务的服务。例子有 AWS 配置亚马逊检查员亚马逊守卫亚马逊 Macie 。了解他们的使用案例!这些可能是考试中容易的分数。并添加一些关键词和术语,如:个人身份信息(PII) = Macie。

如果您看到关键字“audit”或“auditing ”,请开始考虑 AWS 配置。请记住,可信顾问可以提供建议,但是对这些建议做些什么取决于您(您可以从可信顾问自动化中构建自动化)。

AWS 系统管理器类似于 Kinesis,因为它有几种不同的产品。了解每种产品,以及它能为您做什么。

领域 5:事故和事件响应

值得理解的是,域 4 和域 5 之间有一些交叉服务,如 Systems Manager 和 Kinesis。这个领域的一个关键主题是从自动化我们对事故和事件的响应的角度来思考。因此,考虑在自动化中充当连接器和触发器的服务,如亚马逊 SNSAWS LambdaCloudWatch Alarms亚马逊 EventBridge 事件

不要忘记混合环境!我们如何从本地服务器获取服务器日志?安装云观察日志代理。我们如何管理本地服务器?安装 SSM 代理。这些是需要学习和理解的事情。

领域 6:高可用性、容错和灾难恢复

这个域名告诉了我们太多东西——我们想要分散我们的资源。我们如何做到这一点?想想多 AZ 服务和技术(自动伸缩、负载平衡),不要忘记多区域服务(比如 Amazon DynamoDB 全局表)。

谈到灾难恢复,请描绘一个时间表。根据恢复时间目标(RTO ),在时间线上向前推进。我们还能消沉多久?有了恢复点目标(RPO ),在时间线上向后移动。我们能承受多少数据丢失?了解这些问题的解决方案,你就可以开始了。

想了解更多关于成为 DevOps 工程师的信息吗?

这是一个关于如何应对 DevOps 工程师专业考试的快速分析!但是我的最高小费?查看我的新 AWS 认证 DevOps 工程师-专业培训课程,包括动手实验和创新图形,以增强视觉学习!

如果你还在寻找更多关于在 DevOps 工作的好处的信息,看看这些好帖子:

如何准备 RHCSA EX200 考试

原文:https://acloudguru.com/blog/engineering/how-to-prepare-for-the-rhcsa-ex200-exam

最近,我们推出了红帽认证系统管理员(EX200)考试准备课程。在新课程中,我们涵盖了您需要了解的所有 RHCSA 基本目标,RHCSA v8 考试中添加的两个新目标类别(“创建简单的 shell 脚本”和“管理容器”),以及最近添加的存储技术 Stratis 和虚拟数据优化器。

管理集装箱:入侵波德曼

集装箱如今风靡一时,这种流行已经进入了 RHCSA 考试。“管理集装箱”目标类别是考试和我们课程的新增内容。

RHCSA 容器目标包括:

  • 从远程注册表中查找和检索容器图像
  • 检查容器图像
  • 使用 podman 和 skopeo 等命令执行容器管理
  • 执行基本的容器管理,例如运行、启动、停止和列出正在运行的容器
  • 在容器内运行服务
  • 将容器配置为作为系统服务自动启动
  • 将持久存储附加到容器

从 7.6/8.0 开始,波德曼就可以在 RHEL 使用了,它是 Docker 的替代者。Podman 非常适合独立的容器环境,但它也是利用编排(如 Kubernetes 或 OpenShift)的大型环境的门户。

无论你是一个老手,还是对集装箱完全陌生,我们都会带你快速上手,在你知道之前,你就会精通波德曼集装箱。我们涵盖了启动容器、支持网络访问、添加持久存储以及使用 Podman 创建非根 systemd 容器的基础知识。通过课程和动手实验,您将了解到 Podman 和容器本身的强大功能。

k . I . s . s . s——了解它——简单的 Shell 脚本

Shell 脚本比 Linux 本身存在的时间还要长,它们是系统管理员工具箱中的一个重要工具。这个新增加的考试内容也在我们的课程中。

Shell 脚本目标包括:

  • 有条件地执行代码(使用:if、test、[],等等。)
  • 使用循环结构(for 等。)来处理文件,命令行输入
  • 流程脚本输入(1 美元、2 美元等)。)
  • 在脚本中处理 shell 命令的输出
  • 处理外壳命令退出代码

在本课程中,我们提供了一些简单的 shell 脚本,供您用来强化技能、练习新技能以及准备 RHCSA 考试。如果您想更深入地了解一个或多个脚本目标,我们还提供了对历史悠久的“Bash 脚本编写系统管理员指南”课程的参考。

Stratis——超级简单的储物方式

Stratis 存储是 RHEL 8 中的一项技术预览,在“管理分层存储”下的考试目标中有所提及是的,这是一块蛋糕使用。我们也没有把这道甜点留到最后;你会发现它就在课程中间!

Stratis 将 LVM 和 XFS 的概念结合成一个易于使用的界面。使用各种工具管理存储的时代已经一去不复返了。有了 Stratis,您可以用一个 CLI 来管理它们:stratis-cli。Stratis 守护进程 stratisd 在后台为你管理一切。

Stratis 是围绕存储池的概念构建的,这些存储池是从一个或多个磁盘或分区创建的。然后,从该池中创建卷,其中包含 XFS 文件系统。如果你是 LVM 的老手,这可能听起来很熟悉,对吗?

Stratis 可能易于使用,但它为存储游戏带来了一些高级功能,包括快照、精简配置和分层。这些功能非常强大,但由于 Stratis 管理界面,也很容易使用。

由于 Stratis 是一个技术预览版,很有可能你还没有得到它。别担心,我们会确保你得到你的甜点!

利用虚拟数据优化器最大化存储

自软盘时代以来,存储一直在不断发展,存储技术的最新发展是虚拟数据优化器(VDO),它包含在 RHCSA 考试目标“配置磁盘压缩”中。

自 RHEL 7.5 以来,虚拟数据优化器就一直伴随着我们,但它是当前 RHCSA 考试存储部分的重要组成部分。VDO 通过零数据块消除、重复数据消除和压缩实现了 Linux 中的内联式数据减少。您所要做的就是安装 VDO,提供一个块设备,并指定一个逻辑 VDO 卷大小。就是这样!您可以自由地将文件系统直接放在您的 VDO 设备上,或者您可能希望使用 LVM 将您的 VDO 设备分割成逻辑卷。可能性是无限的!

我们将探索独立的虚拟数据优化器(文件系统位于 VDO 之上),以及与 LVM 配对的 VDO。来获得优化吧!不需要软盘。

准备红帽认证系统管理员(EX200)考试

在我们的Red Hat Certified System Administrator(ex 200)考试准备课程中,我们将通过大量基于场景的课程介绍 Red Hat RHCSA 考试目标,这些课程旨在帮助您快速实现考试目标。这些课程附有额外的资源,使您能够根据需要更深入地研究这些主题。使用课程指南跟随课程,探索额外的 ACG 课程/课程/实验室进行强化,查看重要的 Red Hat 文档,等等。

除了课程之外,还有许多精彩迷人的动手实验。你将有机会卷起袖子直接进入主题,让你边做边学!

我们将把它们与考试挑战实验室结合在一起,它允许您在一个地方练习您所学的所有技能,为实际考试做准备。

所以,和我们一起戴上我们的红帽子,开始吧!

关于作者

我是汤姆·迪恩。我在 IT 行业工作了大约 25 年,最初是一名注册 Novell 工程师。我的重点是 UNIX、Linux、架构和许多其他相关技术。我在一个云计算专家那里做了一年多的讲师,向全世界教授 Linux。来和我一起准备 RHCSA 考试吧!


提升您的云计算事业。

加入云专家并获得课程、动手实验、测验和学习路径,这些将带你一步一步地从新手成为你所选择的云领域的专家。获得 7 天免费试用或查看我们的免费课程

如何保护你的服务器免受字典攻击

原文:https://acloudguru.com/blog/engineering/how-to-protect-your-server-against-dictionary-attacks

如何在 Azure 中快速应用策略

原文:https://acloudguru.com/blog/engineering/how-to-quickly-apply-policies-in-azure

在本帖中,我们将讨论如何使用 Azure Policy 在 Azure 环境中快速实现治理控制。

什么是 Azure 策略?

Azure 策略可帮助您在 Azure 资源上强制实施您组织的合规性要求。这可能有助于:

  • 出于安全考虑,限制对特定资源的访问
  • 通过限制虚拟机创建来降低成本
  • 将数据保存在世界的特定区域

通往更好职业的钥匙

立即开始 ACG 通过 AWS、Microsoft Azure、Google Cloud 等领域的课程和实际动手实验室来改变你的职业生涯。


使用 Azure 策略内置策略

要在 Azure 中快速应用策略,你需要首先从微软已经提供的内置策略开始。

这里没有必要重新发明轮子。你开始工作所需的大部分政策都已经存在。您可以快速拒绝、记录、更改或部署资源。一旦资源被创建、更新、删除,或者在 Azure 策略的正常评估周期(每 24 小时一次)期间,就会发生这种情况。

首先,在 Azure 的顶部导航菜单中输入“Policy”导航到 Azure Policy。Azure Policy 会自动填充到搜索菜单中,你可以在那里点击“Policy”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,您将单击左侧导航菜单中“创作”下的“任务”这应该看起来很直观,因为您正在尝试“分配”一个“策略”,所以从技术上来说,这使您成为一个“作者”,因为您有能力创建或创作策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从这里开始,您会在顶部看到“分配策略”或“分配方案”

旁注:计划就像策略一样,只是它们帮助您更容易地管理一组具有相同目标的策略。例如,如果您有十几个管理虚拟机合规性的策略,您可以创建一个虚拟机计划并添加、减少和管理计划策略,而不是一次应用一个策略。

出于我们的目的,我们将单击“分配策略”。

您将看到一些需要填写的选项卡和下拉列表。我们只想关注策略定义“下拉框”——我说的“下拉框”是指文本框右侧的省略号或肉丸菜单框。单击此处将打开“可用定义”页面,在这里您将看到所有精彩的内置策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要查找您想要开始的策略,您可以在“类型”旁边的搜索菜单中筛选策略

如果您首先键入想要管理的资源(例如,虚拟机),您将开始看到与该资源相关的所有可用策略。一旦你有了你想要的政策,点击“选择”,你将回到你的基本标签。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在“基本”选项卡上,您可以更改策略的范围,因为它将默认为您的订阅。您可以选择将其更改为更高的范围,如管理组,或者更低的范围,如资源组。您可以暂时保留默认选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您愿意,可以为您的策略取一个不同的名称,或者保持不变。

最后,写一个很酷的定义,瞧!你已经在 Azure 中快速应用了你的第一个策略。当然,这是在你点击“查看+创建”然后点击“创建”之后

了解有关 Azure 治理和合规性的更多信息

如果你觉得这篇文章有帮助,可以看看我的课程,Azure 上的治理和合规性介绍

这门入门课程旨在向您概述在您的云环境中有效使用 Azure 原生工具和框架以实现合规性和治理所需的微软最佳实践和方法。它涵盖了 Azure 中用于在 Azure 上实现治理的五种原生工具,并触及了一些常见的治理陷阱。


开始免费试用或查看本月免费云培训。你还可以在 YouTube 上订阅一位云专家的每周云新闻,就像我们在脸书上一样,在推特上关注我们,并在不和谐上加入对话。

如何在Azure 上运行无服务器 PHP

原文:https://acloudguru.com/blog/engineering/how-to-run-serverless-php-on-azure

随着 Azure Functions 自定义处理程序的到来,你现在可以在 Azure 上运行 PHP 无服务器应用。在本文中,您将看到如何通过让您的 PHP 项目读取 Azure 函数来利用这一新功能。

入门指南

无服务器应用程序的结构

Azure 无服务器应用具有以下文件夹结构:

├── HttpTrigger
│   ├── function.json
│   └── index.php
├── QueueTrigger
│   ├── function.json
│   └── index.php
├── deploy.sh
├── host.json
├── local.settings.json

每一个无服务器功能都存在于类似于HttpTriggerQueueTrigger的文件夹中。在这些文件夹中,你将有两个文件function.jsonindex.php

functions.json中,您将指定函数如何被触发,它接收什么参数,以及它返回什么,而index.php是包含您的函数逻辑的文件。要了解更多关于 Azure Functions 无服务器应用的结构,请看本指南: Azure Functions 开发者指南

对于 PHP,这是我们感兴趣的,你需要在你的函数文件夹中有一个index.php文件,就像上面的HttpTrigger例子一样。您的 PHP 代码必须遵循这些约定:

<?php
use Azserverless\Context\FunctionContext;

function run(FunctionContext $context) {
    $req = $context->inputs['req'];

    $context->log->info('Http trigger invoked');

    $query = $req['Query'];

    if (array_key_exists('name', $query)) {
        $name = $query['name'];
        $message = 'Hello ' . $query['name'] . '!';
    } else {
        $name = 'EMPTY';
        $message = 'Please pass a name in the query string';
    }

    $context->outputs['outputQueueItem'] = json_encode($name);
    $context->log->info(sprintf('Adding queue item: %s', $name));

    return [
        'body' => $message,
        'headers' => [
            'Content-type' => 'text/plain'
        ]
    ];
}
?>

您需要一个名为run的函数,它接受一个FunctionContext参数,该参数将包含您的函数接收到的输入,以及其他实用程序,如独白记录器。您还可以在$context参数中设置outputs,就像代码对outputQueueItem所做的那样,添加一个值,该值将在这种特定情况下被转发到一个队列中。

那么,这个FunctionContext是从哪里来的呢?它来自专门为 Azure PHP 开发的新的 Azserverless 库。

转到您的项目根文件夹,并在您的composer.json中添加以下依赖项:

"require": {
    "videlalvaro/azserverless": "*"
}

如果您没有安装 composer,请遵循此处的说明

然后在命令行上运行composer.phar install,这将获得所有需要的依赖项。

为 PHP 配置 Azure 函数

现在是时候告诉 Azure 函数如何运行你的 PHP 项目了。打开host.json。在该文件中,您应该添加一个顶级条目,指定该项目使用自定义处理程序运行:

 "customHandler": {
      "description": {
      "defaultExecutablePath": "php",
      "arguments": [
        "-S",
        "0.0.0.0:%FUNCTIONS_CUSTOMHANDLER_PORT%",
        "vendor/videlalvaro/azserverless/bin/serverless.php"
      ]
    },
    "enableForwardingHttpRequest": false
  },

我们告诉 Azure 函数如何执行 PHP,提供将请求转发给函数处理程序的vendor/videlalvaro/azserverless/bin/serverless.php文件的路径。

最后,我们需要告诉 azure 我们的应用程序将在PHP 7.4上运行。打开命令行,使用以下参数调用 Azure CLI :

az webapp config set --name your_app_name --resource-group your_resource_group --php-version 7.4

最后润色

在部署之前,确保配置您的local.settings.json文件,包括"FUNCTIONS_WORKER_RUNTIME": "custom"配置键/值和您的AzureWebJobsStorage连接字符串:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "custom",
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>;EndpointSuffix=<endpointsuffix>"
  }
}

最后,确保添加指南为 Azure 应用服务配置 PHP 应用中指定的 Kudu 脚本,以便composer在每次部署应用时运行,保持您的依赖关系最新。

就是这样!您应该准备好通过使用新的自定义处理程序特性将您的 PHP 应用程序部署到 Azure 功能中。

了解更多信息

如果您想了解更多关于本文所涉及的主题,请务必访问以下网站:

黑客快乐!

关于作者

阿尔瓦罗·维德拉是微软的一名开发者拥护者,他组织了 DuraznoConf。他是 RabbitMQ in Action 的合著者,并为计算机器协会撰写文章。你可以在推特上找到他的名字是 @old_sound

如何将 AWS 安全性左移:增强开发人员能力的 10 种方法

原文:https://acloudguru.com/blog/business/how-to-shift-aws-security-left-10-ways-to-empower-your-developers

在这篇文章中, 【唐·麦咭】——资深云架构师、杰出的安全工程师和 Stedi 的云安全负责人——分享了一些重要的左倾安全策略和围绕构建更好的安全态势所吸取的经验教训。此内容基于 d on 的保护您的 AWS 环境 ACG 网络研讨会。任何错误都是编辑的责任。

你可以尽你所能减少你的爆炸半径确保合规保护你的环境。但是提高安全性的最好方法之一是帮助开发者做出正确的选择和可靠的 IT 培训项目

让开发者做出正确选择的最好方法是让正确的选择变得更容易——让正确的方法比错误的方法更容易。通过这种方式,你可以授权给你的开发者,并在你的 AWS 环境中把 AWS 安全转移到左边。


保护您的 AWS 环境

在这个免费点播的网络研讨会中,唐·麦咭给出了复杂 AWS 环境从零到安全的详细分解。


提高 DevOps 安全性的左移策略

为什么要授权给你的开发者?因为集中管理导致开发人员参与和部署的减少。

我们不希望安全团队接管开发人员的部分工作,或者为他们制定规则。这降低了开发人员的速度,也让他们的工作更加困难。

相反,要找到让开发人员的生活更轻松的工具。目标是停止集中化,确保开发人员成为流程的一部分。你可以通过给团队直接反馈来实现这一点。

开发者能自己做决定的时候是最好的。不要只是说“不”。要透明地说明正在做什么以及为什么要做。然后,审核结果,并根据需要进行重定向。


云安全是您关心的问题吗?凭借 AWS 安全认证,您的团队将具备阿宁级别的安全技能,并为任何复杂的 AWS 项目做好准备。


1.使用云层防护

CloudFormation Guard 易于使用,允许你编写规则(有点类似于 AWS 配置)。工程师可以在本地或在 CI/CD 流程中运行 CloudFormation Guard。

  • 允许工程师在本地或管道中检查合规性
  • 符合 AWS 配置规则
  • 可以自动生成某些类型的规则

2.提供参考示例

  • 使用默认安全配置构建公共资源的 IaC 模板
  • 将模块用于更复杂的项目,如 VPC

在 Stedi,他们建立了许多可供工程师参考的例子。这包括最常见的 10 种错误配置以及如何修复它们。

3.调查边界权限

边界权限对工程师可以创建的 IAM 角色进行限制。

这些边界权限本质上是一个“不能做”的策略,必须附加到您在团队中扮演的任何角色上。所以你可以说,“你可以扮演任何你想扮演的角色。。。只要附上这个边界许可。”

这些权限可以是你知道你不希望你的工程师进入的所有事情——比如创建可以具有管理员访问权限的角色。你相信你的员工会做正确的事情,但你可以帮助确保他们不会意外地做错事。

4.使用 scp 通过限制 EC2 实例大小或禁止区域来防止错误

在最后一点的基础上,您可以使用 scp 更进一步。

在 Stedi,所有的拒绝都被传送到 Slack,这样工程师就可以看到什么时候出了问题。这样,他们就不必说,“我无法部署。这是怎么回事?”他们可以在频道中看到,“哦,我刚刚试图在 EU-西部 2 部署,这是一个禁止的区域。”他们可以看到他们在错误的地区,然后改变它。

5.确保开发人员在其部署中内置警报

我们希望确保开发者为他们的系统和健康建立警报。他们要对他们负责。所以才是 DevOps 。但是任何投入生产的系统都需要是可观察的。

6.看看 AWS 之外的安全性

这里涉及的内容很多,但是这里有一个需要考虑的事情的快速列表。

  • 使用秘密检测工具
  • 为机密管理、加密和部署工具等敏感事物提供通用路径
  • 以代码的形式管理一切,即使这意味着构建自己的资源提供者
  • owasp.org回顾 OWASP 前 10 名
  • 对所有员工进行安全意识培训
  • 使用 AWS 组织划分敏感系统
  • 利用第三方云安全工具
  • 利用第三方评估
  • 建立一个漏洞管理程序

7.从写文档开始

那么你从哪里开始呢?你从写作开始。如果你不能解释它并得到认同,你很可能无法建造它。写下你将如何实现安全并建立安全——控制,一切。

亚马逊有一些很好的例子,比如他们的 PR/FAQ 流程以及他们的一页和六页。你也可以找到这方面的视频。试试看——这很有效!

8.将所有基础设施排除在管理账户之外

管理帐户中没有基础架构。没有!

9.使用组织结构

org- formation 可能是管理 AWS 账户的最大的开源软件。看看吧!

  • 标准化的关键基础设施和账户创建
  • 实施最低安全策略
  • 允许 Stedi 在不到 10 分钟的时间内提供完全合规的新帐户

10.使用云安全态势管理(CSPM)

使用 CSPM。Config 与此类似。但是有很多第三方、开源和付费的选择。这将为您提供审核日志和对所有资源、合规性规则的全面了解,以及对关键问题的自动补救。

保护 AWS 环境需要记住的规则

  • 记住:你不能保护你看不见的东西。
  • 默认情况下减少公共访问。
  • 在配置或你喜欢的 CSPM 中建立规则。
  • 直接向您的工程师获取反馈。
  • 信任,但要核实。
  • 为任何规模的运营效率而设计。
  • 构建具有随时间自我改进的组件的系统。
  • 不要采取非常措施。
  • 仅针对当前需求构建。
  • 建造非凡的东西。

改变职业,改变企业

学得更快。动作快点。利用我们的课程和真正的技术以及 AWS、Microsoft Azure、Google Cloud 等领域的 IT 实践实验室转变您的团队。

如何在线教学:录制高质量的音频

原文:https://acloudguru.com/blog/business/how-to-teach-online-recording-quality-audio

你好!我是马蒂亚斯·安德森。我是一位云计算大师的讲师,我将教你如何为你的在线教学课程捕捉高质量的声音。这是一个多部分系列的第三课,所以请随意重温第 1 课第 2 课以获得更广泛的背景知识和更有用的提示。

将声音置于视觉之上

现在,我想从最重要的功能开始,那就是音频。没有任何声音,视频变得令人困惑,但没有视频,音频仍然可以讲述一个故事。这适用于你的在线教学,因为它强调你捕捉的声音比你的视频更重要。

也就是说,请不要认为你的视频不重要。因为视频也很重要——只是没有你的声音重要。如果你不同时关注这两者,那你就太傻了,对吗?你应该记住的指导方针是,清晰的音频比好的视频更重要,所以通常投资改善你的声音捕捉比让事情看起来完美更好。

距离造成了差异

那么,让我们开始解决音频方面问题。 当我为 ACG 学习者制作在线视频时,你会经常看到我身上带着一个特殊的麦克风,而不是依赖我相机内置的音频。这是为什么呢?嗯,因为我想优先考虑音频,而我相机上的麦克风只能做这么多。为了打造清晰、高品质的音频,我选择领夹式或翻领式话筒。它有助于创造广播质量的声音,因为它比我相机的麦克风更靠近我的嘴。

这并不意味着你需要购买像我这样的麦克风,因为你的情况可能不同,但扬声器和音频设备之间的距离是贯穿你的录音需要考虑的一个重要因素。即使在日常的电话会议中,了解电脑内置麦克风的限制以及它离你的声音有多远也很重要。

当麦克风靠近我的嘴时,它捕捉到的声音要比远离时清晰得多。但是太近也可能是不好的,可能会捕捉到一些声音,比如咂嘴声和强调爆破音,比如 Peter Piper picked a peck of 腌辣椒中的 P。

使用完美的比例

捕捉声音全靠比率。实际上,它主要是一个特定的比率:信噪比,或 SNR。在 SNR 中,信号是您想要捕捉的声音,比如您的声音。噪音是所有其他的声音——你不想捕捉的东西。这可能是外面路上的汽车,或者是一个设备发出的嗡嗡声,或者是你周围的其他人在说话。

现在,想象一个其他人在说话的情景——我肯定你以前经历过,对吗?如果你在一个繁忙的房间里谈话,而有人很难听到你的话,你会怎么做?一种选择是大喊大叫。如果你的声音比其他噪音都大,那么你的听众就能听到你的声音。这是你可以应用到自己的在线教学中的。

我并不是说你真的应该大声喊你的课,但是说得太小声会让麦克风更难听到你的声音。用饱满的声音说话与我们在其他剧集中讨论的其他事情有关,需要确保你说话时有足够的能量让你的学生参与到你的教学中。

但是,为了让别人听到,你还会本能地做另一件事:你们站得更近。即使你尽你所能大声喊叫,你的听众也永远不会在城镇的另一边听到你的声音,对吗?那显然太远了。即使是在一个繁忙的房间的另一边,你也不可能被听到。你需要靠近听众。事实上,有时你甚至可以把嘴凑到他们的耳边,把手握成杯状——这样,即使是你的低语也能在噪音中被听到。

找到适合你的方法

当然,这与麦克风的概念完全相同。这就是为什么我把麦克风靠近我的嘴,但不接触它。你也可以这样做。麦克风不需要很贵也不需要很花哨。它只需要靠近你的嘴。最好的方法之一是买一个便宜的有线麦克风,你可以夹在你的衬衫上,靠近你的衣领。一些翻领麦克风甚至直接插入你的相机,一些可以在你的智能手机上录制音频。

我的意思是,这是假设你在拍摄视频,学生会看到你的脸。如果你只是在录制音频——在幻灯片或其他东西上——那么就没有必要为一个夹式麦克风而烦恼。我们中的几个人在一个云专家那里用麦克风录制了我们的第一次课程,花费了我们不到 50 美元。我今天还留着我的。只要确保你的脸靠近你要用的东西。但是不要太近,记住。而且你可以通过自己录音和听来搞清楚什么是太近。以说“彼得·派珀摘了许多腌辣椒”开始。

当你听的时候,你也应该确定你没有得到不好的回音。如果你的嘴离麦克风足够近,并且不在墙边,那么这对你来说根本不是问题,因为回声噪声比你的语音信号离麦克风远很多倍。但是如果你确实听到了回声,你可以试着放一些柔软的东西——比如在你的墙上挂毯子或者毛衣。

同步音频和视频

我给新的在线教师的另一个建议是,如果可能的话,把你的麦克风直接插到记录你课程的显示部分的计算机或摄像机上。这样做的好处是,将音频和视频一起录制会使编辑变得更容易,因为它们是同步的。

你看过什么拍电影的幕后花絮吗?通常你会看到他们用来标记每个镜头开始的拍板。但是他们不仅仅是拍摄拍板——他们还从拍板中说出信息,并一起拍板。那个拍手就是让编辑同步音频轨道和视频的东西。因为如果它们不同步,那感觉就真的不对了。

所以,如果你正在分别录制你的音频和视频,总是开始两个都录制,然后你的手在一起。记得要确保你在相机的框架内,否则没用。然后,在编辑时,将手碰到的视频帧与拍手的音频波形中的凸起相匹配。如果你还不完全明白我的意思,也不要担心;第一次尝试的时候会更有意义。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

理想增益,解释

关于麦克风,我想提到的另一个重要特性是增益。增益是麦克风的灵敏度,有点像音量,但用于录音方面。

如果麦克风增益设置得太低,那么它将听不到任何声音。这就像一个用完电池或被关闭的助听器。如果你试图放大一个非常低增益的信号,这就像从外太空用你的手机拍摄的照片中试图放大并数某人头上的头发一样。好的,这个例子可能不是你或我亲身经历过的,但希望你能想象它并记住这是行不通的。如果你试图这样做,你的声音会失真,可能还会非常嘈杂。

但是相反的一端也一样糟糕:当增益设置得太高时,声波会被“削波”,你录下的声音听起来很糟糕。也许有可能听懂你说的话,但充其量还是会让你的学生耳朵紧张。在最坏的情况下,这将是完全无用的音频。

你需要设置你的增益**“刚刚好”**。想象一下金发女孩来到你家,为你支起麦克风。我知道她会怎么做。她会进入您麦克风的测试模式,查看声音水平记录在哪里,让您在录音时尽可能大声地说话,然后确保麦克风的信号反弹得很高,但不会变红或达到最大可能。就是这样!实际上,你甚至不需要金发姑娘的帮助;我相信你自己也能做到。

今天计划,明天少做编辑

最后,我想简单谈谈降噪。我指的是软件。事情是这样的。在编辑阶段,对你的音频信号进行降噪处理是完全可能的。有时会有帮助。但毫无疑问,它听起来不会像你在录音阶段消除噪音那样好。

这有点像把一片面包扔进泥里——当然,你可以试着把它清理干净,去掉大部分污垢,或者用水清洗,处理它有点湿的问题。但是你难道不想让它保持干净吗?本杰明·富兰克林(Benjamin Franklin)说:“一盎司的预防抵得上一磅的治疗”时,他可能不是在谈论为互联网录制视频,但它肯定适用于这里。

既然你是音频专家,我们接下来可以看看视频。明白了吗? 看视频?啊哈?

好吧……对不起。

不过这一课已经涵盖了足够多的好东西了,是时候歇歇了,让你消化一下。听起来不错吧?想想你自己的情况:你有哪些话筒可供选择?使用哪一个对你来说最省事?录音的时候哪个能离你的嘴最近?如果你已经试过了,你觉得哪一个最好听?尤其是当你调整增益和嘴巴的位置时。

我希望这能帮助你为你的在线教学录制更好的音频。如果你有更多的建议想要分享,请在 YouTube 视频上留下评论来帮助他人。保持安全,继续牛逼!

ACG 的老师精心设计每一门课程,让你在学习过程中保持投入和动力。探索我们的课程库

I hope this helps you record better audio for your online teaching.  And if you have any more tips you’d like to share, please leave a comment on the YouTube video to help others. Stay safe, and keep being awesome!


ACG instructors craft each course to keep you engaged and motivated on your learning journey. Explore our course library.

如何使用 AWS 跟踪、分析和可视化数据

原文:https://acloudguru.com/blog/engineering/how-to-track-analyze-and-visualize-user-group-data-using-aws

在本帖中,我们将讨论如何使用亚马逊定位服务对地址进行地理编码,如何使用亚马逊 EventBridge 和 AWS Lambda 每天将数据转换和加载到 S3,如何使用亚马逊 QuickSight 可视化和共享存储的数据,以及如何使用 SAM 自动化和协调整个解决方案

使用 AWS 了解用户群数据的趋势

新冠肺炎疫情已经将许多面对面的社区聚会转变为虚拟活动。发表在《应用心理学杂志》上的新研究表明,在虚拟会议、聚会和社交活动的时代,“变焦疲劳”是真实存在的。

社区总是询问支持用户组的方法。为此,我一直在寻找一种快速、有效、可靠的方法来分析用户组数据,并将其可视化到仪表板中。该解决方案有助于以多种方式获得洞察力:

  • **跟踪活跃的会议:**了解哪些用户组在过去 12 个月、6 个月或 3 个月一直活跃。

  • **可视化成员的位置:**使用地图查看我们团队的位置,以及他们的足迹有多大。

  • **跟踪事件:**使用一个按最后事件时间戳排序的表,查看哪些组最近发生了事件


加速您的职业发展

从 ACG 开始通过 AWS、Microsoft Azure、Google Cloud 等领域的课程和实际动手实验室改变你的职业生涯。


解决方案概述

这篇文章描述了我是如何构建这个解决方案的,从地理编码地址数据到在亚马逊 QuickSight 上的最终可视化。

在这个解决方案中,我从开发 Python 代码开始,从 Meetup 收集用户组数据。

为了在地图上标出每次聚会,需要地理位置数据。我使用亚马逊定位服务将地址地理编码为经度和纬度坐标。

然后,转换后的数据被发布到一个亚马逊简单存储服务(亚马逊 S3)桶中。

我使用 Amazon EventBridge 设置了一个每日作业来触发一个 lambda 函数来收集用户组数据。报告和可视化层是使用 QuickSight 构建的。最后,使用 AWS SAM 部署整个管道。

下图说明了这种体系结构。

收集用户组数据

AWS 用户组是定期聚会以分享想法、回答问题并了解新服务和最佳实践的社区。用户组使用 meetup.com 组织他们的活动。我对美洲页面的用户组中列出的加拿大和美国的用户组很好奇。

我使用了BeautifulSoup和 requests 库从 AWS 用户组网站抓取内容。

该脚本首先通过get_user_group_data函数获取每个用户组的 meetup URL。基于某些 div 属性的存在,它将相关的 meetup URL 和名称存储在一个要废弃的列表中。

接下来,get_meetup_info函数遍历列表并解析每个 meetup 页面上的信息,比如成员数量和 meetup 位置。原始数据保存为 CSV 格式,以便进一步处理。

本文中的解决方案仅用于演示目的。我们建议在与管理这些脚本的团队协商后,仅在您自己的网站上运行类似的脚本,或者确保遵守您试图抓取的网站的服务条款。

下面显示了该脚本的一个示例。

meetup_json = {}
	page = requests.get(meetup_url)
	usergroup_html = page.text
	soup = BeautifulSoup(usergroup_html, "html.parser")

	# Get Meetup Name
	meetup_name = soup.findAll("a", {"class": "groupHomeHeader-groupNameLink"})[0].text

	# Meetup location
	meetup_location = soup.findAll("a", {"class": "groupHomeHeaderInfo-cityLink"})[
    	0
	].text

	# Number of members
	meetup_members = (
    	soup.findAll("a", {"class": "groupHomeHeaderInfo-memberLink"})[0]
    	.text.split(" ")[0]
    	.replace(",", "")
	)

	# Past events
	past_events = (
    	soup.findAll("h3", {"class": "text--sectionTitle text--bold padding--bottom"})[
        	0
    	]
    	.text.split("Past events ")[1]
    	.replace("(", "")
    	.replace(")", "")
	)

地理编码用户组

为了在地图上绘制每个 meetup 组,我们需要 meetup 组中每个城市的经度和纬度。我可以使用亚马逊定位服务,通过地点索引将每个城市的名称地理编码成经度和纬度坐标。有关创建地点索引的更多信息,请参见亚马逊位置服务开发者指南

以下是使用地点索引进行地理编码的示例 Python 代码。

import boto3

def get_location_data(location: str):
	"""
	Purpose:
    	get location data from name
	Args:
    	location - name of location
	Returns:
    	lat, lng -  latitude and longitude of location
	"""
	client = boto3.client("location")
	response = client.search_place_index_for_text(
    	IndexName="my_place_index", Text=location
	)

	print(response)
	geo_data = response["Results"][0]["Place"]["Geometry"]["Point"]

	#  Example output for Arlington, VA:   'Results': [{'Place': {'Country': 'USA', 'Geometry': {'Point': [-77.08628999999996, 38.89050000000003]}, 'Label': 'Arlington, VA, USA', 'Municipality': 'Arlington', 'Region': 'Virginia', 'SubRegion': 'Arlington County'}}
	lat = geo_data[1]
	lng = geo_data[0]

	print(f"{lat},{lng}")

	return lat, lng 

使用 SAM 来协调部署

在本地测试脚本之后,下一步是创建一个机制来每天运行脚本并将结果存储在 S3。我使用 AWS 无服务器应用程序模型(SAM)创建了一个无服务器应用程序,它执行以下操作。

  1. 创建 S3 存储桶
  2. 创建每 24 小时触发一次的 CloudWatch 事件
  3. 部署 Python lambda 函数来运行数据抓取代码

下面是用于部署无服务器应用程序的大纲,突出显示了我使用的示例代码。

1。从终端窗口,初始化一个新的应用
sam init

2。更改目录: cd ./sam-meetup

**3。**更新依赖关系
*更新 my_app/requirements.txt

requests
pandas

4。更新代码
将您的代码添加到示例my_app/app.py

import json
import logging

import get_meetup_data

def lambda_handler(event, context):

	logging.info("Getting meetup data")

	try:
    	get_meetup_data.main()
	except Exception as error:
    	logging.error(error)
    	raise error

	return {
    	"statusCode": 200,
    	"body": json.dumps(
        	{
            	"message": "meetup data collected",
        	}
    	),
	}

5。更新模板. yml〔t1〕

Globals:
  Function:
	Timeout: 600
Resources:
  S3Bucket:
	Type: 'AWS::S3::Bucket'
	Properties:
  	BucketName: MY_BUCKET_NAME
  GetMeetupDataFunction:
	Type: AWS::Serverless::Function
	Properties:
  	CodeUri: my_app/
  	Handler: app.lambda_handler
  	Policies:
    	- S3WritePolicy:
        	BucketName: MY_BUCKET_NAME
  	Runtime: python3.9
  	Architectures:
    	- x86_64
  	Events:
    	GetMeetupData:
      	Type: Schedule
      	Properties:
        	Schedule: 'rate(24 hours)'
        	Name: MeetupData
        	Description: getMeetupData
        	Enabled: True

6。跑``sam build

7。将应用程序部署到 AWS sam deploy --guided

有关开发 SAM 应用程序的更多详细信息,请查看AWS SAM 入门


自动化 AWS 成本优化
AWS 为您的企业提供了前所未有的价值,但经济高效地使用它可能是一项挑战。在这个免费点播的网络研讨会中,您将了解 AWS 成本优化工具和策略的概况。


使用 QuickSight 可视化数据

为了共享用户组数据,我选择使用亚马逊 S3 的 QuickSight 作为数据源。

QuickSight 是一项原生 AWS 服务,可与其他 AWS 服务无缝集成,如亚马逊红移、雅典娜、亚马逊 S3 和许多其他数据源。

作为一项完全托管的服务,QuickSight 使团队能够轻松创建和发布交互式仪表盘。除了构建强大的可视化功能,QuickSight 还提供了数据准备工具,可以轻松过滤数据并将其转换为所需的数据集。有关创建数据集的更多信息,请参见使用亚马逊 S3 文件创建数据集

以下是仪表板的屏幕截图示例。


参加 Amazon QuickSight 速成班,学习如何使用这款 AWS BI 工具 查看您的数据。


结论

在本帖中,我们讨论了如何成功实现以下目标:

  • 使用亚马逊定位服务对地址进行地理编码
  • 使用 Amazon EventBridge 和 AWS Lambda 每天将数据转换并加载到 S3
  • 使用 Amazon QuickSight 可视化和共享存储的数据
  • 使用 SAM 自动化和协调整个解决方案

该解决方案可用于深入了解与技术社区的互动。如果你有兴趣加入当地社区,请点击这里查看 AWS 用户组页面。

关于作者

Banjo 是 AWS 的一名高级开发人员,他在那里帮助开发人员对使用 AWS 感到兴奋。Banjo 热衷于将数据操作化,并围绕利用数据启动了一个播客、一个 meetup 和开源项目。当没有建造下一个大东西时,Banjo 喜欢通过玩视频游戏特别是 JRPGs 和探索他周围发生的事件来放松。

如何解决 3 个常见的 Azure AD Connect 错误

原文:https://acloudguru.com/blog/engineering/how-to-troubleshoot-3-common-azure-ad-connect-errors

在你的科技职业生涯中,你可能会听到类似这样的话:“我们希望利用云和我们现有的基础设施。我们如何做到这一点?”

有几种不同的方法可以使用微软 Azure 来帮助实现这个目标,但在我看来,Azure AD Connect 是最有用的方法之一。该服务使您能够将内部身份与 Azure 同步。

在这篇文章中,我们将探讨如何解决 Azure AD Connect 可能不时出现的一些问题。

什么是 Azure AD Connect?

Azure AD Connect 使您能够将本地身份与 Azure 同步,以创建一个单一的混合身份。我们为什么要这么做?

好吧,除非你喜欢你的终端用户在他们不记得他们的两个或三个帐户中的哪一个是用来访问云应用程序还是本地应用程序时对你大喊大叫,这是非常有用的!

好奇 Active Directory 和 Azure AD 的区别?

Azure AD Connect 故障诊断

首先,让我描述一下我们所处的情况和环境。你在一家蓬勃发展的电动汽车公司 Beep-Beep Incorporated 担任云工程师。

您已经在主 Windows Active Directory 域控制器上实施了带有直通身份验证的 Azure AD Connect,并且它已经将您的内部部署身份同步到 Azure Active Directory 几周了,没有出现任何问题。

然而,就像 IT 世界中的大多数事情一样,它在某个时候肯定会崩溃。

所以,让我们开始深入研究,看看你在使用 Azure AD Connect 时可能遇到的一些错误,如何对其进行故障排除,以及这些错误的修复方法!


获得痛苦的云词典
说云不一定要努力。我们分析了数以百万计的回复,找出了最容易让人犯错的概念。抓住这个云指南获取一些最痛苦的云术语的简洁定义。


错误# 1–同步帐户问题

上周,哔哔公司的安全团队要求所有域用户帐户密码重置。他们要求系统管理员执行这些更改,在密码重置后,一切都运行顺利。或者看起来是这样…

今天早上,您试图在内部域上为一名新员工创建一个用户帐户。不幸的是,它没有出现在 Azure AD 中。你的终端用户仍然可以通过 Azure 门户登录,所以这似乎是一个同步问题。我们来看看吧!

在对 AD connect 问题进行故障诊断时,我喜欢检查的第一个地方是 Azure 门户,所以现在让我们检查一下。

嗯,Azure AD Connect 主页上没有报告任何问题。让我们检查 AD Connect 运行状况页面中的同步错误。

那里也没有运气!如果门户未能报告错误,下一个最佳检查位置是安装了 AD Connect 代理的 Active Directory 域控制器上的 AD Connect Sync 服务管理器。

啊哈!我们终于看到了一些没有启动凭证的错误,所以让我们打开其中的一个,看看我们是否能找到更多的信息。

这就是:由于凭证无效,身份验证失败。太好了,现在我们知道到底是什么问题了!

但是等等,你可能会说,什么账号,哪些凭证是无效的?

这是一个很好的问题。在 Azure AD connect 的安装过程中,默认情况下,它会创建一个新的 Active Directory 帐户,AD connect 使用该帐户连接并同步到 Active Directory 林。这里有一个指向 MS 文档的链接,以获取更多信息:https://docs . Microsoft . com/en-us/azure/active-directory/hybrid/how-to-connect-install-custom # connect-your-directory

有了这些知识,系统管理员似乎更新了该帐户的密码(在我们的例子中,该帐户名为 MSOL_2abd5ac8a8dd ),但没有意识到它也需要在 AD Connect 设置中更新。让我们继续更新密码,以便我们可以再次开始同步!

转到同步服务管理器中的连接器选项卡,双击活动目录域服务连接器。在打开的“属性”窗口中,选择左侧窗格中的“连接到 Active Directory 林”选项,最后,在“密码”框中键入系统管理员使用的更新密码,然后单击“确定”。

干得好。现在,如果您再次检查同步服务管理器,您应该看到全面成功!


想提高您的 Azure Active Directory 技能吗?看看 ACG 为微软 Azure 广告新设的动手实验室。


错误 2——服务问题

哔哔公司又过了一周,当你周一早上到达时,你会收到服务台技术团队发来的一系列电子邮件和通知。您的最终用户报告,当他们尝试使用混合身份登录 Azure 时,会收到一条登录失败的错误消息。呀!

周五登录还好好的,现在,周一早上,一切都坏了。周末发生了什么?你记得域控制器在周日晚上被打了补丁并重启了,所以也许这与此有关?

是时候喝杯咖啡,上车,开始故障排除了!首先,我们将在进入 VM 之前检查 Azure 门户的错误。在我们深入进行故障排除之前,检查 Azure 是否有中断也是一个好主意:https://status.azure.com/en-us/status

主 AD connect 页面上没有报告任何问题,Azure 也没有中断。让我们检查并查看 Azure AD Connect 健康门户是否显示任何同步问题。

这里也没有错误。和上次一样,下一站是同步服务管理器应用程序中的域控制器。

嗯,这里也没有显示任何错误…当你到了这个阶段,你仍然没有看到任何错误,最好的检查点是广告连接服务,然后是 Windows 事件查看器。

让我们通过 Win key + R 和打字服务打开 Windows 服务。我们将检查并确保 AD Connect 服务正在运行。

嘿,身份验证代理服务没有运行!让我们右键单击那个家伙并启动它。

好消息。启动该服务后,您要求您的最终用户再次尝试登录,他们报告说他们现在可以访问 Azure 了!

那么,为什么这项服务会导致用户登录问题呢?

在这种情况下,AD Connect 通过传递身份验证进行设置。当用户尝试登录时,它将直接根据您的 Active Directory 域验证他们的密码。如果您的域控制器上的身份验证代理服务关闭,AD Connect 将无法对您的域进行身份验证,并且不会发生任何用户登录。

错误# 3-属性错误

哔哔公司又过了几个星期没有发生任何事故,但是现在又出现了另一个问题!今天早些时候,您要求系统管理员为新员工玛丽·安德森创建一个用户帐户。

不幸的是,她的用户帐户还没有显示在 Azure AD 中,并且她的帐户已经创建了几个小时。是时候排除故障了!

同样,主页上没有问题,所以现在是时候前往广告连接同步健康页面。

啊哦。看起来我们有一个数据验证失败!让我们点击那个框并进行调查。我还想提到的是微软有很好的关于 AD connect 故障排除的文档。

但是,为了获得完整的故障排除体验,我们将按照逻辑、渐进的顺序继续前进。

看起来我们的问题是你要求系统管理员创建的用户帐户,所以这就解释了为什么我们还没有在 Azure AD 中看到它。让我们点击玛丽·安德森的名字在这里,并看到更多关于错误的细节。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

太好了。让我们把这个分解一下,看看我们有什么。在描述下,我们看到她的帐户未能同步,因为属性不符合验证要求。不幸的是,在 property 部分下,属性被列为 N/A…那么,哪个属性没有满足验证要求呢?(如果您已经能够识别问题,将获得加分!)

由于门户中没有更多信息,让我们进入我们的 VM,看看是否能发现任何错误。

我们的第一站是拉起我们值得信赖的广告连接同步服务管理器。看起来我们有一个错误要查看!让我们仔细看看,看看它是否能帮助我们缩小属性范围。

在那里!第一句话:the attribute [userPrincipalName], is not valid。我们看到有问题的属性是userPrincipalName,它是该用户的登录名。

有了这些知识,让我们看看 Mary 在 Active Directory 中的帐户,看看她的登录名有什么问题。

啊哈!她的用户名中有一个 Azure AD connect 不支持的&。(当创建包含&的帐户时,Active Directory 也不会警告您。)

这很好,但是我怎么知道不支持&字符呢?微软有关于各种属性允许和不允许的文档。因此,如果我们打开文档,向下滚动到用户主体名称部分,我们会看到有几个无效字符,例如:& < > * +和其他字符。

(这是另一个证明阅读文档的职业改变艺术的案例。)

现在我们知道了应该避免哪些字符,让我们继续删除&,保留 Mary 的登录名为MaryAnderson。单击“属性”选项卡底部的“确定”后,我们可以通过同步服务管理器启动同步,或者等待大约每 30 分钟开始一次同步。

同步发生后,我们看到 Mary 的用户帐户现在显示在 Azure AD 中,我们不再有任何数据验证失败!

干得好,我的朋友!

摘要

保持 Beep-Beep Incorporated 运行及其用户满意的伟大工作!在这篇文章中,我们看到了 Azure AD Connect 可能出现的几个不同的问题,这些错误看起来像什么,如何对它们进行故障排除,以及如何修复它们。

如果你想更多地了解混合环境,以及如何利用 Azure AD Connect 等 Azure 服务来支持你的组织,请查看我的课程Azure 上的混合环境简介。在这篇文章中,我介绍了几种有助于混合环境场景的 Azure 服务。


提升您的云计算事业。

加入云专家并获得课程、动手实验、测验和学习路径,这些将带你一步一步地从新手成为你所选择的云领域的专家。获得 7 天免费试用或查看我们的免费课程

Terraform 故障排除:5 个常见错误

原文:https://acloudguru.com/blog/engineering/how-to-troubleshoot-5-common-terraform-errors

关于 Terraform 有很多值得爱的地方——terra form 是我们去年在搜索最多的话题——但没有什么是完美的。出现错误,需要排除故障。我们可以帮忙。

在本帖中,我们将详细介绍您在使用 Terraform 管理基础设施时可能遇到的一些常见 Terraform 错误,并提供故障排除技巧。我们走吧!


通往更好职业的钥匙

立即开始 ACG 通过 AWS、Microsoft Azure、Google Cloud 等领域的课程和实际动手实验室来改变你的职业生涯。


Terraform 故障排除

在对有缺陷的 Terraform 配置进行故障排除时,您很可能会遇到以下四类错误之一:

  1. 语言错误 —你遇到的大多数错误很可能属于这一类。这些是您的配置中的语法错误,Terraform 会打印出行号和错误的简要说明。
  2. 状态错误 —这也是在使用 Terraform 时很可能遇到的常见错误。这些错误大多来自于您的状态被锁定或不同步。如果您的状态不同步,Terraform 可能会破坏或改变现有资源。当您遇到这些错误时,您的配置总是第一个要查看的地方。在您修复了任何配置错误之后,查看一下您的状态,并确保那里的一切都考虑到了。如果您的配置或状态中缺少任何东西,您会希望通过刷新、导入或替换资源来确保一切都是同步的。
  3. 核心错误 —这些级别的错误通常意味着你已经发现了一个 bug,甚至可能会产生一个编写 Terraform 的 Go 语言的恐慌错误。这些错误通常意味着当您与 Terraform 核心开发团队在 GitHub 上提交问题时,您将把日志转储到一个文件中,并将其附加到一个模板化的错误报告中。
  4. 提供者错误 —提供者错误也是如此。这些错误围绕着提供者插件和不同版本插件的可能问题。通常这会导致在 GitHub 中向该提供者插件的开发团队提交一个问题。

我们将重点关注您在使用 Terraform 管理基础设施时可能遇到的五个常见错误。这些错误属于我们的前两类。我们将看看如何修复每一个错误,并检查寻找什么,希望在未来避免它们。让我们来看看我们的第一个错误。


获取 Terraform 备忘单
查看排名前十的 Terraform 命令,并在我们的 Terraform 备忘单中获得您需要的所有基本命令的完整摘要,以充分利用这一直观的 IaC 工具。


1.地形变量插值误差

当试图在不使用正确的插值语法的情况下向输入变量追加内容时,会出现 Terraform 变量插值错误。使用terraform fmt命令可以捕捉到这个错误。这将产生一个类似于下面示例的错误:

$ terraform fmt
Error: Invalid character

  on main.tf line 46, in resource "aws_instance" "web_app":
 46:     Name = $var.name-web_app

This character is not used within the language.

Error: Invalid expression

  on main.tf line 46, in resource "aws_instance" "web_app":
  46:     Name = $var.name-web_app

Expected the start of an expression, but found an invalid expression token.

这里你可以看到我们得到了两个错误。一个通知您无效的字符,另一个通知您无效的表达式。两者在同一条线上。

修复?

改变这一点:

 tags = {
      Name = $var.name-web_app
   }
 }

对此:

 tags = {
      Name = "${var.name}-web_app"
   }
 }

只要您在编写 Terraform 配置代码时记住使用必要的插值语法,此错误是常见的,并且很容易修复和避免。

2.地形循环误差

在你的地形配置中,循环错误被认为是循环逻辑的一个实例。当一个资源依赖于另一个首先被创建的资源,但是那个资源依赖于另一个被创建的资源时,它在 Terraform 中导致一个失败创建的循环。让我们看一个使用 AWS 安全组的例子。

当您运行一个terraform validate命令时,错误如下:

$ terraform validate

Error: Cycle: aws_security_group.sg_ping, aws_security_group.sg_8080

除了导致问题的资源之外,在这个错误中没有什么可说的。如果我们看一下下面的配置,并寻找 AWS 安全组,我们可以看到问题是什么。您可以看到,我们要创建的两个安全组正在寻找要首先创建的另一个安全组。它们相互依赖,由于这种依赖关系,Terraform 不能创建任何一种资源。

 resource "aws_security_group" "sg_ping" {
   name = "Allow Ping"

   ingress {
     from_port       = -1
     to_port         = -1
     protocol        = "icmp"
     security_groups = [aws_security_group.sg_8080.id]
   }
 }

 resource "aws_security_group" "sg_8080" {
   name = "Allow 8080"

   ingress {
     from_port       = 8080
     to_port         = 8080
     protocol        = "tcp"
     security_groups = [aws_security_group.sg_ping.id]
   }
 }

要解决这个问题,我们可以简单地将我们的安全组资源和安全组规则分离到单独的资源中。这样,我们的安全组就在需要使用依赖关系的规则创建之前创建,而安全组是在创建之后创建的,如下例所示。

resource "aws_security_group" "sg_ping" {
   name = "Allow Ping"
}

resource "aws_security_group" "sg_8080" {
   name = "Allow 8080"
}

resource "aws_security_group_rule" "allow_ping" {
    type = "ingress"
    from_port = -1
    to_port = -1
    protocol = "icmp"
    security_group_id = aws_security_group.sg_ping.id
    source_security_group_id = aws_security_group.sg_8080.id
}

resource "aws_security_group_rule" "allow_8080" {
    type = "ingress"
    from_port = 80
    to_port = 80
    protocol = "tcp"
    security_group_id = aws_security_group.sg_8080.id
    source_security_group_id = aws_security_group.sg_ping.id
}

3.每个错误的平台

Terraform for_each 属性允许您根据您定义的标准创建一组相似的资源。

在下面的例子中,我们创建了一组相似的实例,每个实例被分配给不同的安全组。Terraform 无法解析 aws_security_group。*.id,因为 splat 表达式只插入列表类型,而 for_each 属性是为映射类型保留的。因此,我们需要替换*并添加一个本地值来实现这一点。

$ terraform validate
Error: Invalid reference

  on main.tf line 44, in resource "aws_instance" "web_app":
  44:   for_each               = aws_security_group.*.id

A reference to a resource type must be followed by at least one attribute
access, specifying the resource name.

Error: Invalid "each" attribute

  on main.tf line 47, in resource "aws_instance" "web_app":
  47:   vpc_security_group_ids = [each.id]

The "each" object does not have an attribute named "id". The supported
attributes are each.key and each.value, the current key and value pair of the
"for_each" attribute set.

首先,我们将更改下面的资源块:

 resource "aws_instance" "web_app" {
   for_each               = aws_security_group.*.id
   ami                    = data.aws_ami.ubuntu.id
   instance_type          = "t2.micro"
   vpc_security_group_ids = [each.id]
   user_data              = <<-EOF
               #!/bin/bash
               echo "Hello, World" > index.html
               nohup busybox httpd -f -p 8080 &
               EOF
   tags = {
     Name = "${var.name}-learn"
   }
 }

对此:

resource "aws_instance" "web_app" {
   for_each               = local.security_groups
   ami                    = data.aws_ami.ubuntu.id
   instance_type          = "t2.micro"
   vpc_security_group_ids = [each.value]
   user_data              = <<-EOF
               #!/bin/bash
               echo "Hello, World" > index.html
               nohup busybox httpd -f -p 8080 &
               EOF
   tags = {
     Name = "${var.name}-learn-${each.key}"
   }
 }
}

请注意,我们已经将 for_each 值从*更改为local.security_groups,并将 vpc_security_groups_ids 从[each.id]更改为[each.value]。我们还需要对我们的标签做一个快速的更改,这样它也可以显示通过将”${var.name}-learn”更改为”${var.name}-learn-${each.key}”而创建的每个 web 应用程序,这将把虚拟机的编号附加到标签名称的末尾。

接下来,我们将创建一个本地块,它将把安全组列表转换成一个映射类型,如下例所示:

locals {
  security_groups = {
    sg_ping   = aws_security_group.sg_ping.id,
    sg_8080   = aws_security_group.sg_8080.id,
  }
}

现在,当您运行terraform validate时,for_each 错误应该会得到解决。

4.Terraform 输出错误

Terraform 输出错误可能有几种不同的原因,但最常见的原因是没有捕获您尝试捕获的所有资源。以下面的错误为例。

在这个例子中,因为在我们的主配置文件中使用了 for 表达式,所以我们的输出变量需要更新,这样我们的输出就可以获取我们试图显示的所有资源。让我们来看看。

$ terraform validate

 Error: Missing resource instance key

   on outputs.tf line 3, in output "instance_id":
    3:   value       = aws_instance.web_app.id

 Because aws_instance.web_app has "for_each" set, its attributes must be
 accessed on specific instances.

 For example, to correlate with indices of a referring resource, use:
     aws_instance.web_app[each.key]

 Error: Missing resource instance key

   on outputs.tf line 8, in output "instance_public_ip":
    8:   value       = aws_instance.web_app.public_ip

 Because aws_instance.web_app has "for_each" set, its attributes must be
 accessed on specific instances.

 For example, to correlate with indices of a referring resource, use:
     aws_instance.web_app[each.key]

 Error: Missing resource instance key

   on outputs.tf line 13, in output "instance_name":
   13:   value       = aws_instance.web_app.tags

 Because aws_instance.web_app has "for_each" set, its attributes must be
 accessed on specific instances.

 For example, to correlate with indices of a referring resource, use:
     aws_instance.web_app[each.key]

在上面的错误中,我们试图输出应用 id、公共 ip 和实例的标签。由于我们有多个这样的变量,Terraform 抛出了一个错误,因为我们的变量只需要一个,而 Terraform 不知道应该从输出中获取哪一个。下面是我们的 outputs.tf 文件的样子:

 output "instance_id" {
   description = "ID of the EC2 instance"
    value       = aws_instance.web_app.id
 }

 output "instance_public_ip" {
   description = "Public IP address of the EC2 instance"
    value       = aws_instance.web_app.public_ip
 }

output "instance_name" {
   description = "Tags of the EC2 instance"
   value        = aws_instance.web_app.tags
}

在这里,您可以看到我们的输出变量只是为了获取单个 id、单个公共 ip 和单个标签而编写的。

下面是我们用来修复此错误的代码示例:

 output "instance_id" {
   description = "ID of the EC2 instance"
    value       = [for instance in aws_instance.web_app: instance.id]
 }

 output "instance_public_ip" {
   description = "Public IP address of the EC2 instance"
    value       = [for instance in aws_instance.web_app: instance.public_ip]
 }

output "instance_name" {
   description = "Tags of the EC2 instance"
   value        = [for instance in aws_instance.web_app: instance.tags.Name]
}

在上面的例子中,我们将通过使用for表达式来捕获所有实例 id、公共提示和每个实例的标签,从而修复错误。

5.地形状态误差

您的 Terraform 状态文件存储了有关已配置资源的信息。它会将资源映射到您的配置,然后跟踪所有相关的元数据。如果状态不同步,Terraform 可能会改变你现有的资源。排除任何配置错误后,最好检查一下您的状态。通过刷新、导入或替换资源,确保您的配置同步。

使用 Terraform 状态时,您可能会收到的一个错误是 Terraform 正在获取状态锁。下面是一个错误示例:

Acquiring state lock. This may take a few moments…

  Error: Error acquiring the state lock

  Error message: ConditionalCheckFailedException: The conditional request failed
  Lock Info:
    ID:        c2024f2b-b615-05bf-e516-e49ed2852087
    Path:      <…>
    Operation: OperationTypePlan
    Who:       <…>
    Version:   1.0.2
    Created:   2021-07-28 14:54:32.498842 +0000 UTC
    Info:      

  Terraform acquires a state lock to protect the state from being written
  by multiple users at the same time. Please resolve the issue above and try
  again. For most commands, you can disable locking with the “-lock=false”
  flag, but this is not recommended.

这种情况偶尔会发生,通常意味着另一个团队成员正在对基础设施进行更新。有时候锁会卡住。为了解决这个问题,我们可以尝试一些事情。

首先,我们可以运行带有-lock=false标志的apply命令,就像错误告诉我们的那样。以下是该命令的一个示例:

terraform force-unlock <ID>

有时候这个命令不起作用。你可以通过一个-force标志到命令上来尝试,如果第一个命令不工作就强制解锁如下:

terraform force-unlock -force <ID>

您可以在错误消息中找到这些命令的 ID。

如果两个命令都不能解锁状态,您可以等待几分钟左右,然后再试一次。最后,尽量杀死悬挂 terraform 进程。如果你在 Windows 机器上运行 Terraform,在任务管理器中找到进程,杀死它。如果您在 Linux 或 Mac 上运行 Terraform,请运行以下命令:

ps aux | grep terraform
kill -9 <process_id>

如果其他方法都失败了,这应该可以解决锁的问题。


读作:云状,地形,还是 CDK?AWS 上的 IAC 指南 概述 AWS 中可用的 IaC 工具,以及如何在它们之间进行选择。


动手排除 Terraform 故障

这就是了,大师们!这些只是您在使用 Terraform 时可能会遇到的一些常见错误。每个错误通常很容易修复,你只需要知道你在看什么。

Terraform 很好地解释了错误,并直接指出了配置中的问题。我发现对 Terraform 进行故障诊断比我用过的其他工具更容易。错误消息的详细程度给我留下了深刻的印象,我非常喜欢它告诉您哪个配置文件有问题,以及在文件的哪里可以找到问题。

希望这篇文章能帮助你容易地识别和修复你在使用 Terraform 时遇到的一些常见错误。保持威严,大师们——让我们继续地球化!

想了解更多有关如何排除 Terraform 故障的信息?查看我的使用 Terraform 课程的动手故障排除。

您还可以浏览我们的 Terraform 培训顶尖开发技能和技术以及本月在 ACG 有什么免费的。

通过在推特上关注 ACG、关注 T2、关注脸书、关注 YouTube 上的云专家,或者加入我们令人敬畏的不和谐社区。

使用 EventBridge 集中 AWS 组织事件

原文:https://acloudguru.com/blog/engineering/how-to-use-eventbridge-to-centralize-aws-organizations-events

Amazon EventBridge 是一种无服务器的事件路由服务,允许我们实时对传入的事件做出反应。在本帖中,我们将采用一个场景,展示如何在 AWS 组织内实现跨帐户通知,然后利用 EventBridge 将集中的事件流转发到第三方 SaaS 工具。


加速您的云计算职业生涯

云专家让你轻松(也很棒)提升你的云事业——即使你对技术完全陌生。查看 ACG 的免费课程现在就开始免费试用。


什么是亚马逊 EventBridge?

Amazon EventBridge 是 AWS 提供的原始 CloudWatch Events 服务的演变。它允许我们利用无服务器事件总线,根据我们帐户内的传入事件实时执行操作任务。

这项服务的美妙之处在于我们可以完全定制实现。以前,当我们必须使用 CloudWatch 事件时,我们只能利用默认的事件总线,并且集成选项非常有限。

然而,使用 Amazon EventBridge 允许我们从头到尾完全定制选项和设置。

  • 您的团队想要几个定制的事件总线用于不同的用例?亚马逊 EventBridge 提供了这种服务。
  • 您想要配置多个规则以允许在单个事件总线上并行处理事件吗?亚马逊 EventBridge 也提供这种服务。
  • 哦,你还希望能够在 AWS 帐户和地区之间发送事件?!亚马逊 EventBridge。😉

第三方 SaaS 供应商

Amazon EventBridge 为我们提供了许多默认的集成,截至本文发布时,共有 34 个认证合作伙伴。相当令人印象深刻!

这些受支持的集成使我们能够轻松地将我们的事件总线与我们选择的 SaaS 供应商连接起来——比如 DataDog、PagerDuty 和 MongoDB 等等。

当使用这些支持的平台时,我们根据发送到 Amazon EventBridge 和从 Amazon event bridge 接收的数据执行我们自己的自定义操作。

一个完美的例子是传呼机责任。我们可以轻松监控我们帐户中的特定事件模式,当匹配时,利用一个使用 PagerDuty 连接的规则,以便我们的运营团队可以接收警报并采取适当的补救措施或步骤。


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学习 AWS 的 10 个有趣的动手项目 学习 AWS 没有比使用所提供的服务来构建真实世界的应用程序更好的方法了。看看这些 10 个好玩的 AWS 项目,难度各不相同。


AWS 默认服务

你会问,我们可以在 EventBridge 中使用多少 AWS 服务?嗯,简单来说,一个 lot

下面是当前支持的 AWS 服务的详细列表,这些服务可以生成默认的服务事件,这些事件很容易与 EventBridge 一起使用:来自 AWS 服务的事件

如您所见,有许多服务可供我们使用!

让我们以这个示例架构为场景:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方案

我们有一个托管在 EC2 compute 上的简单内部应用程序,它运行在一个自定义软件上,该软件在一个私有的 S3 存储桶中存储和更新。

早些时候,在实现 EventBridge 之前,每当我们想要更新软件时,都会花费运营团队数小时的时间。

现在,使用 EventBridge,我们可以将这个过程从几个小时缩短到仅仅几分钟(T3)。通过利用来自托管我们的定制软件的特定私有存储桶的 S3 PutObject API 调用,我们可以在我们的事件总线上创建 EventBridge 规则,并进行模式匹配。一旦生成了PutObject事件,我们就利用 EventBridge 规则来监视特定资源( S3 桶)上的特定事件( PutObject )。

使用我们创建的规则,我们可以设置一个定制 Systems Manager 自动化文档的目标,该文档使用RunCommand功能在目标 EC2 实例上执行软件更新 EventBrige 允许我们完全自动化那些需要花费大量时间才能完成的繁琐任务。

EventBridge 允许我们实施一个完全无服务器的解决方案来自动化我们的定制软件更新!🚀

AWS 组织

我们前面提到的 EventBridge 提供的一个令人惊叹的功能是使用跨帐户和跨地区设计来利用服务的能力。由于这个强大的功能,我们可以利用 EventBridge 来帮助我们根据 AWS 组织内任何帐户中发生的事件采取行动。

以下面的图表为例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方案

通过在安全帐户的 SecOps 事件总线上设置一个资源策略,SecOps 小组可以很容易地允许组织内的所有帐户(或特定的组织单位)向集中的事件总线发送事件。然后,他们可以通过事件总线上的规则进行模式匹配,该规则查找从组织帐户中生成的需要审查和潜在解决的特定事件。

对于上面的这个例子,我们有一个初级工程师,他恶意地或意外地从他们的开发帐户中删除了一个 Amazon 弹性容器注册映像。SecOps 不希望任何初级工程师能够清除图像;相反,他们只希望高级工程师这样做。

为了识别此类问题,他们与组织共享其事件总线,创建允许组织跨帐户和跨区域发送事件的资源策略,然后在每个子 AWS 帐户的默认事件总线上实现一个规则。

此默认规则将是传入 ECR 事件中删除操作类型字段的模式匹配。一旦匹配,它会将该事件发送到 SecOps 帐户事件总线,然后他们可以按照自己认为合适的方式处理该事件。

在本例中,他们只需使用社交网络向 SecOps 工程师团队发送警报。然而,我们也可以集成一个像 PagerDuty 这样的 SaaS 来处理警报和通知。

了解更多关于 Amazon EventBridge 的信息

如果你准备好了解更多关于亚马逊 EventBridge 服务及其提供的所有惊人功能,一定要查看亚马逊 EventBridge 课程的介绍。

在本课程中,我们将介绍服务本身的基础知识,并对其工作原理有一个深入的了解。在基础之上,我们将在更深的层次上深入一些中间话题。我们将讨论诸如事件源、事件规则和目标或 API 目的地之类的东西。甚至会有一个部分显示我们可以在何处以及如何实施基于跨帐户资源的策略,该策略允许我们利用跨帐户和跨区域 EventBridge 架构。

跟上所有云的步伐

在 YouTube 上订阅云专家的每周云新闻和更新。您也可以在脸书上喜欢我们,在 Twitter 上关注我们,或者在 Discord 上加入对话!


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

获得痛苦的云词典
说云不一定要努力。我们分析了数以百万计的回复,找出了最容易让人犯错的概念。抓住这个云指南获取一些最痛苦的云术语的简洁定义。

如何使用 GitHub 操作来自动化 Terraform

原文:https://acloudguru.com/blog/engineering/how-to-use-github-actions-to-automate-terraform

在这篇博文中,我们将看一个使用 GitHub Actions 来自动化 Terraform 的例子,并为您提供一个快速简单的 CI/CD 解决方案。

我相信大多数管理员都会同意, Terraform 是在您的环境中部署和管理基础架构的非常强大和高效的工具。但是你知道你可以用 GitHub 动作让它变得更好并自动化吗?

GitHub Actions 将持续集成添加到 GitHub 库,以自动化您的软件构建、测试和部署。

当使用 CI/CD 自动化 Terraform 时,它将实施配置最佳实践,促进协作,并自动化 Terraform 工作流。在这篇博客中,我将带领你使用 Terraform 和 GitHub 操作创建一个 AWS S3 网站。


加速您的职业发展

从 ACG 开始通过 AWS、Microsoft Azure、Google Cloud 等领域的课程和实际动手实验室改变你的职业生涯。


先决条件

因此,在能够使用 GitHub 操作来自动化 Terraform 之前,首先需要设置和配置这三样东西:

  1. Terraform CLI 已下载并安装。
  2. 您将需要一个 AWS 帐户,有一个 AWS 访问密钥和秘密密钥,以及授予用户的 AmazonS3FullAccess IAM 权限。您还需要创建一个 S3 存储桶来远程存储 Terraform 状态。
  3. 最后,您需要建立一个具有以下结构的 GitHub 存储库:
  • 一个名为 src 的目录,你将在其中存储你的网站代码。
  • 答。 github 目录,然后您将在其中创建一个工作流目录并存储您的 github 动作配置文件。
  • 一个 terraform 目录,您将在其中存储您的 terraform 配置文件。

想从 Terraform 中获得最大收益的所有基本命令列表吗?查看我们的 Terraform 备忘单

配置您的 AWS 提供商和远程状态

假设您已经配置了所有的先决条件,接下来您必须做的就是配置 Terraform 来引用您的 AWS 帐户。

您需要在 GitHub repo 中的 terraform 目录下创建一个名为 main.tf 的文件,配置如下:

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      Version = "~>3.27"
    }
  }

  required_version = ">=0.14.9"

}

provider "aws" {
  version = "~>3.0"
  region  = "east-us-1"
}

该代码块将告诉 Terraform 我们想要提供 AWS 资源,并且我们将资源创建默认为 AWS 内的 east-us-1 区域。(您可以将其更改为适合您的任何地区。)

接下来,您需要将远程状态添加到我们的配置中。您需要将下面的代码块添加到 main.tf 文件中,就在下面的 required_version 值之后,并用您的 bucket 名称和 bucket 键替换占位符值:

required_version = ">=0.14.9" 

   backend "s3" {
       bucket = "[Remote_State_S3_Bucket_Name]"
       key    = "[Remote_State_S3_Bucket_Key]"
       region = "east-us-1"
   }
}

状态是 Terraform 用来比较基础设施的当前状态和期望状态的。默认情况下,Terraform 在本地存储状态。

这对于测试和诸如此类的事情来说很好,但是对于大多数生产级别或大型基础设施来说,出于安全和协作的目的,您真的应该考虑远程存储状态。

此外,由于我们使用 GitHub 操作,状态将需要远程创建。如果没有远程状态,Terraform 会生成一个本地文件,但不会提交给 GitHub,因此我们会丢失状态数据。这可能会导致自动化的各种问题,因为 Terraform 非常依赖状态数据。

完成你的地形配置

现在,您已经将远程后端添加到了您的配置中,我们现在可以添加资源块,它将定义您希望 Terraform 将哪些资源部署到您的基础架构中。您需要添加以下代码块来创建网站所需的 S3 资源:

resource "aws_s3_bucket" "s3Bucket" {
     bucket = "[BUCKET_NAME_HERE]"
     acl       = "public-read"

     policy  = <<EOF
{
     "id" : "MakePublic",
   "version" : "2012-10-17",
   "statement" : [
      {
         "action" : [
             "s3:GetObject"
          ],
         "effect" : "Allow",
         "resource" : "arn:aws:s3:::[BUCKET_NAME_HERE]/*",
         "principal" : "*"
      }
    ]
  }
EOF

   website {
       index_document = "index.html"
   }
}

设置 GitHub 动作

既然我们已经解决了这个问题,现在我们可以继续设置我们的 GitHub 操作了。

现在你可能会问,“为什么我要把我们的 Terraform 配置添加到 GitHub 动作或其他 CI/CD 管道中?”以下是一些原因:

  • 管道创造更多可见性。在团队中使用 Terraform 管理基础设施时,您可以轻松查看正在运行的内容以及运行时间。在本地运行时,只有您拥有这种可见性。
  • 管道创造可追溯性。当在管道中运行 Terraform 时,它们通常存储日志。这允许您在方便的时候回顾旧的构建及其输出。
  • 流水线创造重复性。当您配置管道时,它应该每次都执行相同的操作。这将使调试和故障排除更加容易。
  • 最后,他们创造了简单性。管道本质上可以取代本地实例。这样你就不用设置本地的依赖关系什么的了。

在 GitHub 动作可以运行之前,您需要做的第一件事是将您的 AWS 凭证添加到存储库中。为此,您需要遵循以下步骤:

  1. 导航到您的存储库并选择设置选项卡。
  2. 一旦你看到左边有一个秘密部分,从列表底部数第三个,点击它。
  3. 点击新建储存库密码按钮。
  4. 添加您的 AWS_SECRET_ACCESS_KEY 并点击添加秘密按钮。
  5. 重复步骤 3,添加您的 AWS_ACCESS_KEY_ID ,并点击添加秘密按钮。

接下来,在中创建 actions.yaml 文件。github/workflows 目录下有如下代码:

name: Deploy Infrastructure

on:
  push:
    branches:
      - master

jobs:
  tf_fmt:
    name: Deploy Site
    runs-on: ubuntu-latest
    steps:

    - name: Checkout Repo
      uses: actions/checkout@v1

    - name: Terraform Init
      uses: hashicorp/terraform-github-actions/init@v0.4.0
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        TF_ACTION_WORKING_DIR: 'terraform'
        AWS_ACCESS_KEY_ID:  ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY:  ${{ secrets.AWS_SECRET_ACCESS_KEY }}

    - name: Terraform Validate
      uses: hashicorp/terraform-github-actions/validate@v0.3.7

    - name: Terraform Apply
      uses: hashicorp/terraform-github-actions/apply@v0.4.0
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        TF_ACTION_WORKING_DIR: 'terraform'
        AWS_ACCESS_KEY_ID:  ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY:  ${{ secrets.AWS_SECRET_ACCESS_KEY }}

    - name: Sync S3
      uses: jakejarvis/s3-sync-action@master
      env:
        SOURCE_DIR: './src'
        AWS_REGION: 'us-east-1'
        AWS_S3_BUCKET: '[BUCKET_NAME_HERE]'
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

我们在这里声明,任何时候有推送到 src 目录的时候,都会启动一个动作,让 Terraform 部署对你的网站所做的更改。您需要确保使用您的 bucket 名称更新 yaml 文件。你还需要确保你已经创建了 src 目录,并在其中添加了一个index.html文件。

成功!

就是这样!您已经使用 Terraform 和 GitHub 操作成功创建了一个 CI/CD 管道。想想这种可能性,以及这样的过程能为您节省多少时间,尤其是当您的站点或基础设施增长时。使用 Terraform 和 GitHub 操作确实可以帮助创建一个简化的、易于管理的、可重复的流程,从而节省时间并减少麻烦。下次见,大师们!

了解有关使用 Terraform 管理应用程序和基础设施的更多信息

请查看我的新课程使用 Terraform 管理应用程序和基础设施,体验 Terraform 的奇妙世界!

我们将探讨管理员如何使用 Terraform 轻松地向各种提供商部署基础设施。无论是单一的简单配置,还是包含多个提供商的更复杂配置,本课程都将展示从一个位置管理基础架构是多么简单。


获得痛苦的云词典
说云不一定要努力。我们分析了数以百万计的回复,找出了最容易让人犯错的概念。抓住这个云指南获取一些最痛苦的云术语的简洁定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值