Problem z konfiguracją Bucket'a na Amazon S3 do współpracy z prostą aplikacją na Heroku

Cześć,

Skończyłem niedawno czytać Rails Tutorial Hartl’a (3 edycja), ale mam mały problem, który nie daje mi spokoju.

Nie wiem co robię nie tak ale nie mogę poradzić sobie z konfiguracją bucketa na S3[1].

Z tego co wyczytałem w książce i dokumentacji AWS’a do tej pory to powinienem kolejno:

  1. Założyć konto na AWS
  2. Stworzyć grupę i podpiąć jej jakąś sensowną politykę, która da tej grupie dostęp Read/Write m.in. do pisania do kubełków na S3.
  3. Stworzyć użytkownika testowego, zapisać sobie jego access key id, secret access key, oraz podpiąć go do stworzonej w poprzednim punkcie grupy.
  4. Stworzyć kubełek, zapisać sobie region id i w zakładce Permissions > ACL przypiąć użytkownika w sekcji Access for other AWS accounts.
  5. Wprowadzić credentiale usera w konsoli na Heroku lub via CLI jako zmienne środowiskowe.
  6. Cieszyć się działającym uploadem w mojej aplikacji (po uprzednim skonfigurowaniu gema CarrierWave.

W praktyce jednak nie mogę przebrnąć przez punkt 4. Przy próbie podpięcia użytkownika w kółko dostaję komunikat “Invalid id”, pomimo, że próbowałem już różnych sposobów (user name, dwunastocyfrowy id, pełny arn). Skończyły mi mi się pomysły i nie wiem co dalej więc proszę o pomoc lub wskazanie właściwej drogi, może po prostu coś robię nie tak…

Przy okazji pytanie, czy znacie inny (tańszy, lepszy) sposób na hostowanie contentu wrzucanego do aplikacji przez usera, żeby np. mógł sam wrzucać zdjęcia do galerii? Chciałbym wykorzystać taki mechanizm w prostej stronce, którą piszę dla znajomego na boku po godzinach. Jedyne alternatywne rozwiązanie jakie mi przychodzi do głowy to wykupienie jakiegoś statycznego hostingu z dostępem po FTP, podpięcie jakiegoś gema do ftp w aplikacji i oprogramowanie sobie takiego uploadu na ten ftp.

[1] http://3rd-edition.railstutorial.org/book/user_microposts#sec-image_upload_in_production

Wydaje mi się, że powinieneś skorzystac z usługi EC2 lub Elastic BeanStalk, która opakowuje funkcjonalności EC2. Pamiętaj, że aby twoja railsowa aplikacja zaczęła w ogóle działac, musisz ją uruchomic w kontekście serwera http, co możesz zrobic korzystając właśnie z usługi EC2 (stawiasz instancję serwera np. z systemem Ubuntu, instalujesz pakiety, pobierasz aplikacje np. korzystając z GITa i uruchamiasz serwer).

Nie do końca rozumiem co to znaczy, skoro pytanie jest o S3?

Tutoriala nie czytalem, ale sprobuje pomoc

  • masz konto na AWS
  • tworzysz bucket
  • robisz uzytkownika w IAM, ktory ma dostep do S3 - jest gotowe uprawnienie do tego
  • temu uzytkownikowi generujesz klucz dostepowy
  • ten klucz przekazujesz do railsow via zmienne srodowiskowe i powinno smigac :slight_smile:

Jesli chodzi o EBT, EC2 nic nie musisz robic.

Heroku + S3 to nie jest megamilosc jak cos. Heroku ma ograniczenie dlugosci requestow na 30s i jesli twoj upload bedzie trwal dluzej beda z tym megaproblemy, ktore trzeba obrabiac kolejkami i innymi rzeczami.

Jesli fotografie beda duze FTP tez moze sie nie sprawdzic.

@Mlodszy_Programista Aplikacja jest już postawiona na Heroku. (Na razie) nie chcę jej przenosić gdzie indziej. Jedyne co chcę zrobić to trzymać zdjęcia wysyłane przez użytkowników na zewnętrznym zasobie jakim w tym wypadku jest Amazon Simple Storage Service.

@mrgoodkat Dzięki za odpowiedź i uwagi (zwłaszcza info o długich uploadach) :slight_smile: Napisałeś, że “jest gotowe uprawnienie do tego”, rozumiem, że masz na myśli podpięcie temu userowi polityki AmazonS3FullAccess? Trochę to dla mnie za dużo, bo chciałbym dać danemu userowi dostęp Read/Write tylko do jednego konkretnego bucket’a, ale spróbuję czy to w ogóle zadziała i dam znać.