9 aws s3 (Simple Storage Service )

Thank you for reading this post, don't forget to subscribe!

Рабо­та­ем с баке­том из при­ло­же­ния на ЕС2

 

нач­нём рабо­ту с Simple Storage Service с созда­ния кон­тей­не­ра для фай­лов - так назы­ва­е­мо­го баке­та. В рам­ках это­го зада­ния мы долж­ны создать бакет, куда мы смо­жем загру­жать фай­лы, доступ­ные для ска­чи­ва­ния кому угод­но, то есть пуб­лич­ное хранилище.

Для нача­ла перей­дём в служ­бу S3 и нажмём на Create Bucket. В пер­вом шаге надо вве­сти уни­каль­ное имя и выбрать регион:

Сни­ми­те гал­ку с чек­бок­са “Block all public access” - эти фай­лы долж­ны быть доступ­ны для ска­чи­ва­ния без авто­ри­за­ции. Под­твер­ди­те такой доступ гал­кой в окне пре­ду­пре­жде­ния внизу.

Вклю­чим вер­си­о­ни­ро­ва­ние, так что ста­рые вер­сии пере­за­пи­сан­ных фай­лов будут нам доступны:

Шиф­ро­ва­ние здесь нам не понадобится:

Закон­чим созда­ние баке­та. Изу­чи­те вклад­ки управ­ле­ния и загру­зи­те пару файлов.

Как буде­те гото­вы, давай­те про­дол­жим и настро­им пра­ви­ла для фай­лов (Lifecycle rules). Они настра­и­ва­ют­ся во вклад­ке Management. Созда­дим новое правило:

Вве­ди­те любое под­хо­дя­щее имя и задай­те область дей­ствия пра­ви­ла. В этом при­ме­ре я хочу задать пра­ви­ло для всех объ­ек­тов баке­та, посколь­ку он хра­нит одно­тип­ные объ­ек­ты с оди­на­ко­вой политикой:

Теперь выбе­ру настрой­ку “Transit previous versions of objects”, она поз­во­лит менять клас­сы хра­не­ния для про­шлых вер­сий файлов.

Такие вер­сии я буду счи­тать уста­рев­ши­ми и не под­ле­жа­щи­ми актив­но­му ска­чи­ва­нию. Поэто­му в раз­де­ле настрой­ки это­го пра­ви­ла ука­жу два сле­ду­ю­щих перехода:

  • Пере­ве­сти в One Zone-IA через 30 дней (мень­ше нельзя)
  • Пере­ве­сти в Glacier Deep Archive через 60 дней

Чуть ниже мож­но уви­деть дей­ству­ю­щие пра­ви­ла: спра­ва для акту­аль­но­го вер­сий фай­лов, сле­ва - для уста­рев­ших. Заметь­те, что эти настрой­ки име­ют смысл толь­ко при вклю­чен­ном версионировании.

Про­дол­жим настрой­ки пра­вил клас­сов хра­не­ния - теперь я хочу пере­клю­чить класс и для дей­ству­ю­щей вер­сии фай­ла: спу­стя два меся­ца после загруз­ки она долж­на ухо­дить в Infrequent Access (Под­ра­зу­ме­ва­ет­ся, что файл актив­но ска­чи­ва­ет­ся толь­ко пер­вые два меся­ца после загрузки)

Теперь Timeline Summary (свод­ка пра­вил) выгля­дит так:

Такой под­ход неплох, но име­ет оче­вид­ный недо­ста­ток: фай­лы будут хра­нить­ся веч­но, посто­ян­но тре­буя денег за хра­не­ние. Что­бы предот­вра­тить ненуж­ные рас­хо­ды, я хочу уда­лять ста­рые вер­сии через год после их устаревания.

Поста­вим ещё одну гал­ку, доба­вив пра­ви­ло для уда­ле­ния про­шлых вер­сий: “Permanently Delete previous versions”

И уста­но­вим отсроч­ку в 365 дней:

Про­ве­рим Timeline Summary:

 

 

Работаем с бакетом из приложения на ЕС2

Мало создать бакет, надо ещё и с ним пора­бо­тать, а для это­го при­дёт­ся соот­вет­ству­ю­щим обра­зом настро­ить без­опас­ность. Для выпол­не­ния это­го зада­ния нам потре­бу­ют­ся бакет S3 и инстанс EC2. Пожа­луй­ста, создай­те их сами, исполь­зуя сле­ду­ю­щие данные:

  • Бакет с отклю­чен­ным пуб­лич­ным доступом
  • Инстанс EC2: про­стой Amazon Linux 2 на базе T2.Micro вполне подойдёт.

Теперь надо создать роль, а зна­чит нуж­но пере­ло­ги­нить­ся - вы ведь не рабо­та­е­те под учёт­ной запи­сью рута? Захо­ди­те в root-акка­унт и пере­хо­ди­те в сер­вис IAM.

Во вклад­ке Roles таит­ся завет­ная кноп­ка Create Role. В нача­ле выбе­рем тип роли: AWS Service и под­клю­чим нуж­ный сер­вис (EC2).

В сле­ду­ю­щем шаге нуж­но при­со­еди­нить суще­ству­ю­щую поли­ти­ку или создать новую. Мы созда­дим новую:

В режи­ме созда­ния поли­ти­ки, выбе­ри­те вклад­ку JSON и добавь­те сле­ду­ю­щую политику:

Изу­чи­те этот файл. Не забудь­те поме­нять BUCKETNAME на имя ваше­го бакета!

Затем нам при­дёт­ся назвать эту поли­ти­ку и сохра­нить её:

Теперь надо вер­нуть­ся на вклад­ку созда­ния роли и обно­вить спи­сок поли­тик - наша новая будет уже там. Для про­сто­ты поис­ка мож­но ука­зать назва­ние поли­ти­ки в поиске:

В завер­ше­нии про­цес­са, нуж­но ука­зать имя роли:

Теперь под­клю­чим­ся к наше­му инстан­су. Исполь­зуй­те EC2 Connect или SSH, для дан­но­го упраж­не­ния это не име­ет значения.

Попро­бу­ем про­смот­реть спи­сок фай­лов в баке­те при помо­щи коман­ды aws s3 ls s3://BUCKETNAME

Сей­час это невоз­мож­но, посколь­ку AWS Cli не настро­ен, и этот инстанс не смо­жет исполь­зо­вать наш бакет. Вер­нём­ся к спис­ку инстан­сов, выбе­рем наш и изме­ним IAM роль: Actions -> Security -> Modify IAM Role.

В корот­ком спис­ке допу­сти­мых ролей выбе­рем новую роль:

И повто­рим про­шлый запрос, в ответ ниче­го не дол­жен выдать:

aws s3 ls s3://BUCKETNAME

Гото­во.  Теперь попро­буй­те загру­зить любой файл при помо­щи коман­ды copy и про­ве­рить его нали­чие преды­ду­щей командой.

aws s3 cp FILE s3://BUCKET