美文网首页aws
AWS CloudFormation Get Started

AWS CloudFormation Get Started

作者: azzgo | 来源:发表于2016-08-02 16:04 被阅读525次

    CloudFormation 是AWS的一款管理服务,用来集中式快速地创建AWS配套资源。

    概念


    模板

    CloudFormation 模板是一个文本文件,其格式符合 JSON 格式标准。您可使用任何扩展名(如.json.template.txt)保存这些文件。AWS CloudFormation 使用这些模板作为用于构建您的 AWS 资源的蓝图。

    堆栈

    在您使用 AWS CloudFormation 时,可将相关资源作为一个称为“堆栈”的单元进行管理。换句话说,您可通过创建、更新和删除堆栈来创建、更新和删除一系列资源。堆栈中的所有资源均由堆栈的 AWS CloudFormation 模板定义。

    运行流程图


    create-stack-diagram.png

    特性


    1. 对待所有AWS服务为资源对象,都是可以聚合和配置的
    2. 可以添加初始化脚本,有一定的EC2内部操作能力

    实践


    我们来使用CloudFormation简单创建一个EC2,从一个超级简单的DEMO开始,一看就懂。

    {
      "AWSTemplateFormatVersion" : "2010-09-09",
      "Description" : "Create a EC2",
      "Resources" : {
        "Instance1" : {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "ImageId" : "ami-2d39803a",
            "InstanceType": "t2.micro",
            "KeyName": "wow"
          }
        }
      }
    

    针对不同的字段解释一下,

    • AWSTemplateFormatVersion(可选):模板格式版本, 规定了模板的格式,类似html的doctype。目前仅有一个版本可选,就是2010-09-09
    • Description(可选):关于该模板的描述,经实践无法输入中文,会在亚马逊网页描述中出现??这样的乱码。
    • Resources(必须):资源,声明堆栈需要的AWS资源,其构造模板一般有逻辑ID,资源类型, 资源属性组成。
      • 逻辑ID:逻辑 ID 必须为字母数字 (A-Za-z0-9),并且在模板中具有唯一性。比如上面的instance1
      • 资源类型(Type):资源类型标识您正在声明的资源的类型,比如上面声明需要一个EC2资源,AWS::EC2::Instance
      • 资源属性(Properties):声明资源相关的附加属性,比如上面我们为创建的EC2声明了需要的镜像ami-2d38703a,对应AWS官方的Ubutnu镜像。还有就是指定了instance的类型是t2.micro,和keypair的名字,不然这个instance就无法通过ssh登录了。

    怎么使用呢

    你可以通过AWS的面板一步步按照提示完成CloudFormation堆栈的创建,这里我暂时下如何通过AWS CLI创建堆栈

    $ aws cloudformation create-stack --stack-name test --template-body file:///path-to-your-json
    

    然后它会返回一个堆栈的ID回来

    {
        "StackId": "arn:aws:cloudformation:us-east-1:363457891727:stack/test/5069cf50-586d-11e6-a89f-50d5cd26c2d2"
    }
    

    你可以通过查看是否有新增的实例被创建处理

    aws ec2 describe-instances --query="Reservations[0].Instances[*].{InstanceId:InstanceId}"
    

    最后,我们小小体验了下CloudFormation后,还需要把它销毁掉,以免意外计费

    aws cloudformation delete-stack --stack-name="arn:aws:cloudformation:us-east-1:363457891727:stack/test/5069cf50-586d-11e6-a89f-50d5cd26c2d2"
    

    这个不会返回个啥😉

    最后给一个大一点的例子

    官方给出的WordPress安装脚本, https://s3-external-1.amazonaws.com/cloudformation-templates-us-east-1/WordPress_Single_Instance.template

    提示一下,这里面使用了一个AWS资源AWS::CloudFormation::Init,这个东西可以给Instance描述一些instance启动后配置和部署的信息元数据,这个需要一个cfn的软件扫描这些信息才能实现安装和部署,具体可以参照EC2资源属性里面的UserData字段。并且,这个软件不是所有的镜像AMI都自带,你可以看到这个CloudFormation脚本里面的镜像都是Amazon Linux,亚马逊定制过的Linux发行版。

    总结


    CloudFormation使用JSON的格式将AWS资源使用文本的形式描述,这样可以很方便的对AWS基础设施进行版本管理。但是由于JSON的天生问题,无法添加注释导致脚本很有可能非常难度,难以开发维护。

    相关文章

      网友评论

        本文标题:AWS CloudFormation Get Started

        本文链接:https://www.haomeiwen.com/subject/icnfsttx.html