公司提供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的。
阅读(2645) | 评论(0) | 转发(0) |