Створення хмарного сховища на основі відкритого коду за допомогою TypeScript

Цей блог надає покроковий приклад коду, як створити сховище для зберігання ваших файлів в хмарі за допомогою Eyevinn Open Source Cloud та MinIO.

pic

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

Leave a Reply

Your email address will not be published. Required fields are marked *