Πώς να χρησιμοποιήσετε το Ansible για τη διαχείριση των πόρων σας AWS

Δεν θα θέλατε να μπορέσετε απλά να μεταφέρετε ένα ραβδί και τα επίπεδα πόρων στον λογαριασμό σας AWS θα ξαφνικά - και μαγικά - ξεκινούσαν σε τέλεια διαμορφωμένη ζωή, έτοιμη να καλύψει τις σύνθετες ανάγκες υποδομής σας;

Εάν έχετε ήδη εμπειρία με το AWS, τότε ξέρετε πόσο πόνο μπορεί να είναι να εργαστείτε μέσω ιστοσελίδας μετά από ιστοσελίδα στην κονσόλα διαχείρισης του Amazon καθώς παρέχετε χειροκίνητα υπηρεσίες. Ακόμα και το AWS CLI - το οποίο είναι ένα τεράστιο βήμα - μπορεί να προσθέσει τη δική του πολυπλοκότητα και προσπάθεια στο μείγμα.

Αυτό δεν σημαίνει ότι το ίδιο το AWS δεν αντιμετωπίζει το πρόβλημα με τη δική τους κατηγορία ισχυρών εργαλείων ενορχήστρωσης, συμπεριλαμβανομένου του CloudFormation και της υπηρεσίας Elastic Kubernetes (κάτι που αναφέρομαι επιτέλους στο μάθημα "Using Docker on AWS" στο Pluralsight). Αλλά καμία από αυτές τις επιλογές δεν είναι τόσο κοντά στην υπάρχουσα υποδομή σας - είτε χρησιμοποιεί τόσο οικείο τρόπο λειτουργίας - όσο το Ansible.

Εάν χρησιμοποιείτε ήδη το Ansible για τις εσωτερικές σας λειτουργίες, η σύνδεσή του στο λογαριασμό σας AWS μπορεί μερικές φορές να είναι ο γρηγορότερος και πιο ανώδυνος τρόπος για τη μετεγκατάσταση λειτουργιών στο cloud.

Κατανόηση του πλεονεκτήματος Ansible / AWS

Το βιβλίο μου "Διαχείριση πόρων AWS χρησιμοποιώντας το Ansible" - από το οποίο αποσπάται αυτό το άρθρο - έχει σχεδιαστεί για να σας παρουσιάσει γρήγορα στην εφαρμογή της δηλωτικής προσέγγισης του Ansible για εργασία με πόρους AWS. Το να μπορείς να "δηλώνεις" τα ακριβή αποτελέσματα διαμόρφωσης που θέλεις και στη συνέχεια να τα παράγεις παίρνοντας το Ansible να διαβάσει ένα playbook είναι το μαγικό ραβδί του Ansible. Όταν έχει σχεδιαστεί σωστά, είναι εκπληκτικό πόσο απλό μπορεί να είναι η εκτέλεση σύνθετων, πολυεπίπεδων εφαρμογών AWS.

Πριν ξεκινήσουμε ένα απλό βιβλίο "Hello World" Ansible, ας βεβαιωθούμε πρώτα ότι έχετε ένα σωστά διαμορφωμένο περιβάλλον εργασίας μέσω του οποίου το Ansible μπορεί να επικοινωνήσει με όλους τους νέους φίλους του στον λογαριασμό σας AWS.

Προετοιμασία ενός τοπικού περιβάλλοντος

Όπως πιθανώς ήδη γνωρίζετε, το Ansible είναι ένα εργαλείο ενορχήστρωσης που σας επιτρέπει να γράφετε αρχεία playbook απλού κειμένου που δηλώνουν το προφίλ λογισμικού και την ιδανική κατάσταση που θέλετε να εφαρμόσετε σε έναν διακομιστή προορισμού. Αυτοί οι διακομιστές - γνωστοί ως κεντρικοί υπολογιστές - μπορούν να παρέχονται για σχεδόν κάθε ψηφιακό φόρτο εργασίας που μπορείτε να φανταστείτε, χρησιμοποιώντας σχεδόν οποιονδήποτε συνδυασμό λογισμικού εφαρμογών και που εκτελούνται σε σχεδόν οποιαδήποτε πλατφόρμα.

