खोज…


टिप्पणियों

उदाहरण -2: यह एक उदाहरण के रूप में कार्य करता है इसलिए इसे कॉपी / पेस्ट न करें। इसके बजाय, अपनी आवश्यकताओं के अनुरूप, आपको इसके चर को अनुकूलित करना चाहिए; ansible_key, सुरक्षा समूह नियम आदि।

उदाहरण -1: ssh सख्त होस्ट कुंजी जाँच को निष्क्रिय करने के लिए, एक ऐसा व्यवहार जिसे हम नहीं चाहते हैं कि कार्यों को स्वचालित करते समय, हम इसे ansible.cfg फ़ाइल में no सेट करें। यानी: StrictHostKeyChecking=no

ec2.py फ़ाइल एक पायथन स्क्रिप्ट है जो ec2.ini आधार पर आपके AWS ressources को निष्पादित और वापस ec2.ini जो कि कॉन्फ़िगरेशन फ़ाइल है जिसे आपको अपनी परियोजना के दायरे को कुछ विशेष क्षेत्रों, विशिष्ट क्षेत्रों आदि तक सीमित करना होगा। ...

आधिकारिक अमेज़ॅन एएमआई से ईसी 2 उदाहरण कैसे शुरू करें, इसे संशोधित करें और इसे नए एएमआई के रूप में संग्रहीत करें

यह एक बहुत ही सामान्य वर्कफ़्लो है जब एक एडब्ल्यूएस ईसी 2 उदाहरण के प्रावधान के लिए Ansible का उपयोग किया जाता है। यह पोस्ट Ansible की एक बुनियादी समझ रखती है और सबसे महत्वपूर्ण बात, मानती है कि आपने AWS से कनेक्ट करने के लिए इसे ठीक से कॉन्फ़िगर किया है।

जैसा कि अन्सिबल आधिकारिक दस्तावेज में जोर दिया गया है , हम चार भूमिकाओं का उपयोग करने जा रहे हैं:

1- ami_find अमीरी आईडी प्राप्त करने के लिए जिसके आधार पर हम अपना EC2 उदाहरण लॉन्च करेंगे।

2- EC2ami_creation EC2 उदाहरण को प्रभावी रूप से लॉन्च करने के लिए।

उदाहरण को संशोधित करने के लिए 3- code_deploy ; यह कुछ भी हो सकता है इसलिए हम बस एक फाइल को लक्ष्य मशीन में स्थानांतरित करेंगे।

4- build_ami चल रहे ec2 उदाहरण के आधार पर हमारी नई छवि बनाने के लिए। यह पोस्ट मानती है कि आप अपने Ansible प्रोजेक्ट के शीर्ष स्तर पर हैं: my_ansible_project

पहली भूमिका: ami_find

cd my_ansible_project/roles && ansible-galaxy init ami_find

इस भूमिका में हम ec2_ami_find मॉड्यूल का उपयोग करने जा रहे हैं और एक उदाहरण के रूप में, हम एक उबंटू मशीन की खोज करेंगे और इसका ami_id (ami-xxxxxxxx) प्राप्त करेंगे। अब my_ansible_project/roles/ami_find/tasks/main.yml फ़ाइल को संपादित करें:

---
- ec2_ami_find:
    name: "ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"
    sort: name
    sort_order: descending
    sort_end: 1
    region: "{{ aws_region }}"
  register: ami_find
- set_fact: ami_ubuntu="{{ ami_find.results[0].ami_id }}"

दूसरी भूमिका: ec2_ami_creation

यहां, हम पहली भूमिका से प्राप्त ami_id उपयोग करेंगे और फिर उसके आधार पर अपना नया उदाहरण लॉन्च करेंगे:

cd my_ansible_project/roles && ansible-galaxy init ec2_ami_creation

इस भूमिका में हम अपने उदाहरण को लॉन्च करने के लिए सबसे महत्वपूर्ण रूप से ec2_module का उपयोग करने जा रहे हैं। अब my_ansible_project/roles/ec2_ami_creation/tasks/main.yml फ़ाइल संपादित करें:

