ansible
Amazon Web Services के साथ Ansible का उपयोग करना
खोज…
टिप्पणियों
उदाहरण -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"
}