Στις παλιές καλές μέρες, όταν ένα βιβλίο αναπαραγωγής εκτελέστηκε έναντι ενός φυσικού διακομιστή, η Ansible θα χρησιμοποιούσε μια υπάρχουσα σύνδεση SSH για να συνδεθεί με ασφάλεια στον απομακρυσμένο κεντρικό υπολογιστή και να ξεκινήσει η κατασκευή της εφαρμογής σας. Αλλά αυτό δεν θα λειτουργήσει για φόρτους εργασίας AWS. Βλέπετε, επειδή οι παρουσίες EC2 και άλλες υποδομές που θέλετε να ξεκινήσετε δεν υπάρχουν ακόμη, δεν μπορεί να υπάρχουν "υπάρχουσες" συνδέσεις SSH. Αντ 'αυτού, το Ansible θα χρησιμοποιήσει το Boto 3 - το κιτ ανάπτυξης λογισμικού (ή SDK) που χρησιμοποιείται από το AWS που επιτρέπει στον κώδικα Python να επικοινωνεί με το API AWS.

Χρησιμοποιώντας το AWS CLI για να συνδεθείτε

Δεν χρειάζεται να ξέρετε πώς λειτουργεί όλα αυτά, αλλά πρέπει να είναι εκεί για να λειτουργήσει. Για αυτόν τον λόγο θα εγκαταστήσετε τη διεπαφή γραμμής εντολών AWS (CLI). Δεν θα χρησιμοποιήσουμε το ίδιο το CLI για κάτι σημαντικό, αλλά η εγκατάστασή του θα μας δώσει όλες τις εξαρτήσεις που χρειαζόμαστε. Μπορείτε να μάθετε πώς να το κάνετε αυτό στην πιο πρόσφατη έκδοση οποιουδήποτε λειτουργικού συστήματος χρησιμοποιείτε από τη σελίδα τεκμηρίωσης AWS.

Η συνεργασία με τον διαχειριστή πακέτων Python, το PIP, είναι ένας δημοφιλής τρόπος για να κάνετε όλα αυτά. Δείτε πώς θα εγκαταστήσετε το ίδιο το PIP και μετά το AWS CLI σε ένα μηχάνημα Ubuntu:

sudo apt update sudo apt install python3-pip pip3 install awscli

Πρέπει να σημειώσω ότι, καθώς το γράφω αυτό, ο Python 2 είναι ακόμα ζωντανός ... αλλά μόνο και μόνο. Άρα μερικές φορές ενδέχεται να υπάρχουν ξεχωριστές εκδόσεις Python 2 και Python 3 εγκατεστημένες στο σύστημά σας. Επειδή το Python 2 σύντομα θα καταργηθεί πλήρως, πιθανότατα δεν χρειάζεται να ανησυχείτε για τον καθορισμό του python3 ή του pip3 με τις εντολές σας: αυτό θα πρέπει να είναι αυτόματο.

Μόλις εγκατασταθεί το CLI, εκτελέστε aws configureκαι εισαγάγετε το αναγνωριστικό κλειδιού πρόσβασης AWS και το μυστικό κλειδί πρόσβασης.

aws configure cat .aws/credentials

Μπορείτε να λάβετε κλειδιά από τη σελίδα Τα διαπιστευτήρια ασφαλείας σας στην Κονσόλα διαχείρισης AWS. Δείτε πώς θα φαίνονται αυτά τα κλειδιά (μην έχετε άτακτες ιδέες, δεν είναι έγκυρες):

AccessKeyId: AKIALNZTQW6H3EFBRLHQ SecretAccessKey: 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