---
- ec2_vpc_subnet_facts:
    region: "{{aws_region}}"
  register: vpc
- name: creation of security group of the ec2 instance
  ec2_group:
    name: example
    description: an example EC2 group
    region: "{{ aws_region }}"
    rules:
      - proto: tcp
        from_port: 22
        to_port: 22
        cidr_ip: 0.0.0.0/0
    state: present
  register: ec2_sg

- name: create instance using Ansible
  ec2:
    key_name: "{{ ansible_key }}"
    group: example
    vpc_subnet_id: "{{vpc.subnets[0].id}}"
    instance_type: "{{ instance_type }}"
    ec2_region: "{{ aws_region }}"
    image: "{{ base_image }}"
    assign_public_ip: yes
    wait: yes
  register: ec2

- set_fact: id={{ec2.instances[0].id}}

- name: adding the newly created instance to a temporary group in order to access it later from another play
  add_host: name={{ item.public_ip }} groups=just_created
  with_items: ec2.instances

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

तीसरी भूमिका: code_deploy

यहां, हम इस उदाहरण को just_created जिसे just_created नामक समूह में जोड़ा गया था

cd my_ansible_project/roles && ansible-galaxy init code_deploy

इस भूमिका में हम फ़ाइल को स्थानांतरित करने और उसमें मशीन होस्टनाम लिखने के लिए template_module का उपयोग करने जा रहे हैं। अब my_ansible_project/roles/code_deploy/tasks/main.yml फ़ाइल संपादित करें:

---
- template: src=my_file.txt.j2 dest=/etc/my_file.txt

फिर अपनी भूमिका के अंदर टेम्प्लेट फ़ोल्डर में जाएं:

cd my_ansible_project/roles/templates और my_file.txt.j2 नामक एक फ़ाइल जोड़ें:

