V posledních několika letech se online úložiště stala hlavním proudem, který poskytuje vysoce škálovatelné architektury, lepší zabezpečení a širokou dostupnost dat. Jednou z nejoblíbenějších úložných služeb je služba Simple Storage Service společnosti Amazons, známá jako S3.
Amazon S3 je mimořádně výkonná služba, která je jádrem služby Amazon. Webové služby. Mimo produkční prostředí však může být práce s S3 náročná. Vyžaduje předávání přístupových klíčů, zajišťování uživatelských účtů a udržování spolehlivého síťového připojení - nemluvě o tom, že to stojí peníze.Naštěstí existuje nástroj, který tento problém pomáhá řešit. FakeS3 je odlehčený server, který simuluje chování skutečného S3. Reaguje na stejná volání, na jaká reaguje služba Amazon S3, a ukládá nahrané soubory do vašeho místního souborového systému - žádné požadavky na službu Amazonu. Přestože gem nepodporuje úplnou sadu příkazů S3, implementované rozhraní API je pro většinu případů použití aplikací dostačující.
V tomto článku představím přístup k integraci AWS a FakeS3 s Paperclip - populární knihovnou pro připojování souborů k Active Record. Paperclip a S3 dohromady poskytují efektivní systém ukládání souborů, který kombinuje užitečné základní funkce Paperclipu (jako je správa validací a transformace obrázků) s výhodami online úložiště. Ačkoli konfigurace těchto nástrojů není samozřejmá a vyžaduje prohrabání se podrobnou dokumentací i vyřešení mnoha problémů specifických pro drahokamy, stojí za to věnovat nějaký čas urychlení a zefektivnění vývoje.
Co je naším cílem?
Integrace popsaných nástrojů vyžaduje tři kroky:
Spuštění falešného serveru S3 poskytovaného drahokamem FakeS3 na pozadí.
Konfigurace klienta AWS S3 na delegování všech požadavků na spuštěný falešný server.
Konfigurace nástroje Paperclip tak, aby používal falešný koncový bod S3 v adresách URL vytvořených prostředků.
Ujistěte se, že je nainstalována verze 1.6 aws-sdk. Paperclip, který používá SKD pro správu úložiště ve službě Amazonu, nefunguje dobře s vyššími verzemi tohoto drahokamu. Důvodem jsou významné změny v rozhraní API SDK, které přinesla verze 2.0.
Nezapomeňte také, že hlavním cílem FakeS3 je minimalizovat závislosti za běhu. Jedná se spíše o vývojový nástroj, který slouží k testování volání S3 ve vašem kód spíše než produkční server, který chce duplikovat funkce S3. Proto byste měli gem zahrnout pouze do vývojové a testovací skupiny.
Konfigurace AWS
AWS SDK poskytuje speciální pomocnou metodu pro načítání konfigurace. Ve výchozím nastavení načte konfiguraci z config/aws.yml, extrahovat jeho parametry pro aktuální prostředí a předat je klientovi AWS. Nejprve zavolejte následující metodu v inicializátoru:
access_key_id, secret_access_key - Pověření klienta AWS potřebná k získání přístupu k účtu Amazon. Falešný server S3 je ignoruje, proto jsou v prostředí sandboxu používány vlastní hodnoty.
s3_endpoint, s3_port- Specifikace koncového bodu S3. Pomocí těchto parametrů nahradíme skutečný koncový bod S3 falešným koncovým bodem spuštěným pomocí gemu FakeS3 - všechny požadavky na službu Amazonu budou nyní delegovány na místní falešný server.
s3_force_path_style - S3 akceptuje dva styly uvedení názvu kbelíku v adrese URL. Můžete si vybrat, zda chcete název kbelíku umístit ve stylu domény (bucket.s3.amazonaws.com), nebo ve stylu cesty (s3.amazonaws.com/bucket). Abychom zachovali jednoduchost a vyhnuli se další konfiguraci spojené s mapováním subdomény kbelíku na zpětnou adresu, dávám ve vývojovém prostředí přednost path-style před domain-style.
use_ssl - vynucuje, aby AWS SDK používala protokol HTTPS namísto běžného protokolu HTTP. Tuto možnost musíme zakázat, protože klenot FakeS3 nepodporuje požadavky HTTPS, které klient AWS provádí ve výchozím nastavení.
Konfigurace pro produkční prostředí je poměrně jednoduchá:
Tentokrát však máme co do činění se skutečnou službou S3, a proto je třeba zadat autentické pověření AWS.
Vzhledem k možným bezpečnostním rizikům je vhodné udržovat tajné hodnoty, jako jsou přístupové klíče, mimo systém správy verzí, např. pomocí proměnných prostředí. My použijeme ERB, abychom jeho hodnoty injektovali do konfiguračního souboru.
Konfigurace sponky
Nyní je čas postavit se Paperclipu čelem a přinutit ho, aby dobře spolupracoval s již nakonfigurovaným klientem S3. Hlavním cílem konfigurace Paperclipu je získat cestu k úložišti, která vyhledá prostředky hostované falešným serverem:
skladování - určuje nosič úložiště (ve výchozím nastavení místní souborový systém). Protože používáme AWS S3, musíme jej změnit na. :s3.
kbelík - název kyblíku S3, do kterého se budou ukládat soubory. Pokud kbelík neexistuje, Paperclip se jej pokusí vytvořit.
url - nastavit na :s3_alias_url způsobí, že Paperclip aliasuje název hostitele kyblíku S3 na hodnotu zadanou parametrem :s3_host_alias parametr.
s3_host_alias - alias pro výchozího hostitele kbelíku S3. Všimněte si, že umístění hostitele, portu a názvu kbelíku odpovídá konfiguraci klienta AWS.
cesta - vzor pro klíče, pod kterými budou soubory uloženy v kbelíku. Klíče by měly být v rámci kbelíku jedinečné, stejně jako názvy souborů. Vzhledem k tomu, že S3 nepodporuje adresáře, můžete použít tzv. / symbol pro simulaci adresářových struktur.
Podobně jako pověření AWS je i název kbelíku považován za tajnou hodnotu, která by měla být uložena mimo vaši kódovou základnu. Doporučuji ukládat jeho název do proměnné prostředí.
Nakonec sloučte konfiguraci do výchozích možností aplikace Paperclip v inicializátoru:
Konfigurace AWS i Paperclip obsahují odkaz na místní falešný server S3, který má běžet pod systémem localhost:10001. Před prací ve vývoji byste měli spustit server pomocí následujícího příkazu (poskytovaného gemem FakeS3):
fakes3 -r public/system -p 10001
Předávané parametry jsou:
root -r - kořenový adresář, do kterého budou nahrané soubory uloženy. Pokud nechcete, aby se nahrané soubory ukládaly do úložiště, zvažte jeho vyloučení z VCS.
port -p - číslo portu, na kterém bude spuštěn místní server.
Používáte-li v aplikaci Foreman pro správu procesů, může být vhodné přidat do souboru Procfile následující položku:
Ušetříte tak čas ztracený při spouštění falešného serveru pokaždé, když budete potřebovat vyvinout nějaké funkce související s S3.
Závěr
Nakonfigurovali jsme klienta AWS tak, aby všechny požadavky delegoval na místní falešný server, nastavili jsme Paperclip tak, aby v adresách URL vytvořených prostředků používal falešný koncový bod S3, a spustili jsme falešný server poskytnutý gemem Fake S3, který ukládá všechny soubory do místního souborového systému.
Díky tomu jsme se stali nezávislými na internetovém připojení a ušetřili jsme peníze, takže náš vývoj byl rychlejší a spolehlivější.