Προγραμματισμός

Εκπαιδευτικό σεμινάριο: Δοκιμάστε ένα πιο έξυπνο CLI για AWS

Ο Henri Binsztok είναι επικεφαλής της καινοτομίας στο Wallix και συν-δημιουργός του έργου ανοιχτού κώδικα Awless.

Όταν το cloud αφορούσε σχεδόν εικονικές μηχανές, εργαλεία όπως ο Chef ή το Puppet μας βοήθησαν να προετοιμάσουμε εύκολα τις VM μας. Το μόνο που είχε σημασία ήταν η παροχή παρουσιών που περιείχαν όλο τον απαιτούμενο κώδικα και δεδομένα. Αλλά τώρα που το Amazon Web Services έχει αυξηθεί σε περισσότερες από 90 υπηρεσίες, η αλληλεπίδραση με το AWS API γίνεται το μεγαλύτερο μέρος της εργασίας.

Πώς πρέπει να διαχειριστούμε την υποδομή AWS και ποιες διεπαφές πρέπει να χρησιμοποιήσουμε; Οι περισσότεροι αρχάριοι ξεκινούν με AWS Console, το προεπιλεγμένο GUI, ενώ οι έμπειροι sysadmins προτιμούν γενικά μια διεπαφή γραμμής εντολών (CLI). Το πρόβλημα είναι ότι το AWS CLI δεν είναι φιλικό προς τον χρήστη. Επειδή ενσωματώνει ολόκληρο το API AWS, εκθέτει μια τεράστια επιφάνεια σε όρους εντολών, σημαιών και επιλογών.

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

Επειδή υπάρχουν τόσες πολλές υπηρεσίες AWS, είναι συχνά σημαντικό να βρείτε και να εμφανίσετε μια ιεραρχία υπηρεσιών από τη γραμμή εντολών. Μπορούμε να ομαδοποιήσουμε τις υπηρεσίες ανά λειτουργικότητα - όπως υπολογισμός και βάση δεδομένων. Όμως, η εξάσκηση σε καθένα από αυτά εξαντλητικά είναι κουραστική, καθώς, από αυτό το γράψιμο, δεν υπάρχουν λιγότερες από 15 υπηρεσίες γύρω από την αποθήκευση και τη βάση δεδομένων, χωρίς να υπολογίζονται τέσσερις υπηρεσίες μετεγκατάστασης δεδομένων και εννέα υπηρεσίες ανάλυσης που σχετίζονται άμεσα με τη χρήση δεδομένων.

Το βρίσκουμε ευκολότερο να ομαδοποιήσουμε τις υπηρεσίες με την ετοιμότητα του cloud. Σε αυτό το άρθρο, θα αναλύσουμε λεπτομερώς πώς να χρησιμοποιήσετε το Awless για να δημιουργήσετε και να διαχειριστείτε πόρους cloud για μια πραγματική περίπτωση χρήσης, την ανάπτυξη παρουσιών WordPress έτοιμων για παραγωγή. Θα χρησιμοποιήσουμε τους ακόλουθους πόρους AWS:

  1. Υπηρεσίες VM EC2 (Elastic Compute Cloud) και ELB (Elastic Load Balancing).
  2. Υπηρεσίες υψηλού επιπέδου που εκτελούνται σε VM αλλά διαχειρίζονται από AWS, όπως RDS (Relational Database Service) ή ElastiCache (για ουρές).
  3. Υπηρεσίες «χωρίς διακομιστή» που εκτελούνται σε πολυμεσικές υπηρεσίες VM, όπως S3 (αποθήκευση αντικειμένων) ή Lambda (εκτέλεση μιας λειτουργίας).
Γουόλιξ

Ξεκινήστε με το Awless

Εγγραφείτε στο AWS και δημιουργήστε έναν πρώτο λογαριασμό με Πρόσβαση διαχειριστή δικαιώματα. Σημειώστε προσεκτικά το κλειδί πρόσβασης και το μυστικό κλειδί σας.

Εγκαταστήστε το Awless

Το Awless είναι διαθέσιμο στο GitHub. Παρέχουμε προεγκατεστημένα δυαδικά αρχεία και πακέτα Homebrew για MacOS:

> παρασκευή βρύσης wallix / απέραντη 

> ετοιμάζω την εγκατάσταση

Μπορείτε να βεβαιωθείτε ότι το Awless έχει εγκατασταθεί σωστά εκτελώντας:

> απίστευτη έκδοση

Το Awless διαμορφώνεται μετά από δημοφιλή εργαλεία γραμμής εντολών όπως το Git. Οι περισσότερες εντολές έχουν τη μορφή:

> απέραντο ρήμα [οντότητα] [παράμετρος = τιμή ...]

Αυτό το άρθρο θα δώσει μια επισκόπηση 360 μοιρών για τους πραγματικούς φόρτους εργασίας παραγωγής στο AWS, ξεκινώντας από το μηδέν. Για λόγους σαφήνειας, παραλείπουμε όλα τα βήματα επιβεβαίωσης και εξόδου, καθώς το Awless ζητά πάντα να επιβεβαιώνει εντολές που δημιουργούν, ενημερώνουν ή διαγράφουν πόρους.

Πρώτα βήματα με το Awless

Μπορούμε να εκδώσουμε την πρώτη μας εντολή Awless καταχωρίζοντας τα εικονικά ιδιωτικά σύννεφα (VPC). Επειδή αυτή είναι η πρώτη μας εκτέλεση, θα χρειαστεί να εισαγάγουμε ορισμένα απαραίτητα δεδομένα για να διαμορφώσουμε το Awless:

> απίστευτη λίστα vpcs

Καλώς ήλθατε στο απέραντο! Επίλυση δεδομένων περιβάλλοντος ...

Επιλέξτε περιοχή AWS:

ap-βορειοανατολικά-1, ap-βορειοανατολικά-2, ap-south-1, ap-tenggara-1, ap-tenggara-2, ca-central-1, cn-north-1, eu-central-1, eu- west-1, eu-west-2, sa-east-1, us-east-1, us-east-2, us-gov-west-1, us-west-1, us-δύση-2

Αξία ? > us-west-2

Συγχρονισμός περιοχής «us-west-2» ...

Δεν είναι δυνατή η επίλυση διαπιστευτηρίων AWS (AWS_ACCESS_KEY_ID και AWS_SECRET_ACCESS_KEY) Εισαγάγετε τα κλειδιά πρόσβασης και επιλέξτε ένα όνομα προφίλ (αποθηκευμένο στο /Users/john/.aws/credentials):

Αναγνωριστικό κλειδιού πρόσβασης AWS; ΠΑΡΑΔΕΙΓΜΑ AKIAIINZQI7WIEXAMPLE

Κλειδί μυστικής πρόσβασης AWS; hYWZBVOusePEPSr5PkscplskB84fjbg ΠΑΡΑΔΕΙΓΜΑ

Επιλογή ονόματος προφίλ; διαχειριστής

✓ /Users/john/.aws/credentials δημιουργήθηκαν

✓ Τα διαπιστευτήρια για το προφίλ «διαχειριστής» αποθηκεύτηκαν με επιτυχία

Ολα τελείωσαν. Απολαμβάνω!

Μπορείτε να ελέγξετε και να διαμορφώσετε αδιάλειπτα με το "awless config".

Τρέχει τώρα: απίστευτη λίστα vpcs

| Αναγνωριστικό ▲ | ΟΝΟΜΑ | ΟΡΙΣΜΟΣ | ΚΡΑΤΟΣ | CIDR |

|--------------|------|---------|-----------|---------------|

| vpc-1d1df679 | | αλήθεια | διαθέσιμο | 172.31.0.0/16 |

Δημιουργήστε έναν χρήστη AWS

Τώρα θα χρησιμοποιήσουμε το Awless για να δημιουργήσουμε έναν νέο χρήστη AWS και να του δώσουμε επαρκή δικαιώματα χρησιμοποιώντας το προφίλ διαχειριστή. Δημιουργούμε τον χρήστη John και το κλειδί πρόσβασης:

> χωρίς να δημιουργήσετε όνομα χρήστη = john 

> awless create accesskey user = john aws_access_key_id = AKIAIOSFODNN7EXAMPLE

aws_secret_access_key = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY

Θέλετε να αποθηκεύσετε τα .aws / διαπιστευτήριά σας; (y / n) y

Όνομα καταχώρησης στο .aws / διαπιστευτήρια; [προεπιλογή] john

Τώρα που υπάρχει ο John, χρειάζεται ένα σύνολο αδειών. Θα δώσουμε στον John πλήρη πρόσβαση στις υπηρεσίες EC2, RDS, Auto Scaling, CloudFront και S3 που θα χρησιμοποιήσουμε σε αυτό το άρθρο:

> απροσδόκητη υπηρεσία πολιτικής επισύναψης = πρόσβαση ec2 = πλήρης χρήστης = john 

> απροσδόκητη υπηρεσία πολιτικής επισύναψης = πρόσβαση rds = πλήρης χρήστης = john

> απρόσμενη υπηρεσία πολιτικής επισύναψης = πρόσβαση s3 = πλήρης χρήστης = john

> απροσδόκητη υπηρεσία πολιτικής επισύναψης = πρόσβαση αυτόματης κλιμάκωσης = πλήρης χρήστης = john

> απροσδόκητη υπηρεσία πολιτικής επισύναψης = πρόσβαση στο cloud = πλήρης χρήστης = john

Τώρα που ο John είναι ένας πλήρως λειτουργικός χρήστης, θα αλλάξουμε στο προφίλ του για τα επόμενα βήματα:

> awless config set aws.profile john

Θα χρησιμοποιήσουμε το AWS για να δημιουργήσουμε μια εξαιρετικά διαθέσιμη, διαχειριζόμενη ανάπτυξη WordPress, συνδυάζοντας VM, διαχειριζόμενες και χωρίς διακομιστές υπηρεσίες. Ο κύριος στόχος μας απεικονίζεται παρακάτω. Θα πρέπει να αντιμετωπίσουμε τρεις «προκλήσεις devops» για να φτάσουμε, χρησιμοποιώντας τις υπηρεσίες υποδομής AWS, τις διαχειριζόμενες υπηρεσίες και τις υπηρεσίες χωρίς διακομιστή, αντίστοιχα.

Γουόλιξ

Πρόκληση 1: Ανασηκώστε και μετακινήστε μια εφαρμογή σε EC2

Η ανύψωση και η αλλαγή είναι η πιο γρήγορη μετεγκατάσταση εφαρμογών παλαιού τύπου στο cloud και επωφελούνται από τα πλεονεκτήματα ευελιξίας και κόστους των πλατφορμών cloud. Σε αυτήν την περίπτωση, θα ξεκινήσουμε αναπτύσσοντας μια μηχανή WordPress και τη βάση δεδομένων της σε ένα μόνο VM. Οι πελάτες θα συνδεθούν απευθείας στο VM.

Γουόλιξ

Δημιουργήστε ένα VPC

Πριν προχωρήσουμε στη δημιουργία του VM, πρέπει πρώτα να δημιουργήσουμε πόρους δικτύου:

  • Ένα ιδιωτικό δίκτυο (ή VPC)
  • Μια πύλη Διαδικτύου για αυτό το VPC
  • Ένα υποδίκτυο που χρησιμοποιεί την πύλη Διαδικτύου

Το Awless θα ζητήσει τυχόν παραμέτρους που λείπουν με αυτόματη συμπλήρωση. Εδώ χρησιμοποιούμε έναν συνδυασμό και των δύο παρεχόμενων (param = τιμή) και προτροπές παραμέτρων:

> απίστευτα δημιουργήστε vpc cidr = 10.0.0.0 / 16 name = wordpress-vpc 

> χωρίς να δημιουργήσετε internetgateway

[OK] id = igw-1234567

> αδιάλειπτη σύνδεση internetgateway

Προσδιορίστε (Ctrl + C για έξοδο, καρτέλα για ολοκλήρωση):

internetgateway.id; [Αυτί]

internetgateway.id; igw-1234567

internetgateway.vpc; @wo [Tab]

internetgateway.vpc; @ wordpress-vpc

Το Awless προτείνει τη βέλτιστη πρακτική για τη χρήση ονομάτων και όχι των αναγνωριστικών πόρων. Ως τέτοια, @ όνομα πόρου είναι το αναγνωριστικό του πόρου που ονομάζεται "resource-name".

Ας δημιουργήσουμε ένα δημόσιο υποδίκτυο για να φιλοξενήσουμε την παρουσία μας στο WordPress και να επισυνάψουμε έναν πίνακα διαδρομών που δρομολογεί την κίνηση στο Διαδίκτυο στην πύλη Διαδικτύου του VPC:

> απροσδόκητη δημιουργία υποδικτύου cidr = 10.0.0.0 / 24 vpc = @ wordpress-vpc name = wordpress-public-subnet 

> απροσδιόριστη ενημέρωση subnet id = @ wordpress-public-subnet public = true

> χωρίς να δημιουργήσετε δυνατότητα δρομολόγησης vpc = @ wordpress-vpc

> αδιάλειπτη επισύναψη routetable subnet = @ wordpress-public-subnet

Προσδιορίστε (Ctrl + C για έξοδο, καρτέλα για ολοκλήρωση):

routetable.id?[tab]

* επιλέξτε το αναγνωριστικό της δρομολόγησης που δημιουργήσατε παραπάνω *

> απροσδόκητη δημιουργία διαδρομής cidr = 0.0.0.0 / 0

Προσδιορίστε (Ctrl + C για έξοδο, καρτέλα για ολοκλήρωση):

route.gateway; * το αναγνωριστικό της πύλης διαδικτύου που επισυνάψατε στο VPC παραπάνω *

route.table; * το αναγνωριστικό της δρομολόγησης που δημιουργήσατε παραπάνω *

Σημειώστε ότι κάθε ενέργεια στο Awless είναι τόσο απλή όσο μπορεί. Παρόλο που ακολουθούμε μια ολοκληρωμένη προσέγγιση βήμα προς βήμα, το Awless μας επιτρέπει να περάσουμε από την κουραστική διαδικασία δημιουργίας μιας υποδομής πολύ πιο γρήγορα από ό, τι με την γραφική κονσόλα ή το AWS CLI.

Δημιουργήστε ένα πληκτρολόγιο SSH και μια ομάδα ασφαλείας

Το δίκτυο cloud είναι πλέον έτοιμο. Πριν δημιουργήσουμε την παρουσία, χρειαζόμαστε ένα ζεύγος κλειδιών SSH, για να συνδεθούμε με την παρουσία αργότερα. Σε μία εντολή, το Awless δημιουργεί ένα ζεύγος κλειδιών SSH τοπικά και το καταχωρεί στο AWS:

> απροσδόκητη δημιουργία ονόματος πληκτρολογίου = johnkey

Μια βέλτιστη πρακτική είναι να παρέχετε ελάχιστη πρόσβαση σε οποιονδήποτε πόρο, επομένως θα δεχόμαστε μόνο συνδέσεις HTTP από όλο το Διαδίκτυο και SSH από την εξερχόμενη διεύθυνση IP μας. Για να το κάνουμε αυτό, δημιουργούμε και διαμορφώνουμε μια ομάδα ασφαλείας:

> χωρίς να δημιουργήσετε ομάδα ασφαλείας vpc = @ wordpress-vpc περιγραφή = \ "HTTP public + SSH access \" name = wordpress-secgroup 

> MY_IP = $ (απέραντο whoami — μόνο γιαip)

> απροσδόκητη ενημέρωση της ομάδας ασφαλείας id = @ wordpress-secgroup inbound = εξουσιοδότηση cidr = $ MY_IP / 32 portrange = 22

> απροσδόκητη ενημέρωση securitygroup id = @ wordpress-secgroup inbound = εξουσιοδότηση cidr = 0.0.0.0 / 0 portrange = 80

Παροχή της εφαρμογής με δεδομένα χρήστη AWS

Τώρα θα παρέχουμε την παρουσία μας στο WordPress μέσω δεδομένων χρήστη AWS. Εδώ θα χρησιμοποιήσουμε το διαθέσιμο σενάριο στο GitHub:

> awless create instance subnet = @ wordpress-public-subnet keypair = johnkey name = wordpress-instance userdata = // raw.githubusercontent.com/zn3zman/AWS-WordPress-Creation/16a52aef4f618d558d61197df4e4eca4c015277f/WP-Sup δευτερεύουσα ομάδα

Μπορείς να χρησιμοποιήσεις απέραντη παράσταση για να λάβετε πληροφορίες σχετικά με οποιονδήποτε πόρο, όπως η δημόσια διεύθυνση IP της παρουσίας WordPress:

> απεριόριστη εμφάνιση wordpress-instance

Μπορείτε να συνδεθείτε με τη διεύθυνση IP από την έξοδο εντολών για να αποκτήσετε πρόσβαση στην υπηρεσία WordPress (αν και ίσως χρειαστεί να περιμένετε λίγα λεπτά για την σωστή παροχή της παρουσίας).

Ίδρυμα WordPress

Από προεπιλογή, το Awless θα δημιουργήσει έναν τύπο t2.micro (1 vCPU, 1GB RAM) χρησιμοποιώντας το Amazon Linux. Μπορείτε να ενημερώσετε τις προεπιλεγμένες τιμές χρησιμοποιώντας απέραντο σύνολο ρυθμίσεων:

> awless config set instance.type m4.large 

> UBUNTU_AMI = $ (απρόσκοπτη αναζήτηση εικόνων κανονική: ubuntu -idid-silent)

> awless config set instance.image $ UBUNTU_AMI

Σε αυτό το σημείο, έχουμε δημιουργήσει πολλούς πόρους. Χρησιμοποιώντας απέραντη λίστα, μπορούμε να παραθέσουμε χρήστες, παρουσίες, υποδίκτυα και όλους τους άλλους τύπους πόρων (υπό την προϋπόθεση φυσικά ότι το προφίλ AWS σας έχει επαρκή δικαιώματα). Για παράδειγμα, μπορούμε να παραθέσουμε περιπτώσεις:

> αμέτρητες εμφανίσεις λίστας 

| Αναγνωριστικό ▲ | ΖΩΝΗ | ΟΝΟΜΑ | ΕΝΗΜΕΡΩΣΗ |

|-------------------|----------|--------------------|---------|

| i-00268db26b0d0393c | us-west-1c | wordpress-instance | 57 λεπτά |

[...]

Το Awless παρέχει μια ισχυρή δυνατότητα που επιτρέπει εύκολες συνδέσεις σε περιπτώσεις με SSH. Πίσω από τα παρασκήνια, το Awless θα λάβει αυτόματα τη διεύθυνση IP της παρουσίας, θα μαντέψει το όνομα χρήστη και θα συνδεθεί με το πληκτρολόγιο που δημιουργήσαμε νωρίτερα:

> απίστευτο ssh wordpress-instance

Εάν θέλετε να διαγράψετε την παρουσία WordPress, μπορείτε να εκτελέσετε απεριόριστη διαγραφή παρουσίας id = @ wordpress-instance. Μπορείτε να το κάνετε τώρα, καθώς θα δημιουργήσουμε μια πιο προηγμένη ανάπτυξη στην επόμενη πρόκληση.

Τρόπος χρήσης προτύπων Awless

Όλα τα βήματα σε αυτήν την πρόκληση μπορούν να περιγραφούν ως ακολουθία εντολών Awless, όπου τα αποτελέσματα προηγούμενων εντολών (για παράδειγμα, το αναγνωριστικό της πύλης Διαδικτύου) χρησιμοποιούνται ως είσοδοι σε επόμενες εντολές. Επειδή το Awless παρέχει ένα ενσωματωμένο σύστημα templating, θα μπορούσατε να ενσωματώσετε όλη την Πρόκληση 1 σε ένα πρότυπο και να το εκτελέσετε με:

> απροσδόκητη εκτέλεση //raw.githubusercontent.com/wallix/awless-templates/bcd0dd41b1524eeac1e53d12b2998bc56689c517/simple_wordpress_infra.aws

Το Awless προσφέρει μια ισχυρή δυνατότητα που σας επιτρέπει να επαναφέρετε τις περισσότερες αλλαγές που εφαρμόζονται σε μια υποδομή AWS. Για παράδειγμα, μπορείτε να διαγράψετε ολόκληρη την υποδομή που δημιουργήθηκε από ένα πρότυπο σε μία μόνο εντολή: αν και επαναφορά επαναφοράς-αναγνωριστικού. Για να βρείτε ένα δεδομένο revert-id, απέραντο ημερολόγιο παραθέτει όλες τις εντολές που είχαν εφαρμοστεί προηγουμένως στην υποδομή cloud, τόσο με την έξοδο όσο και με το αναγνωριστικό τους:

> απροσδιόριστο ημερολόγιο # βρείτε το αναγνωριστικό για επαναφορά > χωρίς επαναφορά 01BM6D1YRZ5SSN5Z09VEEGN0HV

Πρόκληση 2: Χρησιμοποιήστε υπηρεσίες διαχειριζόμενης AWS

Η προηγούμενη ανάπτυξη μας είναι λειτουργική, αλλά αρκετά τεχνική. Το ιστολόγιό μας υποστηρίζεται από μία μόνο παρουσία σε μία ζώνη διαθεσιμότητας (AZ). Θέλουμε τώρα να δημιουργήσουμε ένα πολύ διαθέσιμο ιστολόγιο, με εξισορρόπηση φορτίου, δύο παρουσίες σε διαφορετικά AZ και μια αναπαράσταση βάσης δεδομένων που κοινοποιείται από τις παρουσίες μας. Αντί να τρέξουμε τη δική μας βάση δεδομένων σε μια περίπτωση, θα χρησιμοποιήσουμε το AWS RDS, τη διαχειριζόμενη υπηρεσία του Amazon για βάσεις δεδομένων SQL. Η χρήση μιας διαχειριζόμενης υπηρεσίας παρέχει πολλά πλεονεκτήματα, όπως ομαδοποίηση, διαχειριζόμενη ασφάλεια και αντίγραφα ασφαλείας.

Γουόλιξ

Προκειμένου να έχουμε πολύ διαθέσιμους πόρους, πρέπει να τα διανείμουμε σε υποδίκτυα σε διαφορετικές ζώνες διαθεσιμότητας (AZ) και να εξισορροπήσουμε το φορτίο μέσω Elastic Load Balancing.

Γουόλιξ

Για αυτήν την πρόκληση, θα δημιουργήσουμε τα εξής:

  • Ένας εξισορροπητής φορτίου για τη διανομή του φορτίου μεταξύ των παρουσιών
  • Δύο δημόσια υποδίκτυα για σύνδεση με τον εξισορροπητή φορτίου που βλέπει στο Διαδίκτυο
  • Δύο ιδιωτικά υποδίκτυα σε διαφορετικά AZ (π.χ. us-east-1a, us-east-1e) για τη φιλοξενία των παρουσιών
  • Μια ομάδα αυτόματης κλιμάκωσης για τη διαχείριση της κλιμάκωσης των παρουσιών WordPress
  • Μία πύλη NAT σε ένα δημόσιο υποδίκτυο για την ενεργοποίηση εξερχόμενων κλήσεων για παροχή παρουσιών
  • Μία δημόσια σταθερή IP (Ελαστική IP) για την πύλη NAT
  • Ένα RDS για παρουσία MariaDB αναπαράγεται αυτόματα στα ιδιωτικά υποδίκτυα

Θα δημιουργήσουμε αυτήν την υποδομή εκτελώντας πρότυπα Awless. Το πρώτο πρότυπο δημιουργεί υποδίκτυα και δρομολόγηση. ο {τρύπα} Η σημειογραφία επιτρέπει στις παραμέτρους να γεμίζονται δυναμικά κατά την εκτέλεση του προτύπου. ο αναφορά $ Η σημειογραφία επιτρέπει τις αναφορές των δημιουργημένων πόρων.