前言
Serverless 架构的出现,使得前端开发人员更加专注于业务处理,而无需过多关注服务器运维等基础设施管理问题。然而,在实际开发中,偶尔需要对基础设施进行管理,以保障整个应用系统的稳定性和可靠性。本文将介绍如何在 Serverless 框架中使用 CloudFormation 进行基础设施管理。
CloudFormation 简介
CloudFormation 是 AWS 提供的一种管理基础设施的方式。通过 CloudFormation,开发人员可以轻松创建和管理 AWS 资源栈(AWS Resource Stack),包括 EC2 实例,S3 存储桶等等。开发人员可以将整个设施的定义以 JSON 或 YAML 格式提供给 CloudFormation,并指定必要的输入参数,CloudFormation 会按照定义的配置自动创建和管理资源,实现基础设施的自动化管理。
Serverless 框架简介
Serverless 框架是一种开发无服务器应用的框架。它能帮助开发人员通过 AWS Lambda、API Gateway、DynamoDB 等服务构建出 Serverless 应用。Serverless 应用主要分为三部分:事件、函数和资源。其中,事件可以是 AWS S3 的上传事件,也可以是定时触发。Lambda 函数是实现业务逻辑的核心部分,被这些事件触发。资源则是指需要一些特殊的服务来实现,比如数据库。
Serverless 框架中使用 CloudFormation 进行基础设施管理
Serverless 与 CloudFormation 可以相互结合,当有更多的基础设施需求时,可以使用 CloudFormation 的模板和资源描述语言,以减少手动操作是否产生的误操作,同时管理和定义资源。Serverless 提供了一个 framework-plugin 来处理服务和多个函数级,可以将 CloudFormation 定义集成到 Serverless 程序中。
在 Serverless 框架中创建 CloudFormation Stack
通过 Serverless framework-plugin,创建 CloudFormation stack 实现 AWS 资源的自动化管理。在 Serverless 程序中使用 CloudFormation 的主要方式是,定义一个 AWS CloudFormation 规范的 YAML 文件,然后在服务部署期间使用 CloudFormation API 调用来创建或更新堆栈。
以下是 Serverless中,如何自定义部署流程实现在堆栈中创建资源:
-- -------------------- ---- ------- -------- ---------- --------- ----- --- -------- ---------- ------- --------- ---------- --------------- -------------------- --------------------------------------- -------------------- ----------------- ----- ---------------------- -------------------- ---------- ------ -------- ------------- ------- - ----- ----- - ------- --- ---------- ---------- --------------- ----- --------------- ----------- ----------- ----------------------------- --------------------
在这个例子中,Serverless 将会创建一个名叫 my-custom-stack 的 CloudFormation stack,并且会在你的 AWS 账户里创建一个名叫 my-custom-bucket 的 S3 存储桶。
在 Serverless Framework 中使用 CloudFormation Stack
当创建 CloudFormation stack 后,需要将这个 stack 加入到 Serverless Framework 中。可以挂钩到以下的 Lifecycle Hook,执行前置或后置操作。
- serverless package
- serverless deploy
- serverless remove
这里我们使用 package 编译服务,将 CloudFormation Stack 和 Serverless Stack 整合到一起:
plugins: - serverless-plugin-cloudformation-stack custom: cloudFormationStackName: cf-stack-${self:custom.stage, 'dev'} cloudFormationConfigFile: cloudformation.yml every_region_stack: true # 是否在所有区部署
最后,我们只需要运行下面的命令,就能把 CloudFormation stack 构建到项目中:
serverless deploy
总结
在实际开发中,Serverless 架构能够使得开发人员摆脱繁琐的基础设施管理任务,能够更快速地开发业务逻辑。但是,当需要操作基础设施时,结合 CloudFormation 可以使得开发人员更加高效准确地管理 AWS 资源栈。本文主要介绍了在 Serverless 框架中如何使用 CloudFormation 进行基础设施管理,并提供了示例代码供参考。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e6d034f6b2d6eab322af2b