AWS SDK для JavaScript
AWS SDK для JavaScript
С помощью AWS SDK для Node.js вы создадите бакет, загрузите в него объекты, получите список объектов, извлечете отдельный объект, очистите содержимое бакета и удалите бакет.
Подготовка к работе
- Создайте сервисный аккаунт.
- Назначьте сервисному аккаунту роли, которые нужны для вашего проекта, например storage.editor на бакет — для работы с конкретным бакетом, или на каталог — для работы со всеми бакетами в каталоге. Подробнее о ролях см. на странице Управление доступом с помощью Yandex Identity and Access Management.
- Создайте статический ключ доступа.
Примечание
Сервисный аккаунт может просматривать список бакетов только в том каталоге, в котором он был создан.
Сервисный аккаунт может выполнять действия с объектами в бакетах, которые созданы в каталогах, отличных от каталога сервисного аккаунта. Для этого назначьте сервисному аккаунту роли на нужный каталог или бакет в нем.
Подготовка проекта
Подготовка аутентификационных данных
-
Создайте директорию для хранения аутентификационных данных и перейдите в нее:
Для macOS и Linux:
mkdir ~/.aws/
Для Windows:
mkdir C:\Users\<имя_пользователя>\.aws\
-
В директории
.aws
создайте файлcredentials
с аутентификационными данными для Object Storage и скопируйте в него следующую информацию:[default] aws_access_key_id = <идентификатор_статического_ключа> aws_secret_access_key = <секретный_ключ>
-
Создайте файл
config
с параметрами региона по умолчанию и скопируйте в него следующую информацию:[default] region = ru-central1 endpoint_url = https://storage.yandexcloud.net
Примечание
Некоторые приложения, предназначенные для работы с Amazon S3, не позволяют указывать регион, поэтому Object Storage принимает также значение
us-east-1
.
Для доступа к Object Storage используйте эндпоинт https://storage.yandexcloud.net
.
Подготовка директории проекта
-
Установите
Node.js. -
Создайте директорию, в которой будет находиться пример кода и перейдите в нее:
mkdir app cd app
-
Инициализируйте проект Node.js и установите библиотеку
aws-sdk/client-s3
командой:npm init -y && npm i @aws-sdk/client-s3
-
Чтобы указать, что в проекте будет использоваться синтаксис ESM (ECMAScript Moudules)
, добавьте в файл package.json строку"type": "module"
. В директории будет создан файлpackage.json
с базовыми настройками проекта на Node.js.Итоговый файл
package.json
должен иметь следующий вид:{ "name": "check", "version": "1.0.0", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { "@aws-sdk/client-s3": "^3.726.1" }, "type": "module" }
-
Создайте файл
index.js
, в котором будет размещаться код с использованием AWS SDK.
Примеры кода
Далее будут описаны способы выполнения базовых операций с бакетом с помощью AWS SDK для Node.js.
-
В файл
index.js
вставьте следующий код:import { readFileSync } from "node:fs" import { S3Client, PutObjectCommand, CreateBucketCommand, DeleteObjectCommand, DeleteBucketCommand, paginateListObjectsV2, GetObjectCommand, ListObjectsV2Command, } from "@aws-sdk/client-s3"; (async function () { // Создание s3 клиента для взаимодействия с aws. // Данные для авторизации берутся из вашего окружения, но вы можете указать их явно. Например: // `new S3Client({ region: 'ru-central1', credentials: {...} })` const s3Client = new S3Client({}); const bucketName = `test-bucket-${Date.now()}`; // Создать новый бакет console.log(`Creating the bucket ${bucketName}.`); await s3Client.send( new CreateBucketCommand({ Bucket: bucketName, }), ); console.log(`The bucket ${bucketName} was created.\n\n`); // Загрузить объекты в бакет // Из строки console.log('Creating a object from string.'); await s3Client.send( new PutObjectCommand({ Bucket: bucketName, Key: "bucket-text", Body: 'Hello bucket!', }), ); console.log('The object from string was created.\n'); // Из файлов console.log('Creating the first object from local file.'); await s3Client.send( new PutObjectCommand({ Bucket: bucketName, Key: "my-package.json", Body: readFileSync('package.json'), }), ); console.log('The first object was created.\nCreating the second object from local file.'); await s3Client.send( new PutObjectCommand({ Bucket: bucketName, Key: "my-package-lock.json", Body: readFileSync('package-lock.json'), }), ); console.log('The second object was created.\n'); // Получить список объектов console.log('Getting bucket objects list.'); const command = new ListObjectsV2Command({ Bucket: bucketName }); const { Contents } = await s3Client.send(command); const contentsList = Contents.map((c) => ` • ${c.Key}`).join("\n"); console.log("Here's a list of files in the bucket:"); console.log(`${contentsList}\n`); // Удалить несколько объектов console.log('Deleting objects.'); await s3Client.send( new DeleteObjectCommand({ Bucket: bucketName, Key: "my-package.json" }), ); await s3Client.send( new DeleteObjectCommand({ Bucket: bucketName, Key: "my-package-lock.json" }), ); console.log('The objects were deleted.\n'); // Получить объект console.log('Getting your "bucket-text" object') const { Body } = await s3Client.send( new GetObjectCommand({ Bucket: bucketName, Key: "bucket-text", }), ); console.log('Your "bucket-text" content:') console.log(await Body.transformToString(), '\n'); // Удаление объектов в бакетах и затем самого бакета // Получаем список объектов постранично const paginator = paginateListObjectsV2( { client: s3Client }, { Bucket: bucketName }, ); for await (const page of paginator) { const objects = page.Contents; if (objects) { // Выполняем команду удаления для каждого объекта через итерацию страниц с объектами for (const object of objects) { // Отправляем команду на удаление await s3Client.send( new DeleteObjectCommand({ Bucket: bucketName, Key: object.Key }), ); } } } // Удаляем ранее созданный бакет await s3Client.send(new DeleteBucketCommand({ Bucket: bucketName })); console.log('Your bucket was emptied and deleted.'); })()
В этом фрагменте кода мы добавили IIFE - Immediately Invoked Function Expression
. Это позволит вызвать скрипт при запуске файла. -
Запустите приложение:
node index.js
В выводе консоли появится пошаговое описание результатов операции.
Подробности о работе с AWS SDK для JavaScript см. в документации AWS