Храните и получайте файлы в S3

AWSBeginner
Практиковаться сейчас

Введение

Команде отчётности нужно сохранить ежедневный отчёт о продажах и получить его текущую копию. Вы создадите бакет S3, загрузите и обновите отчёт, проверите скачанный файл и удалите свои учебные ресурсы.

Сначала выполните работу Первые шаги с AWS на LabEx. Подключение CLI и report.txt подготовлены в этой новой VM; личный вход в AWS или прежние ресурсы не нужны. Используйте Terminal для команд и расположенную рядом вкладку AWS View для наблюдения за хранилищем этой работы.

Связь с сертификацией

Эта лабораторная работа помогает на практике изучить следующие темы экзаменов.

  • Cloud Practitioner (CLF-C02) · Задача 3.6: Объектное хранилище S3, загрузка, обновление и скачивание объектов.
  • Solutions Architect – Associate (SAA-C03) · Задача 3.1: Объектное хранилище S3, загрузка, обновление и скачивание объектов.
  • Developer – Associate (DVA-C02) · Задача 1.3: Объектное хранилище S3, загрузка, обновление и скачивание объектов.
  • Data Engineer – Associate (DEA-C01) · Задача 1.1: Базовая практика: Объектное хранилище S3, загрузка, обновление и скачивание объектов.

Создайте бакет хранилища

На этом шаге вы создадите бакет для ежедневного отчёта о продажах и увидите его в AWS View.

Перейдите в рабочий каталог. cd меняет текущий каталог терминала; все локальные файлы этой работы используют этот каталог.

cd /home/labex/project

Подтвердите подготовленную версию официального CLI:

aws --version

Вывод начинается с aws-cli/2.37.6. Образ уже предоставляет инструменты, поэтому вы можете сосредоточиться на операциях хранения.

Amazon S3 хранит содержимое файлов в виде объектов. Бакет содержит эти объекты, а ключ задаёт имя одного объекта внутри него. Сначала вы создадите контейнер, затем загрузите отчёт.

Создайте labex-backups. В aws s3 mb часть s3 выбирает объектное хранилище, а mb означает make bucket — создать бакет. Префикс s3:// указывает место в хранилище, а не локальную папку.

aws s3 mb s3://labex-backups

Ожидаемый вывод:

make_bucket: labex-backups

Выведите бакеты с помощью ls, что означает list — список:

aws s3 ls

Вы должны увидеть строку, заканчивающуюся на labex-backups; её дата и время могут отличаться. В представлении AWS View появляется карточка labex-backups без объектов. Стрелки показывают, как CLI связан с хранилищем; узел бакета отражает фактический запрос ресурса.

Загрузите и изучите отчёт

На этом шаге вы сохраните отчёт как объект S3 и прочитаете его фактическое сохранённое содержимое через предварительный просмотр.

Локальный файл и его сохранённая копия существуют отдельно; загрузка и скачивание связывают их.

Локальная и сохранённая копии

Изучите подготовленный локальный файл. cat выводит содержимое текстового файла:

cat report.txt

Ожидаемый вывод:

Daily sales: 120 orders

cp означает copy — копировать. Первый путь ниже — локальный источник, а второй — назначение. Часть после имени бакета, report.txt, является ключом объекта.

aws s3 cp report.txt s3://labex-backups/report.txt

Вывод сообщает о загрузке из report.txt в s3://labex-backups/report.txt.

Выведите объекты бакета:

aws s3 ls s3://labex-backups/

Строка для report.txt показывает время изменения, размер и ключ. Загрузка создаёт отдельную сохранённую копию: одно лишь редактирование локального файла не изменило бы её.

В AWS View карточка бакета показывает 1 объект. Нажмите report.txt в карточке, чтобы раскрыть содержимое. Предварительный просмотр должен показывать Daily sales: 120 orders. Он читает сохранённый объект, а не локальный исходный файл.

Пример ниже показывает загруженный отчёт, раскрытый в карточке бакета. Содержимое прочитано из хранилища.

Сохранённый отчёт и топология S3

Обновите и получите сохранённую копию

На этом шаге вы замените отчёт, скачаете текущую сохранённую версию и докажете, что содержимое сохранилось при передаче туда и обратно.

Обновлённый отчёт содержит 145 заказов. printf записывает текст; \n добавляет перевод строки. Оператор оболочки > заменяет содержимое указанного локального файла.

printf 'Daily sales: 145 orders\n' > report.txt

Посмотрите на предварительный просмотр отчёта перед повторной загрузкой. Он по-прежнему показывает 120 orders, поскольку сохранённая копия не изменилась.

Загрузите файл по тому же ключу, чтобы заменить его текущее содержимое:

aws s3 cp report.txt s3://labex-backups/report.txt

Теперь предварительный просмотр показывает 145 orders, а количество объектов остаётся 1. Повторное использование ключа обновляет этот объект; в этой работе оно не создаёт второй именованный объект.

Скачайте файл, поменяв направление cp: теперь путь S3 является источником, а downloaded.txt — новым локальным назначением.

aws s3 cp s3://labex-backups/report.txt downloaded.txt

Изучите скачанный файл:

cat downloaded.txt

Ожидаемый вывод:

Daily sales: 145 orders

cmp сравнивает два файла байт за байтом. Он ничего не выводит и завершается успешно, когда они одинаковы. && запускает следующую команду только при успешном сравнении.

cmp report.txt downloaded.txt && echo 'Round trip verified'

Ожидаемый вывод:

Round trip verified

Это сравнение доказывает, что полученное содержимое совпадает с обновлённым источником. Проверка шага независимо читает S3 и сравнивает сохранённое и скачанное содержимое.

Удалите своё хранилище

На этом шаге вы узнаете, почему нельзя удалить непустой бакет, затем удалите объекты и бакет этой работы.

rb означает remove bucket — удалить бакет. Сначала попробуйте удалить его, пока отчёт ещё существует:

aws s3 rb s3://labex-backups

Ожидается, что эта команда завершится ошибкой BucketNotEmpty. Ошибка показывает зависимость ресурсов: бакет содержит объекты, поэтому удалите объекты перед удалением их контейнера. Бакет и объект должны остаться видимыми в предварительном просмотре.

rm удаляет объект по точному пути S3:

aws s3 rm s3://labex-backups/report.txt

Вывод подтверждает delete: s3://labex-backups/report.txt. Объект исчезает из предварительного просмотра; бакет остаётся пустым.

Теперь удалите пустой бакет:

aws s3 rb s3://labex-backups

Ожидаемый вывод:

remove_bucket: labex-backups

Подтвердите, что сервис по-прежнему отвечает и не перечисляет оставшихся бакетов:

aws s3 ls

Команда завершается без строк бакетов. AWS View показывает No buckets без карточек ресурсов. Это состояние получено успешным запросом к сервису; отключённая страница не доказала бы очистку. Ваши локальные файлы отчётов остаются доступны, а ресурсы хранилища удалены.

Представление очистки ниже показывает отсутствие карточек бакетов после успешного запроса состояния.

Пустое хранилище после очистки

Резюме

Вы использовали официальный AWS CLI, чтобы создать бакет, загрузить и заменить объект, скачать его, сравнить содержимое файлов и удалить ресурсы хранилища. AWS View связал ваши команды с наблюдаемыми изменениями ресурсов, а предварительный просмотр показал фактическое сохранённое содержимое.

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