Απλώς θυμηθείτε ότι ένα ζευγάρι κλειδιών που έχουν εκδοθεί στον ριζικό χρήστη του λογαριασμού σας AWS παρέχει πλήρη πρόσβαση σε ολόκληρο τον λογαριασμό σας AWS. Όποιος κατέχει αυτά τα διαπιστευτήρια θα μπορούσε γρήγορα να επιτύχει έξι και ακόμη επτά χρεώσεις υπηρεσιών, οπότε να είστε πολύ προσεκτικοί με τον τρόπο που τα χρησιμοποιείτε και τα αποθηκεύετε. Στην ιδανική περίπτωση, θα προτιμούσατε να περιορίσετε την έκθεση σε κινδύνους δημιουργώντας έναν χρήστη διαχειριστή στην υπηρεσία AWS Identify and Access Management (IAM) με περιορισμένες εξουσίες και χρησιμοποιώντας ένα κλειδί που εκδόθηκε σε αυτόν τον χρήστη.

Σε κάθε περίπτωση, γιατί το κάνω αυτό; Η αξία της συμπλήρωσης του αρχείου διαπιστευτηρίων AWS είναι ότι το Ansible είναι αρκετά έξυπνο για να το αναζητήσει και, εάν δεν υπάρχουν άλλα κλειδιά ελέγχου ταυτότητας στο περιβάλλον του συστήματος, θα τα χρησιμοποιήσει. Σύντομα θα δείτε πόσο ισχυρό θα είναι αυτό. Ωστόσο, θα πρέπει να γνωρίζετε άλλους τρόπους διαχείρισης του ελέγχου ταυτότητας για βιβλία παιχνιδιού Ansible, όπως η χρήση του ansible-vault ή η δημιουργία και στη συνέχεια η επίκληση ενός αρχείου aws_keys.yml. Αλλά ένα πράγμα που σίγουρα ΔΕΝ πρέπει να κάνετε είναι να πληκτρολογήσετε τα κλειδιά στα αρχεία του playbook σας - ειδικά αν σκοπεύετε να τα προωθήσετε σε ένα διαδικτυακό αποθετήριο όπως το GitHub. Θα δοκιμάσω γρήγορα το CLI για να βεβαιωθώ ότι μπορούμε να συνδεθούμε σωστά στο AWS. Αυτή η απλή εντολή θα αναφέρει τυχόν κουβάδες S3 που τυχαίνει να έχω σε αυτόν τον λογαριασμό.

aws s3 ls

Τώρα είμαστε έτοιμοι να εγκαταστήσουμε το σύστημα. Θα πάω με το pip3 για αυτό. Θα μπορούσα να χρησιμοποιήσω το κανονικό αποθετήριο του Ubuntu εξίσου εύκολα, αλλά πιθανότατα θα εγκαταστήσει μια ελαφρώς παλαιότερη έκδοση. Ανάλογα με τη σύνδεση του δικτύου σας, αυτό θα διαρκέσει ένα ή δύο λεπτά, αλλά θα παραλείψω το μεγαλύτερο μέρος αυτού.

$ pip3 install ansible 

Θα επιβεβαιώσω ότι έχει εγκατασταθεί σωστά εκτελώντας ansible --version. Αυτό μας δείχνει την έκδοση που δημιουργήθηκε, η οποία διαμόρφωσε τις λειτουργικές μονάδες Ansible, από προεπιλογή, θα αποθηκευτεί σε οποιαδήποτε από αυτές τις δύο τοποθεσίες στο σύστημα αρχείων, ότι άλλες μονάδες θα ήταν διαθέσιμες εδώ και - το πιο σημαντικό - ότι βρίσκεται το εκτελέσιμο του Ansible στον κατάλογο / local / bin / κάτω από τον αρχικό κατάλογο του χρήστη μου. Παρεμπιπτόντως, ο χρήστης μου ονομάζεται ubuntu. Μπορείτε επίσης να δείτε ότι χρησιμοποιούμε μια ωραία, ενημερωμένη έκδοση του Python 3.

$ ansible --version ansible 2.8.5 config file = None configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/ubuntu/.local/lib/python3.6/site-packages/ansible executable location = /home/ubuntu/.local/bin/ansible python version = 3.6.8 (default, Aug 20 2019, 17:12:48) [GCC 8.3.0] 

