Amazon ec2 Ansible AWS EC2标签

Amazon ec2 Ansible AWS EC2标签,amazon-ec2,tags,ansible,Amazon Ec2,Tags,Ansible,我有一个运行多个实例的amazon控制台。所有实例都有标记 例如: -标签名称:詹金斯 -标签名称:Nginx -标签名称:Artifactory 我想对标记为Nginx的主机运行Ansible playbook 我使用动态库存,但如何限制playbook的运行位置 我的剧本是这样的: - name: Provision an EC2 node hosts: local connection: local gather_facts: False vars:

我有一个运行多个实例的amazon控制台。所有实例都有标记

例如: -标签名称:詹金斯 -标签名称:Nginx -标签名称:Artifactory

我想对标记为Nginx的主机运行Ansible playbook

我使用动态库存,但如何限制playbook的运行位置

我的剧本是这样的:

  - name: Provision an EC2 node
    hosts: local
    connection: local
    gather_facts: False
    vars:
      instance_type: t2.micro
      security_group: somegroup
      #image: ami-a73264ce
      image: ami-9abea4fb
      region: us-west-2
      keypair: ansible_ec2
    tasks:
      - name: Step 1 Create a new AWS EC2 Ubuntu Instance
        local_action: ec2 instance_tags="Name=nginx" group={{ security_group }} instance_type={{ instance_type}} image={{ image }} wait=true region={{ region }} keypair={{ keypair }}
        register: ec2
      - name: Step 2  Add new instance to local host group
        local_action: lineinfile dest=hosts regexp="{{ item.public_dns_name }}" insertafter="[launched]" line="{{ item.public_dns_name }} ansible_ssh_private_key_file=~/.ssh/{{ keypair }}.pem"
        with_items: ec2.instances
      - name: Step 3 Wait for SSH to come up delay 180 sec timeout 600 sec
        local_action: wait_for host={{ item.public_dns_name }} port=22 delay=180 timeout=600 state=started
        with_items: ec2.instances

   - name: Step 5 Install nginx steps
     hosts: launched 
     sudo: yes 
     remote_user: ubuntu 
     gather_facts: True
     roles:
       - motd
       - javaubuntu
       - apt-get
       - nginx
尝试:

角色/create instance/defaults/main.yml

quantity_instance: 1
key_pem: "ansible_ec2"
instance_type: "t2.micro"
image_base: "ami-9abea4fb"
sec_group_id: "somegroup"
tag_Name: "Nginx"
tag_Service: "reverseproxy"
aws_region: "us-west-2"
aws_subnet: "somesubnet"
root_size: "20"  

---
- hosts: 127.0.0.1
  connection: local
  gather_facts: False
  tasks:
    - name: Adding Vars
      include_vars: roles/create-instance/defaults/main.yml

    - name: run instance
      ec2:
         key_name: "{{ key_pem }}"
         instance_type: "{{ instance_type }}"
         image: "{{ image_base }}"
         wait: yes
         group_id: "{{ sec_group_id }}"
         wait_timeout: 500
         count: "{{ quantity_instance }}"
         instance_tags:
           Name: "{{ tag_Name }}"
           Service: "{{ tag_Service }}"
         vpc_subnet_id: "{{ aws_subnet }}"
         region: "{{ aws_region }}"
         volumes:
           - device_name: /dev/xvda
             volume_size: "{{ root_size }}"
             delete_on_termination: true
         assign_public_ip: yes
      register: ec2

    - name: Add new instance to host group
      add_host: hostname={{ item.public_ip }} groupname=launched
      with_items: ec2.instances 

    - name: Wait for SSH to come up
      wait_for: host={{ item.public_ip }} port=22 delay=60 timeout=320 state=started
      with_items: ec2.instances

- hosts: launched
  vars:
    ansible_ssh_private_key_file: ~/.ssh/ansible_ec2.pem
  gather_facts: true
  user: ubuntu
  become: yes
  become_method: sudo
  become_user: root
  roles:
    - motd 
    - javaubuntu
    - apt-get
    - nginx
要避免将添加为变量ansible\u ssh\u private\u key\u文件:~/.ssh/ansible\u ec2.pem,请使用.ssh/config文件并添加以下内容:

IdentityFile ~/.ssh/ansible_ec2.pem 
记住配置文件需要chmod600

如果不想再次创建实例

像这样发布其他剧本:

- hosts: tag_Name_Nginx
  vars:
    ansible_ssh_private_key_file: ~/.ssh/ansible_ec2.pem
  gather_facts: true
  user: ubuntu
  become: yes
  become_method: sudo
  become_user: root
  roles:
    - motd 
    - javaubuntu
    - apt-get
    - nginx

并注意我们如何调用特定的标记\u Name\u Nginx

所有标记都成为动态资源清册中的组,因此您可以在“hosts”参数中指定标记

- name: Provision an EC2 node
  hosts: local
  connection: local
  gather_facts: False
  vars:
      instance_type: t2.micro
      security_group: somegroup
      #image: ami-a73264ce
      image: ami-9abea4fb
      region: us-west-2
      keypair: ansible_ec2
  tasks:
    - name: Step 1 Create a new AWS EC2 Ubuntu Instance
      local_action: ec2 instance_tags="Name=nginx" group={{ security_group }} instance_type={{ instance_type}} image={{ image }} wait=true region={{ region }} keypair={{ keypair }}
      register: ec2
    - name: Step 2  Add new instance to local host group
      local_action: lineinfile dest=hosts regexp="{{ item.public_dns_name }}" insertafter="[launched]" line="{{ item.public_dns_name }} ansible_ssh_private_key_file=~/.ssh/{{ keypair }}.pem"
      with_items: ec2.instances
    - name: Step 3 Wait for SSH to come up delay 180 sec timeout 600 sec
      local_action: wait_for host={{ item.public_dns_name }} port=22 delay=180 timeout=600 state=started
      with_items: ec2.instances

- name: Step 5 Install nginx steps
  hosts: tag_Name_Nginx 
  sudo: yes 
  remote_user: ubuntu 
  gather_facts: True
  roles:
    - motd
    - javaubuntu
    - apt-get
    - nginx

上一次你声明了一个变量ansible\u ssh\u private\u key\u文件,但是你在哪里使用这个变量?你能告诉我更多关于身份文件的信息吗?我不明白,var用于连接实例,但最好的方法是创建一个ssh配置文件。在这里添加这一行“IdentityFile~/.ssh/ansible_ec2.pem”,这样您就可以在不使用密码的情况下访问服务器了!你有剧本形式的例子吗。我正在尝试将此自动化。