📜  AWX –自动化AWS服务

📅  最后修改于: 2021-04-17 01:36:52             🧑  作者: Mango

在本文中,我们将研究使用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中进行同步。

随着同步过程的完成,我们可以在清单的主机部分中发现新主机。