在本文中,我们将研究使用Ansible Tower提供的VM AWX自动化AWS服务的过程。 Ansible Tower是一个简单的IT自动化引擎,可自动执行云的配置,配置,部署和编排。 AWX提供了基于Web的用户界面,REST API和基于Ansible构建的任务引擎。这是Ansible塔的上游项目。
先决条件:
- 安装AWX。
- 您必须具有一个AWS免费套餐帐户,IAM服务中的用户具有足够的权限来创建VPC,子网,IGW,RouteTables,EC2实例,并且还具有访问密钥ID和秘密访问密钥。
- 另外,在我们要启动这些服务的区域中创建一个密钥对(密钥)。由于我们不使用弹性IP服务,因此完成此工作不会花费任何费用。
现在,按照以下步骤使用AWX自动执行AWS服务:
步骤1:在AWX信息中心中添加凭据。
步骤2:在运行AWX的主机上的/ var / lib / awx / projects /中创建一个新的项目目录(例如AWS)。在此示例中,AWX在Docker容器上运行,使用docker-compose管理。因此,请在运行AWX的同一主机上创建此目录
[root@localhost ~]# mkdir /var/lib/awx/projects/AWS
步骤3:在我们之前创建的项目中创建一个新的剧本。 (例如,AWS)
[root@localhost ~]# cat << EOF >> /var/lib/awx/projects/AWS/playbook.yml
---
- name: "Run the playbook for AWS resources provisioning."
hosts: localhost
vars:
aws_region: us-east-1
tasks:
- name: "Create VPC with cidr block"
ec2_vpc_net:
name: "awx_vpc"
cidr_block: 10.10.0.0/16
region: "{{ aws_region }}"
tags:
module: ec2_vpc_net
this: works
tenancy: default
register: awx_vpc
- name: "Create Internet Gateway and Associate it with above VPC"
ec2_vpc_igw:
vpc_id: "{{ awx_vpc.vpc.id }}"
region: "{{ aws_region }}"
state: present
register: awx_igw
- name: "Create a subnet in the above VPC"
ec2_vpc_subnet:
state: present
vpc_id: "{{ awx_vpc.vpc.id }}"
cidr: 10.10.0.0/20
region: "{{ aws_region }}"
tags:
Name: "EC2 Instance Subnet"
register: awx_subnet
- name: "Create Route Table for the public Subnet"
ec2_vpc_route_table:
vpc_id: "{{ awx_vpc.vpc.id }}"
region: "{{ aws_region }}"
tags:
Name: Public
subnets:
- "{{ awx_subnet.subnet.id }}"
routes:
- dest: 0.0.0.0/0
gateway_id: "{{ awx_igw.gateway_id }}"
register: awx_public_route_table
- name: "Create Security Group rules for EC2 Instance"
ec2_group:
name: awx_sg
description: "sg for allowing ssh connnections"
vpc_id: "{{ awx_vpc.vpc.id }}"
region: "{{ aws_region }}"
rules:
- proto: tcp
ports:
- 22
cidr_ip: 0.0.0.0/0
rule_desc: allow all connections on port 22
- name: "Provisioning of a RHEL8 EC2 Instance"
ec2:
region: "{{ aws_region }}"
key_name: aws-awk-key-us-east-1
instance_type: t2.micro
image: ami-098f16afa9edf40be
wait: yes
group: awx_sg
count: 1
vpc_subnet_id: "{{ awx_subnet.subnet.id }}"
assign_public_ip: yes
register: awx_instance
- name: "Debug task to show the public IP of RHEL8 EC2 Instance"
debug:
msg: "Public IP of the RHEL8 Instance is {{ awx_instance.instances[0].public_ip }}"
上述手册中使用的所有模块都有可用的文档。上述手册中使用的模块:
- ec2_vpc_net
- ec2_vpc_igw
- ec2_vpc_subnet
- ec2_vpc_route_table
- ec2_vpc_route_table
- ec2_group,ec2
步骤4:从AWX仪表板创建一个新项目“ AWS”。
步骤5:创建一个新模板。
步骤6:使用此模板开始工作。
在Debug(verbosity)中运行此作业时,请检查输出是成功还是失败。如果失败,则再次运行失败的作业。我们用来显示分配给EC2实例的公共IP的最后一条调试消息。
进行最终验证,转到AWS控制台以及您启动ec2实例的区域,然后检查该实例是否正在运行。
步骤7:我们还可以借助AWS动态清单来查看我们先前选择的AWS区域中新创建的主机的IP。首先,我们必须在AWX中添加清单。
创建清单后,转到SOURCES选项,然后创建一个新的SOURCE。在这里,我们需要我们的AWS区域以及用于启动ec2实例的凭据。
现在,从我们在以上步骤中创建的SOURCE中进行同步。
随着同步过程的完成,我们可以在清单的主机部分中发现新主机。