AWS CloudFormation和AWS云开发套件(CDK)提供了可扩展且一致地配置AWS资源(例如,计算基础架构,监控工具,数据库等)。我们已经听到许多客户,他们希望在从AWS合作伙伴网络(APN)成员,第三方供应商和开源技术的资源提供相同的一致性和可扩展性,无论它们是使用Clibformation吗?模板或已采用CDK定义其云基础架构。
我很高兴地宣布用于CloudFormation的新公共登记处,提供可搜索的扩展集合 - 资源类型或模块 - 由AWS,APN合作伙伴,第三方和开发人员社区发布。注册表可以轻松发现和配置CloudFormation模板和CDK应用程序中的这些扩展,以与您使用AWS提供的资源相同的方式。使用Extensions,您不再需要为第三方供应商创建和维护自定义配置逻辑以获取资源类型的资源类型。并且,您能够使用单个基础架构作为代码工具,CloudFormation,以提供和管理AWS和第三方资源,进一步简化基础架构配置过程(CDK在引擎盖下使用CloudFormation)。
发布合作伙伴我们很高兴通过十几个APN合作伙伴加入,以便启动注册表,其中35个扩展可供您使用今天使用。博客帖子和来自此发布会上合作的APN合作伙伴的公告,以及AWS快速开始,可以在下面找到(有些日子将在未来几天添加)。
2019年注册管理机构和资源类型,CloudFormation推出了对私人注册机构的支持。这些使您的帐户中的注册和使用资源提供者(Lambda函数),包括来自AWS和第三方供应商的提供商。注册提供程序后,您可以使用CloudFormation模板中的提供程序组成的资源类型。资源类型由提供商上传到Amazon简单存储服务(Amazon S3)桶,并且通过引用相关的S3 URL来使用这些类型。公共注册表提供资源类型和模块采购的一致性,您不再需要使用Amazon简单存储服务(Amazon S3)存储桶的集合。
公共注册表中的第三方资源类型也与漂移检测集成。从第三方资源类型创建资源后,CloudFormation将从其模板配置中检测到资源的更改,称为配置漂移,就像它与AWS资源一样。您还可以使用AWS Config来管理从注册表中消耗的第三方资源的合规性。配置AWS Config以记录它们时,资源类型将自动跟踪为配置项,并使用CloudFormation以创建,更新和删除它们。无论您使用的资源类型是第三方还是AWS资源,还可以查看它们的配置历史,除了能够编写AWS配置规则以验证配置最佳实践。
公共注册表还支持类型配置,使您可以使用每个帐户和区域的API键和OAuth令牌配置第三方资源类型。一定是,配置安全地存储,可以更新。这还提供了配置第三方资源类型的集中方式。
公共注册表扩展发布者的发布扩展必须被验证为AWS Marketplace卖方,或作为Github或Bitbucket用户,并且延长验证了最佳实践。要将扩展(资源类型或模块)发布到注册表,必须使用其中一个帐户类型首先在AWS区域中注册。
注册后,您接下来将其扩展名发布到同一地区的私有注册表。然后,您需要测试扩展符合发布要求。对于资源类型扩展,这意味着它必须传递为类型定义的所有合同测试。模块符合不同的要求,您可以在文档中找到更多详细信息。通过测试完成,您可以将其扩展发布到您所在地区的公共注册表。有关发布扩展的详细信息,请参阅“用户指南”。
使用公共注册表中的扩展我决定尝试与Kubernetes相关的几个扩展,由AWS Quick开始贡献,使配置更改为群集。就个人而言,我没有大量的kubernetes和它的API经验,因此这是探讨延伸如何拯救我的重要时间和努力的机会。在写作这篇文章的过程中,我从其他人那里学到了使用Kubernetes API的(通常的方式来实现我所遇到的变化),通常甚至涉及努力,即使是具有更多经验的人。
对于此示例,我需要一个kubernetes集群,因此我遵循本教程在Amazon Elastic Kubernetes服务(eks)中,使用托管节点 - Linux节点类型设置一个。随着我的集群准备好,我想进行两个配置更改。
首先,我想向群集添加新命名空间。命名空间是一个分区构造,它允许我将相同的资源组部署到同一群集中的不同名称空间,而不受隔离命名空间的冲突。其次,我想设置并使用Helm,是Kubernetes的包管理器。我将使用Helm从Prometheus Helm-Charts存储库中安装Kube-State-Metrics包,用于收集群集度量标准。虽然我可以使用CloudFormation来配置群集和计算资源,以前,要执行这两个配置任务,但我必须切换到API或各种定制的工具链。使用注册表和这两个扩展,我现在可以使用CloudFormation做所有事情(当然,当我之前提到时,我也可以使用CDK的扩展,我稍后将显示)。
在使用扩展之前,需要在我的帐户中激活它。使用控制台的单个帐户易于执行激活,因为我们在一瞬间看到,如果我使用AWS组织,并希望在整个组织中激活各种第三方扩展,或者为特定的组织单位(OU) ),我可以使用CloudFormation中的服务管理的堆栈来实现这一点。使用资源类型AWS :: CloudFormation :: Typeagtivation在提交给服务管理的StackSet中的模板中,我可以针对整个组织,或特定的OU,传递亚马逊资源名称(ARN)识别第三方扩展名活性。扩展的激活也很容易实现(无论是使用AWS组织是否使用AWS组织)使用带有几行代码的CDK,再次利用上述的Typeactivation资源类型。
要激活扩展,请访问CloudFormation控制台,然后单击导航栏中的公共扩展。这将带我到注册表:公共扩展主页,其中我切换到查看第三方资源类型扩展。
我想要的扩展是AWSQS :: Kubernetes :: Resource和AWSQS :: Kubernetes :: Helm。资源扩展用于应用描述对群集的配置更改的清单。在我的情况下,清单请求创建命名空间。单击AWSQS :: Kubernetes :: Resource扩展名的名称将带我到一个页面,其中我可以查看扩展架构,配置详细信息和版本。
如果您停用要使用的扩展,则会发生什么,或者发布者已撤消扩展名?如果您停用扩展堆栈取决于,则从该扩展程序创建的任何资源都不会受到影响,但您将无法执行进一步的堆栈操作,例如读取,更新,删除和列表(直到扩展重新激活)。发布商必须请求将其扩展从注册表中取出(没有“删除”API)。如果授予请求,请在撤销之前激活扩展的客户仍然可以使用其帐户中的扩展的快照进行创建/读/更新/删除/列表操作。
单击“激活”将带我进入一个页面,其中我需要指定云形成运行扩展后的代码时的执行角色的ARN。我在此用户指南主题之后创建一个角色,但基本信任关系以下是参考。
{ "版本&#34 ;:" 2012-10-17&#34 ;, "声明&#34 ;: [ { "效果&#34 ;:"允许", "校长&#34 ;: { "服务&#34 ;:" companess.cloudformation.amazonaws.com" }, "行动&#34 ;:" sts:假设" } ] }
我还添加了我正在使用的资源类型的权限。有关我选择类型所需的权限的详细信息可以在Github上找到,用于掌舵,以及Kubernetes(注意Github示例也包括信任关系)。
激活扩展时,我可以选择使用默认名称,这是我将如何引用我的模板或CDK应用程序中的类型,或者我可以输入新名称。选择的名称必须在我的帐户中是唯一的,因此如果我启用了具有其默认名称的扩展版本,并且希望启用不同的版本,我必须更改名称。一旦我填写了详细信息,并选择了我的版本控制策略(扩展使用语义版本控制,并且我可以选择接受次要版本的自动更新,或者将“锁定”到特定版本)单击“激活扩展”完成该过程。
完成第一个扩展的过程,我遵循AWSQS :: Kubernetes :: Helm扩展的相同步骤。导航到激活的扩展我可以查看所有已启用扩展名的列表。
我还有一组更新的权限。资源类型代表我的呼叫拨打Kubernetes API,所以我需要更新我的群集的AWS-Auth ConfigMap来引用我刚刚使用的执行角色,否则我正在使用的资源类型所做的调用将失败。为此,我在命令提示符下运行命令kubectl编辑cm aws-auth -n kube-system。在打开的文本编辑器中,我使用引用我的cfnregisty extension xeCrole的新组更新ConfigMap,如下所示(如果您在继续,请务必更改符合您的帐户ID和角色名称以匹配您的帐户ID和角色名称)。
apierion:v1 数据: Maproles:| - 组: - 系统:bootstrepers - 系统:节点 Rolearn:ARN:AWS:IAM :: 111122223333:角色/肌瘤术ksnoderole 用户名:系统:节点:{{ec2privatednsname}} - 组: - 系统:大师 Rolearn:ARN:AWS:IAM :: 111122223333:角色/ CFNRegisty extensionSexcole 用户名:CFNResourcetypes. 类:configmap. 元数据: CreationTimestamp:" 2021-06-04T20:44:24Z" 名称:AWS-AUTH 命名空间:kube-system ResourceVersion:" 6355" selflink:/ api / v1 / namespaces / kube-system / configmaps / aws-auth UID:DC91BFA8-1663-45D0-8954-1E841913B324
现在我已经准备好使用扩展为新的命名空间,Helm和Kube-State-Metrics包配置我的群集。我创建了一个云形成模板,使用扩展,添加我想要在创建堆栈时指定的元素的参数:要更新的群集的名称以及命名空间名称。 KubeStateMetrics资源的属性引用了我希望Helm安装的包。
awstemplateFormatversion:" 2010-09-09" 参数: clustername: 类型:字符串 命名空间: 类型:字符串 资源: KubeStateMetrics: 类型:AWSQS :: Kubernetes :: Helm 特性: clusterid:!ref clustername 名称:Kube-State-Metrics 命名空间:!getatt kubenamespace.name 存储库:https://prometheus-community.github.io/helm-charts. 图表:Prometheus-Community / Kube-State-Metrics kubenamespace: 类型:AWSQS :: Kubernetes ::资源 特性: clustername:!ref clustername 命名空间:默认值 表明:!次| apierion:v1 类:命名空间 元数据: 名称:$ {命名空间} 标签: 名称:$ {命名空间}
在CloudFormation控制台的堆栈页面上,单击“创建堆栈”,上传我的模板,然后给我的堆栈名称和所声明参数的值。
我单击“下一步”继续到向导的其余部分,留下其默认值的其他设置,然后创建堆栈以完成进程。
一旦堆栈创建完成,我使用kubectl命令行工具验证我的更改。我首先检查新的命名空间,newsblog-sample-namespace,带有命令kubectl获取命名空间。然后,我运行kubectl获取全部 - 游戏记录博客-sample-namespace命令验证kube-nature-metrics包。
扩展也可以与AWS云开发套件一起使用。要包装使用新注册表的此探索,我将在用相同的扩展名称中包含一个下面的CDK应用程序片段,以便使用相同的扩展,作为我之前显示的YAML模板(我也可以写入这个使用CDK - C#,Java或Python支持的任何语言)。
导入{堆栈,构造,cfnresource}从' @ aws-cdk / core&#39 ;; 导出类unostack扩展堆栈{ 构造函数(范围:构造,ID:String){ 超级(范围,ID); const clustername =' newsblog-cluster&#39 ;; const命名空间=' newsblog-sample-namespace&#39 ;; const kubenamespace = new cfnresource(这个,' kubenamespace' { 类型:' awsqs :: kubernetes ::资源&#39 ;, 特性: { clustername:clustername, 命名空间:'默认', 清单:this.tojsonstring({ apierion:' v1&#39 ;, 种类:'名称空间&#39 ;, 元数据:{ 名称:命名空间, 标签: { 名称:命名空间, } }, }), }, }); 新的cfnresource(这个,' kubestatemetrics',{ 类型:' awsqs :: kubernetes :: helm&#39 ;, 特性: { clusterid:clustername, 名称:' kube-nation-metrics', 命名空间:kubenamespace.getatt('姓名')。ToString(), 存储库:' https://prometheus-community.github.io/helm-charts' ;, 图表:' Prometheus-Community / Kube-State-Metrics', }, }); } };
如前前面所述,我没有Kubernetes API和Kubernetes的经验。但是,通过在公共注册表中使用资源类型,与CloudFormation结合使用,我可以使用熟悉的环境轻松配置我的群集,而无需使用API或定制工具链。
开始使用CloudFormation的CloudFormation公共注册表定价与现有注册表和私有资源类型相同。使用本机AWS资源类型没有额外的费用;对于第三方资源类型,您将根据您每月运行的处理程序操作(添加,删除,列表等)的数量来引发费用。有关详细信息,请参阅AWS CloudFormation定价页面。今天在美国东部(俄勒冈州N.弗吉尼亚州,俄亥俄州),加拿大(中央),欧洲(爱尔兰,法兰克福,伦敦,斯德哥尔摩,巴黎,米兰),亚洲,新的公共登记处提供了新的公共登记处太平洋(香港,孟买,大阪,新加坡,悉尼,首尔,东京),南美(圣保罗),中东(巴林)和非洲(开普敦)AWS地区。
有关更多信息,请参阅AWS CloudFormation用户指南和扩展开发的用户指南,并开始发布或使用扩展!
- 史蒂夫