my name is {{ ansible_hostname }}` 

चौथी भूमिका: build_ami

अब हम ec2_ami मॉड्यूल का उपयोग करके रनिंग इंस्टेंस की एक छवि बनाएंगे । आप परियोजना फ़ोल्डर में ले जाएँ और:

 cd my_ansible_project/roles && ansible-galaxy init build_ami

अब my_ansible_project/roles/build_ami/tasks/main.yml फ़ाइल को संपादित करें:

---
- ec2_ami:
    instance_id: "{{ instance_id }}"
    wait: yes
    name: Base_Image

अब, मुझे लगता है कि आप सोच रहे हैं कि इन सभी भूमिकाओं को कैसे परखा जाए। क्या मैं सही हू? यदि हां, तो पढ़ना जारी रखें।

हम एक प्लेबुक लिखेंगे, जो तीन नाटकों से बना होगा: localhost पर लागू पहला नाटक हमारी पहली दो भूमिकाओं को कहेगा , दूसरा नाटक हमारे just_created समूह पर लागू होगा। अंतिम भूमिका localhost पर लागू होगी। localhost क्यों? जब हम AWS के कुछ स्रोतों को प्रबंधित करना चाहते हैं, तो हम अपनी स्थानीय मशीन का उपयोग करते हैं, जैसे कि सरल। अगला, हम एक vars फ़ाइल का उपयोग करेंगे जिसमें हम अपने चर ansible_key : ansible_key , aws_region , आदि ...

अपने प्रोजेक्ट के शीर्ष पर अवसंरचना फ़ोल्डर बनाएँ और उसके अंदर एक फ़ाइल जोड़ें aws.yml :

---
aws_region: ap-southeast-2
ansible_key: ansible
instance_type: t2.small

तो अपनी परियोजना के शीर्ष पर build_base_image.yml बनाएं और इसे जोड़ें:

---
   - hosts: localhost
     connection: local
     gather_facts: False
     vars_files:
       - infrastructure/aws.yml
     roles:
       - ami_find
       - { role: ec2_creation, base_image: "{{ ami_ubuntu }}"}

   - hosts: just_created
     connection: ssh
     gather_facts: True
     become: yes
     become_method: sudo
     roles:
       - code_deploy

   - hosts: localhost
     connection: local
     gather_facts: False
     vars_files:
       - infrastructure/aws.yml
     roles:
       - { role: new_image, instance_id: "{{ id }}"}

यही है, यह परीक्षण करने के बाद अपने रीसर्स को हटाना न भूलें, या रनिंग इंस्टेंस को हटाने के लिए भूमिका क्यों न बनाएं :-)

Amazon Web Services से कनेक्ट करने के लिए Ansible को ठीक से कॉन्फ़िगर कैसे करें

AWS संसाधनों को प्रबंधित करना जो बड़े पैमाने पर स्थिर इन्वेंट्री होस्ट फ़ाइल की सीमा में चलता है, इसीलिए हमें कुछ गतिशील की आवश्यकता होती है। और यह है कि गतिशील आविष्कारों के लिए क्या कर रहे हैं। चलो शुरू करते हैं:

इन ec2.ini और ec2.py फ़ाइलों को अपने प्रोजेक्ट फ़ोल्डर में डाउनलोड करें:

cd my_ansible_project 
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py    
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini

एक बार हो जाने के बाद, ec2.py फ़ाइल को निष्पादन योग्य ec2.py :

chmod +x ec2.py

अब, अपने AWS सीक्रेट और एक्सेस कुंजी को एन्सवर्जन वैरिएबल के रूप में निर्यात करें:

export AWS_ACCESS_KEY_ID='ABCDEFGHIJKLM'
export AWS_SECRET_ACCESS_KEY='NOPQRSTUVWXYZ'

उपयोग करने के लिए ec2.py लिपि हम अजगर एडब्ल्यूएस एसडीके, जरूरत boto ताकि आप इसे स्थापित करने की आवश्यकता:

sudo pip install boto

यदि सब कुछ अच्छा है, तो परीक्षण करने के लिए, अपने संसाधनों को सूचीबद्ध करके ec2.py को क्रियान्वित करने का प्रयास करें:

./ec2.py --list

आपको कुछ इसी तरह देखना चाहिए:

{
  "_meta": {
    "hostvars": {}
  }
}

अब हम अपनी स्टैटिक होस्ट फ़ाइल के साथ डायनामिक इन्वेंट्री का उपयोग करना चाहते हैं। सबसे पहले, inventory नामक एक फोल्डर बनाएं, उसमें ec2.py , ec2.ini और हमारी hosts फाइल को जोड़ें, फिर उस फोल्डर को इन्वेंट्री फाइल के रूप में उपयोग करने के लिए बताएं:

mkdir inventory 
mv ec2.py inventory/ec2.py
mv ec2.ini inventory/ec2.ini
mv hosts inventory/hosts

इसके बाद हमें आपके प्रोजेक्ट फ़ोल्डर में ansible.cfg नामक एक Ansible config फाइल ansible.cfg और उसे जोड़कर ansible.cfg लिए प्रोजेक्ट स्तर कॉन्फ़िगरेशन को परिभाषित करना चाहिए:

[defaults]
hostfile = inventory
[ssh_connection]
pipelining = False
ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no

अगला हमें अपने EC2 उदाहरणों तक पहुंच प्रमाणित करने के लिए SSH कुंजी का उपयोग करने के लिए Ansible को कॉन्फ़िगर करने की आवश्यकता है। SSH एजेंट का उपयोग संसाधनों के साथ प्रमाणित करने का सबसे अच्छा तरीका है, क्योंकि इससे चाबियों का प्रबंधन करना आसान हो जाता है:

ssh-agent bash 
ssh-add ~/.ssh/keypair.pem  

बस! यदि आपने इसका अनुसरण किया है, तो आप ping मॉड्यूल का उपयोग करके इसका परीक्षण कर सकते हैं और फिर, आप अपने चल रहे उदाहरणों को देखेंगे, जिन्हें आपकी कुंजी प्रतिसाद का उपयोग करने के लिए कॉन्फ़िगर किया गया है:

ansible -m ping all
11.22.33.44 | success >> {
    "changed": false, 
    "ping": "pong"
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow