Τα τελευταία χρόνια, η διαδικτυακή αποθήκευση έχει επικρατήσει, παρέχοντας αρχιτεκτονικές υψηλής κλιμάκωσης, ενισχυμένη ασφάλεια και ευρεία προσβασιμότητα στα δεδομένα. Μια από τις πιο δημοφιλείς υπηρεσίες αποθήκευσης είναι η υπηρεσία Simple Storage Service της Amazons, ευρέως γνωστή ως S3.
Το Amazon S3 είναι μια εξαιρετικά ισχυρή υπηρεσία στον πυρήνα των Amazon Web Services. Ωστόσο, εκτός του περιβάλλοντος παραγωγής, η S3 μπορεί να είναι δύσκολη στη χρήση. Περιλαμβάνει τη μεταβίβαση κλειδιών πρόσβασης, την παροχή λογαριασμών χρηστών και τη διατήρηση μιας αξιόπιστης σύνδεσης δικτύου - για να μην αναφέρουμε ότι κοστίζει χρήματα. ευτυχώς, υπάρχει ένα εργαλείο που βοηθά στην επίλυση αυτού του προβλήματος. Το FakeS3 είναι ένας ελαφρύς διακομιστής που προσομοιώνει τη συμπεριφορά του πραγματικού S3. Ανταποκρίνεται στις ίδιες κλήσεις στις οποίες ανταποκρίνεται το Amazon S3 και αποθηκεύει τα ανεβασμένα αρχεία στο τοπικό σας σύστημα αρχείων - δεν γίνονται αιτήσεις στην υπηρεσία της Amazon. Παρόλο που το gem δεν υποστηρίζει το πλήρες σύνολο των εντολών του S3, το API που έχει υλοποιηθεί είναι επαρκές για τις περισσότερες περιπτώσεις χρήσης εφαρμογών.
Σε αυτό το άρθρο θα παρουσιάσω την προσέγγιση της ενσωμάτωσης των AWS και FakeS3 με Paperclip - δημοφιλής βιβλιοθήκη επισύναψης αρχείων για την Active Record. Το Paperclip και το S3 σε συνδυασμό παρέχουν αποτελεσματικό σύστημα αποθήκευσης αρχείων που συνδυάζει τα χρήσιμα βασικά χαρακτηριστικά του Paperclip (όπως η διαχείριση επικυρώσεων και οι μετασχηματισμοί εικόνων) με τα πλεονεκτήματα της online αποθήκευσης. Παρόλο που η διαμόρφωση αυτών των εργαλείων δεν είναι προφανής και απαιτεί το σκάψιμο στη λεπτομερή τεκμηρίωση καθώς και την επίλυση πολλών ειδικών για το gem ζητημάτων, αξίζει να αφιερώσετε λίγο χρόνο για να κάνετε την ανάπτυξη ταχύτερη και αποτελεσματικότερη.
Ποιος είναι ο στόχος μας;
Η ενσωμάτωση των περιγραφόμενων εργαλείων απαιτεί τρία βήματα:
Εκκίνηση του S3 fakeserver που παρέχεται από το πολύτιμο λίθο FakeS3 στο παρασκήνιο.
Ρύθμιση του πελάτη AWS S3 ώστε να αναθέτει όλα τα αιτήματα στον δρομολογημένο fakeserver.
Ρύθμιση του Paperclip για τη χρήση ψεύτικου τελικού σημείου S3 στις διευθύνσεις URL των ενσωματωμένων πόρων.
Εγκατάσταση
Ας ξεκινήσουμε με την εγκατάσταση των απαιτούμενων πολύτιμων λίθων:
Βεβαιωθείτε ότι έχετε εγκαταστήσει την έκδοση 1.6 του aws-sdk. Το Paperclip που χρησιμοποιεί το SKD για τη διαχείριση του αποθηκευτικού χώρου στην υπηρεσία της Amazon δεν λειτουργεί καλά με υψηλότερες εκδόσεις αυτού του πολύτιμου λίθου. Αυτό οφείλεται σε σημαντικές αλλαγές στο API του SDK που επέφερε η έκδοση 2.0.
Θυμηθείτε επίσης ότι ο κύριος στόχος του FakeS3 είναι η ελαχιστοποίηση των εξαρτήσεων κατά το χρόνο εκτέλεσης. Είναι περισσότερο ένα εργαλείο ανάπτυξης για να δοκιμάζετε τις κλήσεις S3 στο κωδικός παρά σε έναν διακομιστή παραγωγής που επιθυμεί να αντιγράψει τη λειτουργικότητα του S3. Επομένως, θα πρέπει να συμπεριλάβετε το gem μόνο στην ομάδα ανάπτυξης και δοκιμών.
Διαμόρφωση AWS
Το AWS SDK παρέχει μια ειδική βοηθητική μέθοδο που είναι υπεύθυνη για τη φόρτωση των ρυθμίσεων. Από προεπιλογή θα φορτώσει τη διαμόρφωση από την config/aws.yml, εξάγει τις παραμέτρους του για το τρέχον περιβάλλον και τις μεταβιβάζει στον πελάτη AWS. Πρώτον, καλέστε την ακόλουθη μέθοδο σε έναν αρχικοποιητή:
access_key_id, secret_access_key - Τα διαπιστευτήρια πελάτη AWS που απαιτούνται για να αποκτήσετε πρόσβαση στο λογαριασμό σας στην Amazon. Αγνοούνται από τον ψεύτικο διακομιστή S3 ως εκ τούτου, οι προσαρμοσμένες τιμές σε περιβάλλοντα sandbox.
s3_endpoint, s3_port- Προδιαγραφή τελικού σημείου S3. Χρησιμοποιούμε αυτές τις παραμέτρους για να αντικαταστήσουμε το πραγματικό τελικό σημείο S3 με ένα ψεύτικο τελικό σημείο που εκκινείται από το πολύτιμο λίθο FakeS3 - όλα τα αιτήματα προς την υπηρεσία της Amazon θα ανατίθενται τώρα στον τοπικό ψεύτικο διακομιστή.
s3_force_path_style - Το S3 δέχεται δύο μορφές συμπερίληψης του ονόματος του κάδου στη διεύθυνση URL. Μπορείτε να επιλέξετε να τοποθετηθεί το όνομα του κάδου σε στυλ τομέα (bucket.s3.amazonaws.com) ή σε στυλ διαδρομής (s3.amazonaws.com/bucket). Προκειμένου να διατηρήσετε τα πράγματα απλά και να αποφύγετε τις επιπλέον ρυθμίσεις που σχετίζονται με την αντιστοίχιση του subdomain του bucket σε διεύθυνση loopback προτιμώ το path-style από το domain-style σε περιβάλλον ανάπτυξης.
use_ssl - επιβάλλει στο AWS SDK να χρησιμοποιεί HTTPS αντί για vanilla HTTP. Πρέπει να απενεργοποιήσουμε αυτή την επιλογή, επειδή το FakeS3 gem δεν υποστηρίζει τα αιτήματα HTTPS που εκτελεί ο πελάτης AWS από προεπιλογή.
Η διαμόρφωση για το περιβάλλον παραγωγής είναι αρκετά απλή:
Αυτή τη φορά, όμως, έχουμε να κάνουμε με την πραγματική υπηρεσία S3, επομένως πρέπει να δώσετε αυθεντικά διαπιστευτήρια AWS.
Λόγω πιθανών κινδύνων ασφαλείας, είναι καλή πρακτική να κρατάτε μυστικές τιμές όπως τα κλειδιά πρόσβασης εκτός του συστήματος ελέγχου εκδόσεων, π.χ. χρησιμοποιώντας μεταβλητές περιβάλλοντος. Θα χρησιμοποιήσουμε το ERB για να εισάγουμε τις τιμές του στο αρχείο ρυθμίσεων.
Διαμόρφωση με συνδετήρα
Τώρα ήρθε η ώρα να αντιμετωπίσετε το Paperclip και να το αναγκάσετε να συνεργαστεί με τον ήδη ρυθμισμένο πελάτη S3. Ο κύριος στόχος της διαμόρφωσης του Paperclip είναι να αποκτήσει τη διαδρομή αποθήκευσης που θα εντοπίσει τους πόρους που φιλοξενούνται από τον fakeserver:
localhost:10001/:bucket_name/:path
Και πάλι, ας ξεκινήσουμε με το περιβάλλον ανάπτυξης:
αποθήκευση - καθορίζει τον φορέα αποθήκευσης (από προεπιλογή τοπικό σύστημα αρχείων). Εφόσον χρησιμοποιούμε το AWS S3 πρέπει να το αλλάξουμε σε :s3.
κουβάς - το όνομα του κάδου S3 που θα αποθηκεύει τα αρχεία σας. Εάν ο κάδος δεν υπάρχει, το Paperclip θα προσπαθήσει να τον δημιουργήσει.
url - σε :s3_alias_url θα αναγκάσει το Paperclip να δώσει ψευδώνυμο στο όνομα κεντρικού υπολογιστή του κάδου S3 με την τιμή που καθορίζεται από το :s3_host_alias παράμετρος.
s3_host_alias - ψευδώνυμο για τον προεπιλεγμένο κεντρικό υπολογιστή του κάδου S3. Σημειώστε ότι η τοποθέτηση του host, της θύρας και του ονόματος του κάδου αντιστοιχεί στη διαμόρφωση του πελάτη AWS.
διαδρομή - μοτίβο για τα κλειδιά κάτω από τα οποία θα αποθηκεύονται τα αρχεία στον κάδο. Τα κλειδιά θα πρέπει να είναι μοναδικά μέσα στον κάδο, όπως τα ονόματα αρχείων. Λόγω του γεγονότος ότι το S3 δεν υποστηρίζει καταλόγους, μπορείτε να χρησιμοποιήσετε ένα / σύμβολο για την προσομοίωση δομών καταλόγων.
Ομοίως με τα διαπιστευτήρια AWS, το όνομα κάδου θεωρείται επίσης μια μυστική τιμή η οποία θα πρέπει να αποθηκεύεται εκτός της βάσης του κώδικά σας. Συνιστώ την αποθήκευση του ονόματός του σε μεταβλητή περιβάλλοντος.
Τέλος, συγχωνεύστε τη διαμόρφωση στις προεπιλεγμένες επιλογές του Paperclip σε έναν αρχικοποιητή:
Και οι δύο διαμορφώσεις του AWS και του Paperclip περιέχουν μια αναφορά στον τοπικό S3 fakeserver που αναμένεται να εκτελείται κάτω από το όνομα localhost:10001. Πριν ξεκινήσετε την ανάπτυξη, θα πρέπει να εκκινήσετε τον διακομιστή με την ακόλουθη εντολή (παρέχεται από το FakeS3 gem):
fakes3 -r public/system -p 10001
Οι μεταβιβαζόμενες παράμετροι είναι:
root -r - ριζικός κατάλογος κάτω από τον οποίο θα αποθηκεύονται τα αρχεία που μεταφορτώνονται. Εξετάστε το ενδεχόμενο να το αποκλείσετε από το VCS αν δεν θέλετε να αποθηκεύονται τα αρχεία που μεταφορτώνονται στο αποθετήριο σας.
port -p - αριθμός της θύρας στην οποία θα εκτελεστεί ο τοπικός διακομιστής.
Αν χρησιμοποιείτε το Foreman για τη διαχείριση διεργασιών στην εφαρμογή σας, μπορεί να είναι βολικό να προσθέσετε την ακόλουθη καταχώρηση στο Procfile:
Αυτό θα σας εξοικονομήσει χρόνο που χάνετε για την εκκίνηση του fakeserver κάθε φορά που θα χρειαστεί να αναπτύξετε κάποια χαρακτηριστικά που σχετίζονται με το S3.
Συμπέρασμα
Διαμορφώσαμε τον πελάτη AWS να αναθέτει όλες τις αιτήσεις στον τοπικό ψεύτικο διακομιστή, ρυθμίσαμε το Paperclip να χρησιμοποιεί το ψεύτικο S3 endpoint στις διευθύνσεις URL των πόρων και ξεκινήσαμε τον ψεύτικο διακομιστή που παρέχεται από το Fake S3 gem αποθηκεύοντας όλα τα αρχεία στο τοπικό σύστημα αρχείων.
Ως αποτέλεσμα, ανεξαρτητοποιηθήκαμε από τη σύνδεση στο Διαδίκτυο και εξοικονομήσαμε χρήματα κάνοντας την ανάπτυξή μας ταχύτερη και πιο αξιόπιστη.