使用CloudFormation Registry和Kubernetes来放松一下
AWS CloudFormation是最流行的基础设施代码服务。它实际上是在AWS上配置基础设施的标准。然而,客户正在编写自定义代码来提供第三方软件,比如AWS上的JFrog。
AWS CloudFormation Public Registry使开发人员能够使用CloudFormation模板自动提供第三方软件和原生AWS服务。
在本课程中,您将学习如何使用CloudFormation公共注册表中发布的JFrog模块,使用CDK和CloudFormation模板自动部署EKS集群。
视频记录
大家好,欢迎大家。我叫Brian Terry,是CloudFormation团队的高级开发人员。今天我很高兴能和大家谈谈Kubernetes和CloudFormation注册表。但首先,让我们从议程开始。我要做的第一件事是告诉你们一些关于我自己的事情以及为什么我有资格给你们做这个演讲。接下来,我们将查看在创建基础结构代码和管理基础结构代码时遇到的一些挑战。然后,我们将查看一些选项,以便在创建这些复杂的基础设施时使您的工作更容易一些。最后,我们将升级我们的重用模式,我将向你们展示一个非常酷的工具,它是由JFrog的那些人制作的。
好了,我们来到了演讲中我最不喜欢的部分,那就是谈论我自己。所以我制作了一张幻灯片,你们可以看到我在过去20年里所做的一些事情。但最近我一直在使用AWS。具体来说,我已经做了一年多的开发人员倡导者,但我在AWS的总时间大约是三年半。所以我最喜欢的部分是能够环游世界,谈论基础设施代码,并真正遇到一些很好的人。所以,如果你发现自己参加了我的现场演讲,请走到我面前和我交谈,因为我喜欢和别人交谈,我很想认识任何参加我的会议的人。
好了,说到这里,我们来谈谈世界上最酷的AWS服务,至少我认为它是世界上最酷的服务,它被称为AWS CloudFormation。因此,对于那些从未使用过CloudFormation的人,让我们从一万英尺的角度来看看这项服务能做什么。基本上,你用JSON或YAML编写基础架构,将其上传到S3存储桶,然后创建所谓的堆栈。这个堆栈代表了你将在AWS部署中管理的资源。2022世界杯阿根廷预选赛赛程一旦你创建了一个堆栈,你就可以在一个完整的单元中管理这个堆栈。尽管CloudFormation很酷,而且非常强大,但是使用CloudFormation构建非常复杂的基础设施仍然存在一些挑战。基本上,其中的一些挑战是建造者花了很多时间试图找出创造这些资源的最佳实践。2022世界杯阿根廷预选赛赛程
比如,定义服务器时的最佳实践是什么?您应该如何安排CloudFormation模板?所有这些都是构建者在创建模板时经常考虑的事情。其次,应用程序通常共享公共架构元素。例如,如果您创建了一个可以读写DynamoDB的Lambda函数,那么您通常会在其他云国家模板中反复重用该函数。接下来,基础设施建模变得重复。您总是在重新发明轮子,定义和配置这些服务器,与其他服务器集成,坚持最佳实践。当你创建基础设施时,你基本上是在一次又一次地这样做。最后,在这些模板中构建独特的功能需要花费宝贵的时间。例如,您创建了CloudFormation模板,Lambda函数将其写入DynamoDB。 And what if you had to adjust it just a little bit for a specific project? Well, it’ll take time to figure out how to create that unique template and to deploy that within your infrastructure.
因此,幸运的是,CloudFormation团队中那些聪明的人已经看到了这些挑战,并提出了一个功能来帮助您减轻这些挑战,并帮助您在AWS帐户中快速部署非常复杂的基础设施,并在整个组织中共享这些基础设施。这个新功能被称为AWS CloudFormation模块。那么,让我们来讨论一下AWS CloudFormation模块是什么。什么是CloudFormation模块,我为什么要使用它们?模块非常酷。具体来说,它们有三个主要优点,它们允许您封装通用解决方案,它们针对最佳实践进行了优化,并且您可以在整个组织中重用这些解决方案。例如,您创建了一个具有安全S3存储桶的体系结构。具体来说,您有这个CloudFormation片段。我猜你花了一个小时或一天的时间来定义这个美妙的基础设施,但你想在你的组织中重用它。
那么,您将创建一个CloudFormation模块。这个模块看起来是这样的。因此,正如您在这个CloudFormation模板中看到的,我们使用了一种特殊类型的资源,称为AWS:S3::bucketprivateaccess:: module,并且结束部分有一个特殊的名称,称为module。它封装了CloudFormation模板的完整最佳实践,并将其整合成一个看起来像一个小资源的模块。因此,如果您查看一个模块,基本上它们是在CloudFormation模板的资源部分中使用的,它们的区别在于第四个部分以模块结尾。使用模块的模板可以是YAML,也可以是JSON。在模块下面,我们有资源模式。知道如何定义模式并不重要,因为幸运的是,当您创建模块时,模式会自动为您生成。所以你可以这样想,如果你看左边你可以这样想,你拿着这个确认模板,我们创建了一个JSON模式,CloudFormation可以用它来定义你的模块。
那么让我们来看看模块平台。因此,在创建模块时,可以使用称为CloudFormation注册表的中心工具共享该模块。让我们快速看一下。所以如果我们看左边,你会看到你可以让发布者,比如AWS服务,内部服务团队,整个社区创建这些模块或这些最佳实践。一旦他们创建了这些,他们就会把这些提交给注册中心。另一方面,你有你的消费者。这些消费者可以是组织中的开发人员,也可以是世界上任何想要使用公共模块的人。他们可以把这些放在模板中,他们可以在CDK中编写这些。所以他们可以在他们的开发模式中使用它来一次又一次地重用这个架构。
所以你可能会问自己,谁有这种好处?这对发行商有利吗?它对开发者有好处吗?这对创建模块有什么好处?这对每个人都有好处。让我们快速看一下这是怎么回事。所以如果我们看左边的发行商,他们能够在整个组织中封装和分享这些最佳实践。他们能够使用内置在模块中的本地版本管理来发布更新,这有多酷?另一方面,消费者可以毫不费力地遵循最佳实践和指导方针。它抽象了资源的复杂性,并且允许更容易地创建CloudFormation模板。 And then they can leverage these reusable template code and reduced development time. And then finally, they can build their infrastructure and applications in module components. So the registry has two different ways to access it. You have a private registry and you have a public registry.
这些私有注册表是模块或可重用架构,您可以在您的AWS帐户中找到它们属于并保留在您的AWS帐户中。组织内的任何人都可以在CloudFormation模板中使用它们。但在另一方面,我们有公共注册中心,公共发布者可以在其中创建这些最佳实践和体系结构,它们可以在您的组织中重用。例如,AWS可以在EKS上创建一个模块,您可以在CloudFormation模板中使用它来反复使用它。幸运的是,我们在JFrog的朋友已经创建了一个模块并将其发布到公共注册表。我们会在这次演讲中稍微讨论一下这个我会给你们展示他们新模块的一个很酷的演示。
现在,在CloudFormation控制台中,您实际上可以搜索模块,并且在CloudFormation控制台中,您可以看到来自许多第三方贡献者的许多不同模块。其中一个就是JFrog。让我们来谈谈JFrog的新模块。所以这个新模块非常酷。它允许您在不到30分钟的时间内部署Artifactory和容错、可靠、高度可伸缩的解决方案。这个模块包含了完成部署所需的所有资源,您可以在CloudForma2022世界杯阿根廷预选赛赛程tion模板中非常简单地使用它。因此,如果您想跟随,请访问此URL。
现在,让我们跳到演示。好了,让我们跳到我最喜欢的部分,那就是演示。因此,在本演示中,我将实际向您展示如何使用JFrog模块在AWS帐户中部署Artifactory。然后,我们将创建一个EKS集群,并实际开始使用它。所以作为先决条件,你需要一个人工制品许可证。如果您目前没有Artifactory的许可证,也没关系,因为您可以访问m.si-fil.com/start-free并获得30天的免费试用许可证。这个过程又快又容易。您所需要做的只是填写一些信息,然后JFrog将向您发送许可证。接下来你需要的是CentOS 7 AMI。
你可以登录aws.amazon.com/marketplace订阅我们的节目,搜索CentOS 7,点击订阅按钮。为了演示和使用这个模块,你需要三个许可密钥。实际上,每个副本需要一个,每个主服务器需要一个,因为我们要将Artifactory的高可用版本部署到我们的AWS账户中。我们要做的第一件事就是把这些密钥存储在一个安全的地方。为此,我们将使用AWS秘密管理器。秘密管理器实际上需要为每个许可证创建一个秘密。
(沉默)。
好吧。我们会给秘密起一个我们能记住的名字。所以让我们做人工许可,我们将保持默认值不变。我们点击下一步来创建秘密。现在,在这个演示中,我们要做的是生成一个自签名证书,但我强烈建议您不要在生产环境中这样做,而是实际使用来自可信、安全的权威机构的证书。现在我们已经生成了自签名证书。如果我们查看证书,你会看到它被创建了。我们要做的是把这个复制到剪贴板上然后转到AWS秘密管理器。因此,我们正在创建一个包含证书信息的新密钥。好吧。 So this will be our first certificate. And we actually need to create two secrets, one for our private key and one for our public key.
(沉默)。
就像我们之前做的一样,我们给它取一个我们能记住的名字。所以我们称之为人工证书。我们将保持默认值不变,并创建我们的secret。好吧。因此,如果您遵循此操作,您的秘密管理器仪表板应该看起来类似于以下内容,其中实际上有两个秘密。好吧。因此,我们需要做的下一件事是启用JFrog模块。因此,您可以通过进入AWS CloudFormation仪表板中的公共扩展并搜索Artifactory或JFrog来快速完成此操作。在执行搜索时,不要忘记单击模块单选按钮和第三方单选按钮。我只想简单说明一个事实,为了使用JFrog模块,您需要启用所有的公共扩展。
对于这个演示,我已经在我的AWS帐户中启用了这些公共资源类型。现在,如果你想在你的帐户中启用这些资源类型,你只需点击模块,你就可以看到诸如模式,输入参数,示例模板等等,你只需点击激活按钮。然后,一旦你点击激活按钮,你就可以在你的AWS账户中使用这些了。但是,您需要再次启用所有的JFrog扩展。为了节省时间,我已经使用官方的AWS快速入门在我的AWS帐户中预部署了一个EKS集群。
现在我们已经设置了所有先决条件,让我们回到JFrog博客站点,并实际启动包含这些模块的CloudFormation模板。因此,首先我们将点击安装在新VPC中的链接,它将我们带到GitHub存储库。在GitHub存储库中,你可以看到一个使用这些模块的CloudFormation模板。所以我们只需要复制GitHub URL,然后使用Wget下载CloudFormation模板。这样做之后,我将在编辑器中打开CloudFormation模板。
在这个演示中,我将使用PyCharm,但你可以使用任何文本编辑器,包括Visual Studio Code或Vim或任何类似的东西。现在打开我的ID,您将在我的项目目录中看到几个文件。如果您继续学习,您应该有CloudFormation模板和几个证书文件,这些是我们使用自签名证书生成的。所以这个CloudFormation模板是这个演示的一个很好的开始,但是我需要稍微修改一下,让这个演示更快一些。因此,首先,我们将硬编码bastion和x-ray属性的值,以减少部署的大小。在编辑此模板时,我将指出一件具体的事情。注意,使用Cf Lent IDE集成时,我们会收到未使用的条件和参数等警告。这可以帮助您快速诊断CloudFormation模板中的错误,并允许您快速修复这些错误。我现在就来做。
现在我们已经编辑了CloudFormation模板,让我们继续部署这个CloudFormation堆栈。在CloudFormation控制台中,我将上传我刚刚编辑的CloudFormation模板。接下来我要给它起一个我能记住的名字。我要为数据库设置一个密码。注意,我们为演示保留了开放访问但建议将其设置为可信IP范围。所以接下来我要做的是跳转到Secrets Managers控制台并复制我们之前创建的许可证和证书的名称。实际上,我将使用这些作为云形成模板中的输入参数。
现在我们继续填写CloudFormation模板的输入参数。因此,我们需要做的下一件事是设置主机名。因此,我使用的主机名与生成自签名证书时使用的主机名相同。接下来,我将为我的Artifactory集群创建一个主密钥。因此,我将为此使用open SSL,我将从CloudFormation仪表板复制命令并在我的终端中运行它。现在我把主密钥复制过来。接下来我需要做的是选择可用性区域。所以我选择美国东部到A和美国东部到B,使其高可用性。最后,输入x射线的密码,x射线数据库,然后点击下一步。我将保留所有其他参数的默认值,然后点击下一步。 And finally, I’ll acknowledge that I’m using IM resources inside my CloudFormation template. So I’ll select these three and click create stack.
好的,这个部署大约需要20分钟才能完成。因此,在部署这个CloudFormation模板的同时,让我们快速查看一些内容。所以你会注意到,在堆叠的时候,你可以看到它在创造进步,注意到它在创造一些资源。2022世界杯阿根廷预选赛赛程基本上它在模块内部署资源。2022世界杯阿根廷预选赛赛程您可以看到,为了使Artifactory的部署具有高可用性,有许多资源。2022世界杯阿根廷预选赛赛程所以我们把它放在这里烤一会儿然后我们回来看看我们创造的基础设施。
好吧,看来我们的资源或基础设施都准备就绪了。2022世界杯阿根廷预选赛赛程我们要做的就是在输出中查找外部负载均衡器的URL。注意,这里有负载均衡器URL。一旦我们有了这个负载均衡器URL,你就可以把这个放到浏览器中,并访问那个URL。但在这个演示中,我们要让它易于使用,也要让它容易找到。我们要做的是在route 53中为这个创建一个DNS记录。我们来做一下。
(沉默)。
好吧。所以一切都准备好了,都部署好了。我们有我们的路由53 DNS名称。我们的基础设施由CloudFormation和模块部署。因此,让我们使用DNS名称登录到Artifactory部署。这里我们将使用默认的用户名和密码,并登录到我们的Artifactory UI。现在,在这里,我们需要做一些事情。首先,我们需要设置一个新密码。所以我们需要这样做,我们会让它成为一个强密码。我们需要做的下一件事是设置URL的base。 So to do that we actually need to use the same host thing we used to generate our certificates. So in this demonstration I used demo-art and I’m going to give it the rest of the DNS name that we set in route 53 and then I’ll hit next. Next, I’m actually going to create a Docker repository. So we’ll go here to JFrog UI and we’ll create our Docker repository.
现在我们的Docker存储库已经创建好了,让我们创建一个用户。对于这个用户,我们会设置一个强密码。接下来,我们将创建一个组并将用户添加到该组,然后点击保存。最后,我们将创建权限并将其附加到刚刚创建的组和用户。太棒了。现在让我们克隆hello-kubernetes repo。所以我们会跳到我们的命令行,我们会使用Docker登录,我们会把demo的名字提供给我们的Docker repo,我们会使用我们刚刚创建的用户名和密码。
太棒了。现在我们已经成功登录到JFrog Artifactory中的Docker存储库。太棒了。现在我们已经建立了我们的Artifactory基础设施。因此,现在让我们跳到CloudFormation控制台并快速查看一些内容。前面我告诉过您,我使用AWS官方快速入门部署了AWS EKS集群。然后在快速开始时,他们给了我一些输出。因此,我将找到EKS集群名称,并实际使用它来配置kubectl命令行。这里好像出现了一个错误,我的权限对这个配置文件有点太紧了。我要做的是把old改成600这样就能修正这个错误。 So if you’re following along and you get this error, basically you can fix it by opening up the permissions just a little bit. Now we should be able to configure our kubectl command line authorization.
看起来我们得到了一个授权错误,但是我们可以通过输入一个角色来快速修复这个错误。所以你注意到了一个文档。我们可以将-role ARN标志与我们的调用结合使用来输入角色。接下来,我们将看看是否可以使用kubectl Git notes连接到集群。你可以看到我们可以很好地连接到我们的音符上。到目前为止,我们已经建立了基础设施,并且能够连接到我们的EKS集群。现在我们需要为部署设置映像池秘密。
(沉默)。
现在我们只是验证我们的秘密名称是否正确。看起来已经完成了,我们可以进入下一步了。现在让我们快速回到AWS控制台和地板图像。为了简单一点,我们实际上要克隆这个存储库。这个存储库实际上有一个make文件用于构建Docker镜像和部署Docker镜像。它还有一个hem文件,我们可以使用它将基础设施部署到EKS集群上。如果你快速克隆这个项目,看看文件,你会看到这里有一个make文件。我们需要提供一些环境变量,比如存储库名称和URL等等。一旦我们能够做到这一点,我们就可以实际使用这个make文件来构建Docker映像。
(沉默)。
看来我们的形象已经建立起来了。现在我们需要进行下一步,我们需要将映像推送到存储库。好了,现在让我们快速看一下Helm图表。你可以看到我们在Helm图表中有一个部署。因此,我们可以实际使用它来部署样例hello-kubernetes基础设施。我们要做的是看一下这个部署模板。正如你所看到的,有很多值我们可以放入容器图像,等等。因此,这基本上可以帮助我们构建Helm图表,以便我们可以部署到EKS集群并测试该基础设施。
现在,在部署内部,我们需要为部署设置映像池秘密。我们将继续设置这个秘密。看起来它是不可配置的,所以我们需要将其添加到部署模板中。现在我们来验证一下这个秘密是否正确。你可以看到它是正确的,我们已经准备好开始部署了。现在让我们继续安装Helm图表。所以我们将执行Helm install -n hello- kubernetes。好吧。我们把它命名为hello-world。看起来很成功。 And now we’ll check the running pods and you can see it’s still using the default image.
因此,让我们将值更新为指向auto factory。在我们的部署文件中,我们要做的是将这个Helm图表指向我们的Artifactory部署。因此,我们将把这里的映像从默认映像更改为Artifactory存储库,然后更新Helm版本。我们来做一下。我们将使用Vim来快速编辑。现在让我们使用更新后的部署文件升级我们的Helm部署。现在请记住,我们现在指向的是Artifactory存储库。所以当我们升级这个头盔部署时,所有的吊舱现在都应该使用更新后的映像。因此,我们将使用kubectl并使用Git pods命令来查看是否所有pod都在使用最新的映像。
您可以看到,我们成功地使用了JFrog Artifactory Docker存储库中的新映像。因此,如果我们使用Git pods并获得部署,我们可以在部署文件中看到我们现在确实在使用该存储库。现在让我们打开浏览器,快速查看一下部署。因此,如果我们使用来自低平衡器的URL,我们将看到部署是成功的,我们的Kubernetes部署目前正在运行。
好了,让我们回顾一下我们所做的。因此,我们要做的第一件事是使用官方的JFrog模块在AWS上创建一个高可用性和可伸缩的JFrog Artifactory部署。一旦我们部署了它,我们就把它连接到我们的EKS集群,最后使用Helm在不到30分钟的时间内部署了这个映像。感谢您花时间参加这次演讲,请在社交媒体@ineedhelpbrian上关注我。因此,如果您想了解更多关于JFrog的新模块或CloudFormation注册表的信息,请参阅他们的新博客。再次感谢大家,祝大家度过非常非常棒的一天。