Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1067349
  • 博文数量: 186
  • 博客积分: 4939
  • 博客等级: 上校
  • 技术积分: 2075
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 17:15
文章分类

全部博文(186)

文章存档

2018年(1)

2017年(3)

2016年(11)

2015年(42)

2014年(21)

2013年(9)

2012年(18)

2011年(46)

2010年(35)

分类: 系统运维

2015-07-18 11:20:45

     公司提供saas服务给客户,客户订阅服务有的时候需要和我们的产品集成,所以需要一个预演环境做测试,从production的数据库拿数据(由于敏感信息,很多字段必须先scrub就是填XXX这种然后才能用,比如credit card、profile等)然后部署产品。所以这里用了大量的AWS EC2。


    最近几个月研究了下EC2,从web console页面创建一个instance非常简单,完全是鼠标流,但在这里频繁的launch/terminate的不太现实,所以用了ansible来实现,我也对比了下puppet。puppet官方的node_aws已经在新版本给deprecate了,最新的模块  /> ,对比了下,的确新的方法高大上了很多。但这里只是一个裸机,app/db都没有配置,还有大量的事要手工去做。


  而ansible的大概步骤类似
---
- hosts:
  - local
  connection: local
  gather_facts: False
  vars:
    keypair: MY
    instance_type: m1.large
    security_group: exp
    image: ami-XXXXXX
    from:  XXX 
    to:    yyy
  vars_prompt:
    shortname: "What is the name of this host to be?"
  tasks:
  - name: Launch new EC2 instance
    local_action: ec2
        keypair=${keypair}
        group=${security_group}
        instance_type=${instance_type}
        image=${image}
        wait=true
    register: ec2
#
  - name: Send out an email
    local_action: mail
        from=${from}
        to=${to}
        subject="EC2 instance  ${ec2.instances[0].id}"
        body="EC2 instance ${ec2.instances[0].id} created on ${ec2.instances[0].public_ip}"
### 上面用了list/dict,是因为以下输出
{
   "instances" : [
      {
         "public_ip" : "107.22.159.172",
         "id" : "i-3d1ba042"
      }
   ],
   "changed" : true
}

   现在问题来了,我之前很不喜欢ansible,理由是官方Docs很差,现在看ansible也有好处,分析如下:
1. puppet是A--->M的方式,agent主动去pull, 对于ec2来说,新建的ec2主机你不知道IP等信息,agent也没办法部署puppet agent,所以可能需要别的办法来获取信息,然后去pull。puppet的module没给出对应的方法。

2. ansible则刚好相反,是M--->A,无需agent,从上面代码看,Launch 完毕会返回给你IP,其他的事就是把这些instance通过add_host的方式加到inventory里面去,然后写playbook来部署应用,当然你可以复用production/staging的Puppet module等。用jinjia2生成XXX.pp.j2然后在ansible 用shell/command来执行都可以。

3. 对于这种命令行之流和无法部署agent的场景下,puppet是弱于ansible的。

阅读(2599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~