AWS CloudFormation实战指南(一)

楮景明
2023-12-01

AWS CloudFormation简介篇

一般infra使用自动化工具管理服务器资源(WEB服务器/DB服务器等)都会用到ansible/puppet/aws cli(shell)等
工具很多,但是管理aws服务器的话有更好的选择是cloudformation,我略称它为cfn。

适合阅读该文的读者

  1. 有在使用aws
  2. 对cloudformation感兴趣
  3. 正在烦恼使用何种工具管理服务器的人

CloudFormation是什么?

Cloudformation可以使用json/yaml形式的文件来管理几乎所有aws服务(譬如:EC2/RDS/S3/CloudFront等)的一种模板

相比手动创建服务器的优势

  1. 模板一次创建多次使用,如果公司的架构基本不变,可一直使用,如果有变更,可根据项目做相应调整。
  2. 模板创建的资源可互相关联,避免了手动配置安全组,参数组这种繁琐工作。而且各种服务器的配置都在模板里可直接当做文档查看,对自己的服务器的各种配置以及关联查看起来更加方便。
  3. 手动创建服务器每次需要登陆aws各个服务的页面,使用cfn以后只用上传模板到s3,然后在cfn页面创建资源或者更新模板即可。并且因国内的某些原因,打开海外aws有时候极慢,模板创建后可大大节省点击网页的时间
  4. 模板代码可管理在git上,修改历史也非常清晰。
  5. 可配合jenkins等实现CI/CD等持续修改更新架构。因架构修改可能造成重大影响,请避免修改线上服务。

基本结构

AWSTemplateFormatVersion: "version date"

Description:
  String

Metadata:
  template metadata

Parameters:
  set of parameters

Mappings:
  set of mappings

Conditions:
  set of conditions

Transform:
  set of transforms

Resources:
  set of resources

Outputs:
  set of outputs

上面的除了Resources是必须的,其他都是可选的。也就是说如果想节省代码,可以只写Resources部分

代码块说明

  1. Description:跟名字一样,就是CloudFormation模板的描述
  2. Metadata:提供模板的附加信息
  3. Parameters:提供模板参数
  4. Mappings:提供一些内部的映射,譬如每个区的AMI等,可通过awscli查找
  5. Conditions:控制条件
  6. Transform:转换,对应无服务应用
  7. Resources:唯一必须的片段,指定整个CloudFormation堆栈的资源。如果EC2/RDS/Cloudfront/S3等服务
  8. Outputs:查看模板所创建资源的返回值

附最简洁的S3片段

AWSTemplateFormatVersion: 2010-09-09
Resources:
  S3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: !Sub ${AWS::StackName}
 类似资料: