Цей блог надає покроковий приклад коду, як створити сховище для зберігання ваших файлів в хмарі за допомогою Eyevinn Open Source Cloud та MinIO.
Open Source Cloud пропонує оновлену альтернативу, яка не залежить від постачальників, оскільки послуги базуються на відкритому коді.
– Безкоштовний тариф із 50 ГБ пам'яті
– Повністю сумісний з популярними інструментами, такими як AWS S3
– Не потребує складної налаштування чи великих технічних знань
– Підтримує медіа, зображення, документи та інше
Дотримуйтесь цього покрокового керівництва, щоб почати.
Крок 1: Реєстрація та налаштування
Створіть безкоштовний обліковий запис на https://app.osaas.io та створіть свого орендаря. Якщо у вас вже є доступ до Eyevinn Open Source Cloud, можете пропустити цей крок.
Отримайте особистий токен доступу, перейшовши в Налаштування / API у веб-консолі. Збережіть це значення в змінній середовища під назвою OSC_ACCESS_TOKEN
:
% export OSC_ACCESS_TOKEN=
Встановіть SDK Eyevinn Open Source Cloud для Typescript.
% npm install --save @osaas/client-core
% npm install --save @osaas/client-services
Встановіть клієнт AWS S3 (це не вимагає наявності облікового запису AWS).
% npm install --save @aws-sdk/client-s3
Встановіть клієнт MinIO
% npm install --save minio
Крок 2: Напишіть приклад головної функції
Тепер ми готові почати написання функції для створення бакету зберігання в Eyevinn Open Source Cloud. Почнемо з головної функції, яка включатиме створення сховища та як приклад використаємо клієнт AWS S3 для переліку бакетів у нашому сховищі.
import { Context } from '@osaas/client-core';
import { S3Client, ListBucketsCommand } from '@aws-sdk/client-s3';
async function main() {
const ctx = new Context();
const storage = await createStorageBucketInEyevinnOSC('mybucket', ctx);
const client = new S3Client({
endpoint: storage.endpoint,
credentials: {
accessKeyId: storage.accessKeyId,
secretAccessKey: storage.secretAccessKey
}
});
const command = new ListBucketsCommand({});
const data = await client.send(command);
console.log(data.Buckets?.map((b: any) => b.Name));
}
Крок 3: Напишіть функцію для створення бакету зберігання
Тепер розробимо функцію, яка створюватиме бакет зберігання в Eyevinn Open Source Cloud.
import * as Minio from 'minio';
import { Context, getInstance, waitForInstanceReady } from '@osaas/client-core';
import {
MinioMinio,
MinioMinioConfig,
createMinioMinioInstance
} from '@osaas/client-services';
async function createStorageBucketInEyevinnOSC(name: string, ctx: Context) {
// Створення токену доступу для MinIO сервісу
// і перевірка, чи вже працює інстанція
const sat = await ctx.getServiceAccessToken('minio-minio');
let instance: MinioMinio = await getInstance(ctx, 'minio-minio', name, sat);
if (!instance) {
// Якщо інстанція не знайдена, давайте створимо нову.
// Генерація випадкового пароля для доступу до сховища
// і створення інстанції
const rootPassword = randomBytes(16).toString('hex');
const config: MinioMinioConfig = {
name,
RootUser: 'root',
RootPassword: rootPassword
};
const newInstance = await createMinioMinioInstance(ctx, config);
instance = newInstance;
// Чекаємо на готовність інстанції та даємо ще 2 секунди
// для впевненості.
await waitForInstanceReady('minio-minio', name, ctx);
await delay(2000);
// Використовуємо клієнт MinIO SDK для створення бакету та налаштування публічної
// політики бакету
const minioClient = new Minio.Client({
endPoint: new URL(instance.url).hostname,
accessKey: 'root',
secretKey: instance.RootPassword || ''
});
await minioClient.makeBucket(name);
await minioClient.setBucketPolicy(
name,
JSON.stringify(createPublicBucketPolicy(name))
);
}
return {
name: instance.name,
endpoint: instance.url,
accessKeyId: 'root',
secretAccessKey: instance.RootPassword || ''
};
}
Політика бакету, яку ми використовуємо в цьому прикладі, дозволяє публічний та анонімний доступ до цього бакету.
function createPublicBucketPolicy(name: string) {
return {
Statement: [
{
Action: ['s3:GetBucketLocation', 's3:ListBucket'],
Effect: 'Allow',
Principal: {
AWS: ['*']
},
Resource: [`arn:aws:s3:::${name}`]
},
{
Action: ['s3:GetObject'],
Effect: 'Allow',
Principal: {
AWS: ['*']
},
Resource: [`arn:aws:s3:::${name}/*`]
}
],
Version: '2012-10-17'
};
}
Крок 4: Завантаження файлу в бакет
Щоб завантажити файл у цей бакет, ми можемо використовувати клієнт AWS S3.
% export AWS_ACCESS_KEY_ID=root AWS_SECRET_ACCESS_KEY=
% aws s3 \
--endpoint https://eyevinnlab-mybucket.minio-minio.auto.prod.osaas.io \
cp pod-sprint24.m4a s3://mybucket/
upload: ./pod-sprint24.m4a to s3://mybucket/pod-sprint24.m4a
Ендпоінт — це storage.endpoint
, тобто URL до інстанції MinIO, яку ми створили.
Оскільки це було створено з публічним доступом, ми можемо отримати доступ до цих файлів безпосередньо через веб-браузер, використовуючи URL: https://eyevinnlab-mybucket.minio-minio.auto.prod.osaas.io/mybucket/pod-sprint24.m4a
Підсумок
В цьому блозі ми показали приклад того, як легко ви можете увімкнути зберігання для вашого додатку за допомогою відкритого веб-сервісу, доступного в Eyevinn Open Source Cloud. Головною перевагою використання послуги на основі відкритого коду є те, що ви не залежите від конкретного постачальника, а також маєте можливість запускати той самий код на вашій власній інфраструктурі або в хмарі.
Перекладено з: Creating a Cloud Storage Bucket based on Open Source with Typescript