我试图在亚马逊AWS上使用ansible创建一个小型webapp基础架构,我想完成所有流程:启动实例,配置服务等,但我找不到合适的工具或模块从ansible处理。主要是EC2发布。
非常感谢。
答案 0 :(得分:39)
这是您问题的简短回答,如果您想要详细信息和完全自动化的角色,请告诉我们。感谢
<强>前提条件强>:
Ansible
Python boto库
在环境设置中设置AWS访问密钥和密钥 (最好在〜。/ boto里面)
为了创建EC2实例,请修改这些参数,您可以在“vars”下的“ec2_launch.yml”文件中找到这些参数:
count#要创建的实例数
有一次,您提到了这些参数,请运行以下命令:
ansible-playbook -i hosts ec2_launch.yml
主机文件的内容:
[local]
localhost
[webserver]
ec2_launch.yml 文件的内容:
---
- name: Provision an EC2 Instance
hosts: local
connection: local
gather_facts: False
tags: provisioning
# Necessary Variables for creating/provisioning the EC2 Instance
vars:
instance_type: t1.micro
security_group: webserver # Change the security group name here
image: ami-98aa1cf0 # Change the AMI, from which you want to launch the server
region: us-east-1 # Change the Region
keypair: ansible # Change the keypair name
count: 1
# Task that will be used to Launch/Create an EC2 Instance
tasks:
- name: Create a security group
local_action:
module: ec2_group
name: "{{ security_group }}"
description: Security Group for webserver Servers
region: "{{ region }}"
rules:
- proto: tcp
type: ssh
from_port: 22
to_port: 22
cidr_ip: 0.0.0.0/0
- proto: tcp
from_port: 80
to_port: 80
cidr_ip: 0.0.0.0/0
rules_egress:
- proto: all
type: all
cidr_ip: 0.0.0.0/0
- name: Launch the new EC2 Instance
local_action: ec2
group={{ security_group }}
instance_type={{ instance_type}}
image={{ image }}
wait=true
region={{ region }}
keypair={{ keypair }}
count={{count}}
register: ec2
- name: Add the newly created EC2 instance(s) to the local host group (located inside the directory)
local_action: lineinfile
dest="./hosts"
regexp={{ item.public_ip }}
insertafter="[webserver]" line={{ item.public_ip }}
with_items: "{{ ec2.instances }}"
- name: Wait for SSH to come up
local_action: wait_for
host={{ item.public_ip }}
port=22
state=started
with_items: "{{ ec2.instances }}"
- name: Add tag to Instance(s)
local_action: ec2_tag resource={{ item.id }} region={{ region }} state=present
with_items: "{{ ec2.instances }}"
args:
tags:
Name: webserver
答案 1 :(得分:13)
正如其他人所说,云模块几乎包含了您所需的所有AWS配置支持。也就是说,一旦有现有的SSH:能够定位和连接的机器,Ansible的范例就更有意义了。相比之下,实例化阶段基本上要求您定位本地计算机并从那里调用AWS API端点。
和你一样,我想要一个单次命令,从EC2实例化到其配置的优雅过渡。有关如何在the documentation中完成此类操作的建议,但它依赖于add_host模块来调整Ansible对当前主机库存的想法,即便如此我也无法做到这一点。找到一种解决方案,感觉我并不反对而不是使用系统。
最后我选择了两个不同的剧本:一个使用ec2,ec2_group,ec2_vol,ec2_eip和route53模块的provision.yml,以确保我拥有&#34;硬件&#34;到位,然后是configure.yml,更像是一个传统的Ansible site.yml,它能够处理主机库存(在我的情况下是静态的,但动态会很好)作为一个给定的并完成所有良好的声明状态转换。 / p>
这两个剧本都是幂等的,但是它的configure.yml意味着从长远来看一遍又一遍地重新运行。
答案 2 :(得分:3)
EC2 module的设计恰好是为了创建和销毁实例。
如果你想要“最好”的方式,很难击败可以从Ansible发布的CloudFormation。