Amazon S3 on äärmiselt võimas teenus, mis on Amazon Web Services'i keskmes. Kuid väljaspool tootmiskeskkonda võib S3-ga töötamine olla keeruline. See hõlmab juurdepääsu võtmete edasiandmist, kasutajakontode loomist ja usaldusväärse võrguühenduse säilitamist - rääkimata sellest, et see maksab raha. õnneks on olemas tööriist, mis aitab seda probleemi lahendada. FakeS3 on kerge server, mis simuleerib tõelise S3-i käitumist. See vastab samadele kõnedele, millele Amazon S3 vastab, ja salvestab üleslaetud failid teie kohalikku failisüsteemi - Amazon'i teenusele ei tehta ühtegi päringut. Kuigi gem ei toeta kõiki S3-i käske, on rakendatud API piisav enamiku rakenduste kasutusjuhtumite jaoks.

Selles artiklis tutvustan lähenemist, kuidas integreerida AWS ja FakeS3 koos Paperclipiga - populaarne faili manuste raamatukogu Active Record'i jaoks. Paperclip ja S3 koos pakuvad tõhusat failihoiusüsteemi, mis ühendab kasulikke Paperclip'i põhifunktsioone (nagu valideerimiste haldamine ja pilditransformatsioonid) veebipõhise salvestamise eelistega. Kuigi nende tööriistade konfigureerimine ei ole ilmselge ja nõuab üksikasjalikku dokumentatsiooni kaevamist ning paljude pärli-spetsiifiliste probleemide lahendamist, tasub kulutada veidi aega, et muuta arendus kiiremaks ja tõhusamaks.
Mis on meie eesmärk?
Kirjeldatud vahendite integreerimine nõuab kolme etappi:
- FakeS3 gemi poolt pakutava S3 võltsserveri käivitamine taustal.
- AWS S3 kliendi konfigureerimine, et delegeerida kõik päringud käivitatud võltsserverile.
- Paperclip'i konfigureerimine, et kasutada võltsitud S3-päätepunkti ehitatud ressursi URL-ides.
Paigaldamine
Alustame vajalike pärlite paigaldamisega:
# Gemfile
gem "paberklamber"
gem "aws-sdk", "~> 1.6"
gem "fakes3", group: [:development, :test]
Veenduge, et installite aws-sdk versiooni 1.6. Paperclip, mis kasutab SKD-d Amazoni teenuse salvestusruumi haldamiseks, ei tööta hästi selle pärli kõrgemate versioonidega. Selle põhjuseks on olulised muudatused SDK API-s, mis toodi versiooniga 2.0.
Pidage ka meeles, et FakeS3 peamine eesmärk on minimeerida sõltuvusi tööajast. See on pigem arendusvahend, et testida S3-kõnesid oma kood pigem kui tootmisserver, mis soovib dubleerida S3-funktsioone. Seetõttu peaksite lisama gemi ainult arendus- ja testrühma.
AWS konfiguratsioon
AWS SDK pakub spetsiaalset abimeetodit, mis vastutab konfiguratsiooni laadimise eest. See laadib vaikimisi konfiguratsiooni aadressilt config/aws.yml
, ekstraheerib selle parameetrid praeguse keskkonna jaoks ja edastab need AWS kliendile. Kõigepealt kutsuge järgmist meetodit initsialiseerijas:
# config/initializers/aws.rb config/initializers/aws.rb
AWS::Rails.load_yaml_config
Nüüd, kui meil on konfiguratsioonifail korralikult laetud, saame jätkata selle sisu määramisega:
# config/aws.yml
development: &development
access_key_id: "abc"
secret_access_key: "abc"
s3_endpoint: "localhost"
s3_port: 10001
s3_force_path_style: true
use_ssl: false
test: *development
Käsitleme kõiki parameetreid ükshaaval:
access_key_id, secret_access_key
- AWSi kliendi volitused, mis on vajalikud teie Amazoni kontole juurdepääsu saamiseks. Neid ignoreeritakse võlts S3 server seega kohandatud väärtused liivakasti keskkondades.s3_endpoint, s3_port
- S3 lõpp-punkti spetsifikatsioon. Kasutame neid parameetreid, et asendada reaalne S3-päätepunkt võltsitud lõpp-punktiga, mille käivitab pärl FakeS3 - kõik päringud Amazoni teenusele delegeeritakse nüüd kohalikule võltsserverile.s3_force_path_style
- S3 aktsepteerib kahte stiili, et lisada ämbri nimi URL-i. Saate valida, kas ämbri nimi paigutatakse domeeni stiilis (bucket.s3.amazonaws.com) või tee stiilis (s3.amazonaws.com/bucket). Selleks, et hoida asjad lihtsad ja vältida ämbri alamdomeeni ja tagasipöördumise aadressi kaardistamisega seotud lisakonfiguratsiooni, eelistan arenduskeskkonnas domeeni stiili asemel tee-stiili.use_ssl
- sunnib AWS SDK-d kasutama HTTPS-i vanilla HTTP asemel. Meil on vaja see valik välja lülitada, sest FakeS3 gem ei toeta HTTPS päringuid, mida AWS klient vaikimisi täidab.
Tootmiskeskkonna seadistamine on üsna lihtne:
# config/aws.yml
production: &production
access_key_id:
secret_access_key:
staging: *production
Seekord on aga tegemist tõelise S3-teenusega, mistõttu peate esitama autentsed AWS-i volitused.
Võimalike turvariskide tõttu on hea tava hoida salajased väärtused, nagu näiteks juurdepääsu võtmed, versioonihaldussüsteemist eemal, näiteks kasutades keskkonnamuutujaid. Me kasutame ERB-i, et süstida selle väärtused konfiguratsioonifaili.
Kirjaklambrite konfiguratsioon
Nüüd on aeg Paperclipiga silmitsi seista ja sundida seda juba konfigureeritud S3-kliendiga kenasti töötama. Paperclip'i konfigureerimise peamine eesmärk on saada salvestusruumi tee, mis leiab fakeserveri poolt majutatud ressursid:
localhost:10001/:bucket_name/:path
Alustame jälle arenduskeskkonnast:
# config/paperclip.yml
development: &development
ladustamine: :s3
bucket: "development"
s3_host_name: "localhost"
url: ":s3_alias_url"
path: "id_partition/:style/:failinimi.:extension"
s3_host_alias: "localhost:10001/development"
test: *development
ladustamine
- määrab salvestuskandja (vaikimisi kohalik failisüsteem). Kuna me kasutame AWS S3-i, siis peame selle muutma järgmiselt:s3
.ämber
- selle S3-ämbri nimi, kus teie faile hoitakse. Kui ämbrit ei ole olemas, püüab Paperclip selle luua.url
- seatud:s3_alias_url
paneb Paperclip'i tegema S3 ämbri hostinimele aliase väärtusega, mis on määratud väärtusega:s3_host_alias
parameeter.s3_host_alias
- vaikimisi S3-ämbri host'i alias. Pange tähele, et host, port ja ämbri nimi vastavad AWS-i kliendi konfiguratsioonile.tee
- muster võtmete jaoks, mille all failid salvestatakse ämbrisse. Võtmed peaksid olema korvi sees unikaalsed, nagu failinimed. Kuna S3 ei toeta katalooge, saate kasutada kataloogi/
sümbol kataloogistruktuuride simuleerimiseks.
# config/paperclip.yml
production: &production
ladustamine: :s3
bucket:
url: ":s3_domain_url"
path: ".:class/:attachment/:id_partition/:style/:filename.:extension"
staging: *production
Sarnaselt AWS-i mandaatidele peetakse ka bucket'i nime salajaks väärtuseks, mida tuleks hoida väljaspool teie koodibaasi. Soovitan selle nime salvestada keskkonnamuutujasse.
Lõpuks ühendage konfiguratsioon Paperclip'i vaikimisi valikutesse initsialiseerijas:
# config/initializers/paperclip.rb config/initializers/paperclip.rb
paperclip_defaults = Rails.application.config_for :paperclip
paperclip_defaults.symbolize_keys!
Paperclip::Attachment.default_options.merge! paperclip_defaults
Käivitatud võltsingud3
Nii AWS-i kui ka Paperclip'i konfiguratsioonid sisaldavad viidet kohalikule S3 võltsserverile, mida eeldatavasti käivitatakse all localhost:10001
. Enne arendustegevuses töötamist peaksite käivitama serveri järgmise käsuga (mida pakub FakeS3 gem):
fakes3 -r public/system -p 10001
Edastatud parameetrid on järgmised:
root -r
- juurkataloog, mille alla üleslaaditud failid salvestatakse. Kaaluge selle väljajätmist VCS-st, kui te ei soovi, et teie repositooriumis hoitakse üleslaetud faile.port -p
- selle pordi number, millel kohalik server töötab.
Kui kasutate oma rakenduses Foremani protsesside haldamiseks, võib olla mugav lisada Procfile'ile järgmine kirje:
# Procfile
fakes3: fakes3 -r ${FAKES3_STORAGE_PATH:-public/system} -p ${FAKES3_PORT:-10001}
See aitab säästa aega, mis kulub fakeserveri käivitamisele iga kord, kui teil on vaja arendada mõningaid S3-ga seotud funktsioone.
Kokkuvõte
Oleme seadistanud AWS-i kliendi delegeerima kõik päringud kohalikule võltsserverile, seadistanud Paperclip'i kasutama võlts S3-päätepunkti ehitatud ressursi URL-ides ja käivitanud võlts S3 gemi poolt pakutava võltsserveri, mis salvestab kõik failid kohalikus failisüsteemis.
Selle tulemusel muutusime sõltumatuks internetiühendusest ja säästsime raha, muutes meie arendustegevuse kiiremaks ja usaldusväärsemaks.