AWS CDK项目蓝图 - 建模和组织(第2/2部分)
第二部分是如何对基础设施即代码的AWS CDK项目进行建模、结构和组织。从头开始构建,直到CI/CD管道组成,所有的云组件资源,和AWS云的服务。
欢迎回来!这是由两部分组成的系列文章的第二部分。通过这篇文章,我的目标是建立一个蓝图,展示如何使用AWS-CDK框架对基础设施即代码项目进行建模、组织和架构。查看 这里来访问本文的第一部分。
现在,在这第二部分中,正如承诺的那样,有趣的部分来了,我们开始动手了。让我们运行我们的AWS CDK IaC项目,部署所有的服务和资源,然后看看AngularJS应用程序的运行情况。让我们开始吧。
开始前--以前的步骤
我们的AWS CDK项目使用的是Python语言,所以在开始之前,我们需要执行一些先前的步骤,比如创建和激活Python虚拟环境,下载项目的AWS-CDK库依赖,还要确保你已经安装了AWS CDK工具箱。AWS CDK Toolkit是使用Node Package Manager(npm)安装的,更多信息请查看这里。
这里是他们。
在(如果你)运行./scripts/run-checks.sh之后,你会看到这个错误:
error: Library stubs not installed for "yaml" (or incompatible with Python 3.8) [import]
要解决这个问题,请运行以下命令。
python -m pip install types-PyYAML
现在,在进一步行动之前,在同一个终端会话中,不要忘记为你要部署解决方案的AWS账户打开一个有效的AWS CLI会话。
AWS CDK项目有一个Makefile,其中有几条规则,试图帮助一些可重复的任务/脚本,主要是那些我们通常忘记的,在对项目不活动一段时间后。要检查所有这些规则,只需运行不带参数的make。请记住,其中一些规则/脚本可能需要设置环境变量,如AWS帐户和区域(查看./scripts/set-env-template.sh)。稍后,我们将使用其中的一些Makefile规则,试图使我们的生活更轻松。
让我们来试试,要想看到这个CDK应用中所有堆栈的列表,并选择一个(或全部)来合成(AWS CloudFormation模板翻译),执行这个命令:
make synth
引导
在使用AWS CDK部署任何东西之前,我们需要准备环境(AWS账户和区域的组合)。为此,我们必须提供AWS CDK执行部署所需的资源。比如用于存储文件的Amazon S3 Bucket,以及授予执行部署的权限的IAM Roles。提供这些初始资源的过程被称为引导。
使用make check-bootstrap命令,我们可以检查我们所有环境的引导状态,如果它们已经或尚未被引导。
更多关于这个的信息,请看这里。
部署
现在,让我们来部署这个解决方案。记住,我们在本文第一部分看到的配置YAML文件,有AWS账户和AWS区域,将用于部署每个不同阶段。
在app.py中,我们将IaC建模的应用程序(定义在deployment.py
)实例化了两次,分别用于两个不同的阶段(Dev和Pre prod),用各自的特定配置加载它们。我们将两者都添加到cdk.App
,这是AWS CDK应用程序的根结构。
当然,我们也可以单独部署每个阶段,并将其隔离。例如,只部署开发阶段(AwsSkillsMapping-DEV/Stateful和AwsSkillsMapping-DEV/Stateless)。在执行特定Stacks部署的情况下,请记住本文第一部分中提到的依赖关系。出于同样的原因,为了部署所有的解决方案(所有的Stacks,包括Pipeline),让我们使用一个名为deploy-all的Makefile规则/脚本。它将以适当的顺序部署它们,首先是所有的Dev/*和Preprod/*,然后是Pipeline。下面,顺序显示在开始之前:
make deploy-all
现在是喝咖啡的好时机......
一段时间后,在管道部署的中间,在./configuration/pipeline.yml
(为sre-team和application-team)配置的电子邮件将收到一个通知,要求他们确认他们的订阅,像这样。
我们等待,直到...
检查结果
当部署完成后,我们会发现一个名为deploy-outputs-dev-preprod.json的文件,在那里我们可以找到AwsSkillsMapping-DEV-Stateful,以及AwsSkillsMapping-PREPROD-Stateful部分,S3网站的URL。但在我们的导航器中打开它们之前,我们必须至少运行一次我们的管道(在S3桶中部署AngularJS)。
注意! 在AWS CDK的部署过程中,在一切都完成之前,管道应用程序仍然会触发CodePipeline发布,这可能会失败,例如。"未被授权执行: codebuild:StartBuild on resource"。发生这种情况是因为Pipeline的部署仍在进行中。在管道部署真正完成后,你可以在CodePipeline中点击失败的Build-DEV阶段的 "重试 "按钮,或者直接启动一个新的CodePipeline发布。
如果我们确认了之前提到的订阅,我们就会收到一封通知邮件,说de CodePipeline需要我们的批准。在这一点上,我们的AngularJS应用程序的开发阶段已经部署好了,CodePipeline已经停止了,等待批准来进行Pre prod部署。
你在这里!在CodePipeline发布成功后,我们可以打开两个S3网站的URL。为了在视觉上容易区分Dev和Pre prod,AngularJS应用程序有不同的工具条颜色。不要忘记(为了节省一些钱),记得清理所有的资源,你可以使用命令make destroy-all
。
下一步是什么?
作为 "进化 "的下一步,我们可以提取我们在这个AWS CDK项目中使用的一些逻辑单元(如API),并将它们转化为其他项目的可重用组件,也就是说,创建我们自己的 "通用 "可重用结构。然后,我们可以组成我们自己的AWS CDK云组件库*(已经嵌入了一些技术或业务语义*),使我们自己的通用构件对所有其他IaC AWS CDK项目有用。这样,例如,一个团队可以创建一个DynamoDB表组件,封装公司的最佳实践和政策,已经嵌入(例如,备份、监控、扩展等)。在Python的情况下,用Python包安装器(pip,PyPI)处理这些库。
但这将是未来另一篇文章的故事。 :-)
结论 (第2/2部分)
在这两部分文章的第二部分,我们经历了所有的步骤来部署我们的IaC AWS CDK应用程序,以及使用CodePipeline的AngularJS应用程序样本。我们测试了所实现的设计模型、结构和组织是否满足我们的需求(目前),并帮助我们实现用AWS CDK框架构建IaC项目的目标。最重要的是,这个项目旨在成为一个沙盒,一个 "活的 "蓝图模型,我们不断地分析、检查、思考和修改,寻求改进,使我们做得更好。
这个IaC AWS CDK项目的源代码和这个蓝图解决方案中使用的所有工件都可以在下面提供的两个Github存储库中找到。