Ένα ακόμη βήμα. Όπως ανέφερα νωρίτερα, το Ansible θα συνδεθεί στο AWS χρησιμοποιώντας το boto SDK. Επομένως, θα πρέπει να εγκαταστήσουμε τα πακέτα boto και boto 3. Θα πάω με το PIP και για αυτό.

$ pip3 install boto boto3 

Μόλις επιτευχθεί αυτό, θα είμαστε έτοιμοι να ολοκληρώσουμε κάποια πραγματικά πράγματα. Αυτό θα ξεκινήσει στην επόμενη ενότητα.

Δοκιμάζοντας το Ansible με ένα απλό βιβλίο

This is going to be very simple proof of concept demo. I'll create a couple of files, walk you through the syntax, and then fire it up. First off, I'll use any plain text editor to create a hosts file. Normally, the hosts file tells Ansible where it can find the remote servers you want to provision. But since, in the case of AWS, the resources that will be our hosts don't yet exist, we'll simply point Ansible to localhost and boto will handle connections behind the scenes. Here's what the contents of that file will look like:

[local] localhost 

Next, I'll create a playbook file that I'll call test-ansible.yml. The yml extension, of course, indicates that this file must be formatted using YAML markup language syntax. As you can see from the file text I've pasted just below, that'll begin with three dashes marking the start of the file and then an indented dash introducing a set of definitions. The value of "hosts" could be one or more remote computers but, as I've said, we'll leave that up to the local system to figure out. The same goes for our connection.

The next section includes the tasks we want Ansible to perform. This one will use the aws_s3 module to create a new bucket on Amazon's S3 Simple Storage Service in the us-east-1 region. I have to give it this ugly name because S3 buckets require globally unique names - if a name you choose clashes with any one of the countless millions of names already out there, the operation will fail.

--- - name: Test s3 hosts: local connection: local tasks: - name: Create new bucket aws_s3: bucket: testme817275b mode: create region: us-east-1 

I run the playbook by calling the ansible-playbook command using -i to specify the hosts file, and then pointing to the test.yml file. Ansible should give us some feedback in just a moment or two. If we're successful, you'll see "0" as the value of "failed" and at least "1" as the value of "ok".

$ ansible-playbook -i hosts test-ansible.yml PLAY [Test s3] ****************************************************** TASK [Create new bucket] ******************************************** changed: [localhost] PLAY RECAP ********************************************************** localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 

Εάν ελέγξω τη λίστα των κάδων μου για άλλη μια φορά, πρέπει - και να το κάνω - να δω το νέο:

$ aws s3 ls 2018-12-30 15:19:24 elasticbeanstalk-us-east-1-297972716276 2018-10-12 04:09:37 mysite548.com 2019-09-24 15:53:26 testme817275b 

Αυτή είναι μια πολύ σύντομη εισαγωγή για τη δημιουργία ενός περιβάλλοντος Ansible. Είδαμε πως η χρήση του Ansible με τους πόρους του Amazon που παρέχονται αυτόματα θα λειτουργήσει διαφορετικά από ό, τι με τους παραδοσιακούς κεντρικούς υπολογιστές Ansible. Θα χρειαστείτε ένα διαφορετικό σύνολο εργαλείων ελέγχου ταυτότητας και ελέγχου αποθέματος. Περπατήσαμε τη διαδικασία δημιουργίας ενός περιβάλλοντος Ansible και συνδέοντάς το με AWS και στη συνέχεια εκτελέσαμε ένα απλό βιβλίο. Κοντός και γλυκός.

Αυτό το άρθρο προέρχεται από το βιβλίο μου "Διαχείριση πόρων AWS χρησιμοποιώντας το Ansible". Υπάρχει περισσότερη τεχνολογική καλοσύνη - με τη μορφή βιβλίων, μαθημάτων και άρθρων - διαθέσιμη στον ιστότοπό μου, bootstrap-it.com.