[JavaScript, Node.JS, Amazon Web Services, ReactJS, Облачные сервисы] Serverless шагает по планете. Сравним SberCloud и AWS
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
оригинал
Мне с друзьями довелось поучаствовать в хакатоне
SberCloud.Advanced Hacking и пощупать облачные сервисы Сбера. На моем текущем месте работы я каждый день работаю с Serverless стеком от AWS (CloudFront + Lambda Edge + S3 + Lambda + Step Functions + Aurora PostgreSQL Serverless + DynamoDB + Cognito). Так что мне есть с чем сравнить. Если заинтересовались, то добро пожаловать под кат.
Недавно Сбер выкатил в публичный доступ свою облачную платформу SberCloud. К сожалению, сейчас, чтобы ей воспользоваться, нужно быть юридическим лицом. Представители Сбера говорят, что, возможно, доступ для физических лиц появится в следующем году. Но тем не менее, в рамках хакатона, я смог посмотреть, что там внутри, как обычный смертный. Что я там увидел? Огромное количество сервисов прям, как у AWS, на любой вкус https://sbercloud.ru/ru/products.
Меня прежде всего интересовал Serverless стек. Вообще, мало кто может похвастаться настоящими Serverless сервисами, у которых стоимость использования зависит только от реальной нагрузки. Сервером с платой за месяц уже ни кого не удивишь.
Я хотел собрать приложение аналогичное такому в AWS.
Вот что получилось на стеке SberCloud.
Я быстренько создал лямбду FunctionGraph.
Прикрутил к ней API Gateway. Настроил HTTP/HTTPS trigger.
Кстати, читать логи лямбды оказалось намного удобнее чем в AWS. Всё в одном месте. Ненужно прыгать по вкладкам и искать нужный Log Stream.
К сожалению, настоящей Serverless базы данных у SberCloud не нашлось. Пришлось взять сервис с фиксированной платой.
Настроил Environment variables от PostgreSQL пользователя у лямбды FunctionGraph.
Написал небольшой Serverless адаптер для работы с PostgreSQL базой из лямбды. Нужно аккуратно закрывать за собой соединения, а то они кончатся.
import { Client } from 'pg'
export const escapeId = (str: string): string => `"${String(str).replace(/(["])/gi, '$1$1')}"`
export const escapeStr = (str: string): string => `'${String(str).replace(/(['])/gi, '$1$1')}'`
export const executeStatement = async <T extends Record<string, any>>(
sql: string
): Promise<Array<T>> => {
const client = new Client()
await client.connect()
try {
const res = await client.query(sql)
return res.rows
} finally {
await client.end()
}
}
Настроил Object Storage Service.
Некое SDK для работы с SberCloud имеется, но чего-то полезного мне там найти не удалось.
Для загрузки картинок из браузера в Object Storage Service через подписанный URL код пришлось писать самому. Не самое приятное занятие угадывать сигнатуры и считать хеши руками.
async (req: Request, res: Response) => {
validateUserHandler(req, res)
const { authToken } = context
const { userId } = req.params
const uploadId = uuidV4()
const body = Buffer.from(
JSON.stringify({
auth: {
identity: {
methods: ['token'],
token: {
id: authToken,
'duration-seconds': '900',
},
},
},
}),
'utf8'
)
const options = {
hostname: 'iam.ru-moscow-1.hc.sbercloud.ru',
port: 443,
path: '/v3.0/OS-CREDENTIAL/securitytokens',
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf8',
'Content-Length': body.length,
},
}
const credentialBuffer: Buffer = await new Promise((resolve, reject) => {
const req = https.request(options, (res) => {
res.on('data', (data) => {
resolve(data)
})
res.on('error', (error) => {
reject(error)
})
})
req.write(body)
req.end()
})
const {
credential,
}: {
credential: { securitytoken: string; secret: string }
} = JSON.parse(credentialBuffer.toString('utf8'))
const { securitytoken, secret } = credential
const stringToSign = Buffer.from(
JSON.stringify({
expiration: '2020-12-31T12:00:00.000Z',
conditions: [
{ 'x-obs-acl': 'public-read' },
{ 'x-obs-security-token': securitytoken },
{ bucket: 'anti-cube-images' },
['starts-with', '$key', `${userId}/`],
],
}),
'utf8'
).toString('base64')
const hmac = crypto.createHmac('sha1', secret)
hmac.update(stringToSign)
const signature = hmac.digest('base64')
res.json({
uploadId,
signature,
})
}
В целом SberCloud мне понравился. Очень достойно. Не ожидал увидеть международный уровень облачных сервисов на российском рынке. Желаю Сберу обзавестись настоящей Serverless базой данных с платой только за использование. Лучше смотреть в этом плане в сторону CosmosDB от Azure или опенсорсного TiDB на своих серверах. У AWS сделано не особо грамотно, не копируйте у них.
Дополнительно про SberCloud можно посмотреть на YouTube:
- SberCloud Advanced Hacking. Вебинар по «Graph Engine Service»
- SberCloud Advanced Hacking. Вебинар по «API Gateway»
- SberCloud Advanced Hacking. Вебинар по «Function Graph»
- SberCloud.Advanced Hacking // Открытие хакатона
- SberCloud.Advanced Hacking // Воркшоп. Петр Предтеченский
- SberCloud.Advanced Hacking // Воркшоп. Павел Кутаков
Документация: https://docs.sbercloud.ru/
На хакатоне мы с ребятами делали изоморфное приложение на React+Redux. Презентация нашего проекта: https://docs.google.com/presentation/d/1LNjg2xfFHljTuH6ke_lkF6o1m9HTfemWcxW0w1OOssc/edit?usp=sharing
Извините, данный ресурс не поддреживается. :(
===========
Источник:
habr.com
===========
Похожие новости:
- [Настройка Linux, Open source, IT-инфраструктура, DevOps, Облачные сервисы] Ламповая self-hosted инфраструктура на Vultr
- [Google Cloud Platform, Облачные сервисы] Как мы случайно сожгли $72 000 за два часа в Google Cloud Platform и чуть не обанкротились (перевод)
- [JavaScript, ReactJS] Эпическая сага про маленький custom hook для React (генераторы, sagas, rxjs) часть 3
- [JavaScript, Программирование, Node.JS] Дино (Deno): Создать API для отдыха с помощью JWT (перевод)
- [Серверная оптимизация, Облачные вычисления, Сетевые технологии, Облачные сервисы] Облачный десант: как мы интегрировали публичное облако с CDN и что из этого получилось
- [JavaScript, ReactJS] Эпическая сага про маленький custom hook для React (генераторы, sagas, rxjs) часть 2
- [JavaScript, Программирование, TypeScript] Кастомизация компонентов Ant Design и оптимизация бандла
- [IT-инфраструктура, Amazon Web Services, DevOps, Облачные сервисы] AWS re:Invent 2020, Keynotes — Analytics + Networking
- [Python, JavaScript, Браузеры] Brython: заменяем JavaScript на Python на фронтенде (перевод)
- [JavaScript, ReactJS] Эпическая сага про маленький custom hook для React (генераторы, sagas, rxjs)
Теги для поиска: #_javascript, #_node.js, #_amazon_web_services, #_reactjs, #_oblachnye_servisy (Облачные сервисы), #_sbercloud.advanced_hacking, #_aws, #_serverless, #_react, #_redux, #_hackathon, #_javascript, #_node.js, #_amazon_web_services, #_reactjs, #_oblachnye_servisy (
Облачные сервисы
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:40
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
оригинал Мне с друзьями довелось поучаствовать в хакатоне SberCloud.Advanced Hacking и пощупать облачные сервисы Сбера. На моем текущем месте работы я каждый день работаю с Serverless стеком от AWS (CloudFront + Lambda Edge + S3 + Lambda + Step Functions + Aurora PostgreSQL Serverless + DynamoDB + Cognito). Так что мне есть с чем сравнить. Если заинтересовались, то добро пожаловать под кат. Недавно Сбер выкатил в публичный доступ свою облачную платформу SberCloud. К сожалению, сейчас, чтобы ей воспользоваться, нужно быть юридическим лицом. Представители Сбера говорят, что, возможно, доступ для физических лиц появится в следующем году. Но тем не менее, в рамках хакатона, я смог посмотреть, что там внутри, как обычный смертный. Что я там увидел? Огромное количество сервисов прям, как у AWS, на любой вкус https://sbercloud.ru/ru/products. Меня прежде всего интересовал Serverless стек. Вообще, мало кто может похвастаться настоящими Serverless сервисами, у которых стоимость использования зависит только от реальной нагрузки. Сервером с платой за месяц уже ни кого не удивишь. Я хотел собрать приложение аналогичное такому в AWS. Вот что получилось на стеке SberCloud. Я быстренько создал лямбду FunctionGraph. Прикрутил к ней API Gateway. Настроил HTTP/HTTPS trigger. Кстати, читать логи лямбды оказалось намного удобнее чем в AWS. Всё в одном месте. Ненужно прыгать по вкладкам и искать нужный Log Stream. К сожалению, настоящей Serverless базы данных у SberCloud не нашлось. Пришлось взять сервис с фиксированной платой. Настроил Environment variables от PostgreSQL пользователя у лямбды FunctionGraph. Написал небольшой Serverless адаптер для работы с PostgreSQL базой из лямбды. Нужно аккуратно закрывать за собой соединения, а то они кончатся. import { Client } from 'pg'
export const escapeId = (str: string): string => `"${String(str).replace(/(["])/gi, '$1$1')}"` export const escapeStr = (str: string): string => `'${String(str).replace(/(['])/gi, '$1$1')}'` export const executeStatement = async <T extends Record<string, any>>( sql: string ): Promise<Array<T>> => { const client = new Client() await client.connect() try { const res = await client.query(sql) return res.rows } finally { await client.end() } } Настроил Object Storage Service. Некое SDK для работы с SberCloud имеется, но чего-то полезного мне там найти не удалось. Для загрузки картинок из браузера в Object Storage Service через подписанный URL код пришлось писать самому. Не самое приятное занятие угадывать сигнатуры и считать хеши руками. async (req: Request, res: Response) => {
validateUserHandler(req, res) const { authToken } = context const { userId } = req.params const uploadId = uuidV4() const body = Buffer.from( JSON.stringify({ auth: { identity: { methods: ['token'], token: { id: authToken, 'duration-seconds': '900', }, }, }, }), 'utf8' ) const options = { hostname: 'iam.ru-moscow-1.hc.sbercloud.ru', port: 443, path: '/v3.0/OS-CREDENTIAL/securitytokens', method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf8', 'Content-Length': body.length, }, } const credentialBuffer: Buffer = await new Promise((resolve, reject) => { const req = https.request(options, (res) => { res.on('data', (data) => { resolve(data) }) res.on('error', (error) => { reject(error) }) }) req.write(body) req.end() }) const { credential, }: { credential: { securitytoken: string; secret: string } } = JSON.parse(credentialBuffer.toString('utf8')) const { securitytoken, secret } = credential const stringToSign = Buffer.from( JSON.stringify({ expiration: '2020-12-31T12:00:00.000Z', conditions: [ { 'x-obs-acl': 'public-read' }, { 'x-obs-security-token': securitytoken }, { bucket: 'anti-cube-images' }, ['starts-with', '$key', `${userId}/`], ], }), 'utf8' ).toString('base64') const hmac = crypto.createHmac('sha1', secret) hmac.update(stringToSign) const signature = hmac.digest('base64') res.json({ uploadId, signature, }) } В целом SberCloud мне понравился. Очень достойно. Не ожидал увидеть международный уровень облачных сервисов на российском рынке. Желаю Сберу обзавестись настоящей Serverless базой данных с платой только за использование. Лучше смотреть в этом плане в сторону CosmosDB от Azure или опенсорсного TiDB на своих серверах. У AWS сделано не особо грамотно, не копируйте у них. Дополнительно про SberCloud можно посмотреть на YouTube:
Документация: https://docs.sbercloud.ru/ На хакатоне мы с ребятами делали изоморфное приложение на React+Redux. Презентация нашего проекта: https://docs.google.com/presentation/d/1LNjg2xfFHljTuH6ke_lkF6o1m9HTfemWcxW0w1OOssc/edit?usp=sharing Извините, данный ресурс не поддреживается. :( =========== Источник: habr.com =========== Похожие новости:
Облачные сервисы ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:40
Часовой пояс: UTC + 5