برنامه نویسی

ساخت کیت توسعه ابری (CDK)

کیت توسعه ابری (CDK) دقیقا چیست؟

تصور کنید توسعه‌دهنده‌ای هستید که باید مجموعه‌ای از منابع ابری را راه‌اندازی کنید. به طور سنتی، ممکن است با خطوط بی پایان پیکربندی های JSON یا YAML سر و کار داشته باشید. دقیق است اما می تواند بسیار خسته کننده باشد، درست است؟ خوب، اینجاست که کیت توسعه ابر یا CDK به کار می آید. به جای آن فایل های پیکربندی بی پایان، از یک زبان برنامه نویسی استفاده می کنید که از قبل با آن راحت هستید – مانند TypeScript، Python یا Java. این بدان معنی است که شما می توانید زیرساخت ابری خود را دقیقاً مانند هر چیز دیگری کدنویسی کنید.

چرا CDK یک تغییر دهنده بازی است؟

بیایید آن را تجزیه کنیم:

  1. بهره وری در استروئیدها: تعویض دنده بین برنامه ها و زیرساخت ها را فراموش کنید. اکنون، همه اینها در یک مکان است، با ابزارهایی که قبلاً دوست دارید (و درک می کنید!). تکمیل خودکار، refactoring و بررسی خطا در کنار شما هستند.

  2. استفاده مجدد و بازیافت: یک بار زیرساخت را بسازید، آن را در یک جزء بپیچید و در هر جایی که نیاز دارید دوباره از آن استفاده کنید. این نه تنها در زمان صرفه جویی می کند، بلکه تنظیمات شما را ثابت نگه می دارد.

  3. راه حل های سفارشی: تنظیمات اولیه را با ترفندهای خود گسترش دهید. به نوع خاصی از ذخیره سازی یا روش احراز هویت منحصر به فرد نیاز دارید؟ فقط آن را کد کنید

  4. شفاف و کنترل شده: همه اینها در پایگاه کد شما، قابل مشاهده و کنترل نسخه است. هر تغییری واضح و قابل ردیابی است – بدون تعجب.

AWS CDK

AWS یکی از اولین کسانی بود که با CDK خود از این گروه استفاده کرد. قدرت AWS CloudFormation را می گیرد و آن را دوستانه تر می کند. به جای این که در قالب های YAML یا JSON بگردید، به زبان برنامه نویسی راحت و رسا می نویسید.

در اینجا نمونه ای از AWS CDK با TypeScript آورده شده است:

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';

class MyCloudStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Setting up an S3 bucket with version control
    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true,
      removalPolicy: cdk.RemovalPolicy.DESTROY,
    });
  }
}

const app = new cdk.App();
new MyCloudStack(app, 'MyCloudStack');
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ببینید چگونه تعریف منابع ابری با CDK می تواند بصری و ساده باشد. درست مثل نوشتن هر نرم افزار دیگری است!

گردش کار AWS CDK توضیح داده شد

گردش کار AWS CDK

کیت توسعه ابری AWS (AWS CDK) از یک گردش کار پیچیده استفاده می کند که خدمات مختلف AWS را برای ارائه یک تجربه توسعه و استقرار یکپارچه یکپارچه می کند. در اینجا خلاصه ای از گردش کار معمولی و نحوه استفاده از این خدمات ارائه شده است:

  1. زیرساخت را به عنوان کد تعریف کنید: با تعریف منابع ابری خود با استفاده از زبان های برنامه نویسی آشنا مانند TypeScript یا Python شروع می کنید. این کد منابعی مانند پایگاه داده ها، سطل های ذخیره سازی یا نمونه های محاسباتی را مشخص می کند.

  2. سنتز: برنامه AWS CDK این کد سطح بالا را می گیرد و آن را در قالب CloudFormation سطح پایین کامپایل می کند. این فرآیند که به عنوان سنتز شناخته می شود، شامل CDK CLI (cdk synth) تنظیم دکلراتیو شما را به مجموعه‌ای از دستورالعمل‌ها تبدیل می‌کند که AWS CloudFormation می‌تواند آن را درک کند.

  3. گسترش: هنگامی که الگوی CloudFormation سنتز شد، آن را با استفاده از CDK CLI (cdk deploy). این دستور به AWS CloudFormation دستور می دهد تا منابع را همانطور که در قالب مشخص شده است تهیه و مدیریت کند.

  4. استفاده از خدمات AWS: در طول این فرآیند، AWS CDK با سرویس‌های مختلف AWS مانند AWS CodePipeline و AWS CodeCommit برای یکپارچه‌سازی و تحویل مداوم تعامل دارد و کارایی و استحکام خط لوله CI/CD را افزایش می‌دهد.

ساخت CDK

اکنون که فهمیدیم CDK چیست، بیایید به طراحی آن برای پلتفرم ابری نگاه کنیم. در اینجا، من بر روی tau تمرکز خواهم کرد، یک CDN PaaS منبع باز که من تأسیس کردم.

Tau از YAML برای تعریف منابع استفاده می کند. این رویکرد منحصر به فرد نیست. Kubernetes و بسیاری از پلتفرم های دیگر از YAML نیز استفاده می کنند. با این حال، چیزی که تاو را متمایز می کند، فلسفه طراحی آن است: Git تنها منبع حقیقت است. این بدان معناست که هیچ API برای تعیین منابعی مانند سطل های ذخیره سازی وجود ندارد. در عوض، همه چیز از طریق Git مدیریت می شود.

این طراحی سودمند است زیرا اساساً معادل AWS CloudFormation را در اختیار ما قرار می دهد، اما مستقیماً با Git یکپارچه شده است. این ادغام فشرده مدیریت زیرساخت را ساده می کند و آن را ذاتاً نسخه کنترل و مشارکتی می کند.

تنها کاری که باید انجام دهیم این است که راهی برای تولید و ویرایش فایل های YAML با کد پیدا کنیم.

بسته طرحواره

از آنجا که Tau یک پلتفرم ابری است که می‌توانید برای آن آزمایش بنویسید، ما قبلاً بسته‌ای به نام schema برای دستکاری فایل‌های پیکربندی YAML ساخته‌ایم. نکته مهم این است که باید در Go باشد، در حالی که اکثر CDK ها حداقل از JavaScript/TypeScript و Python پشتیبانی می کنند.

این یک چالش ایجاد می‌کند: چگونه می‌توانیم CDK خود را برای پشتیبانی از این زبان‌های محبوب در حالی که از بسته طرحواره موجود استفاده می‌کنیم، گسترش دهیم؟

WebAssembly

Go یکی از اولین زبان هایی است که از WebAssembly به عنوان یک هدف کامپایل پشتیبانی می کند. علاوه بر این، اکثر زبان های برنامه نویسی یا یک پیاده سازی بومی یا اتصالات برای زمان اجرا WebAssembly دارند.

بنابراین، اگر بسته طرحواره را در یک ماژول WebAssembly کامپایل کنیم، باید بتوانیم آن را از زبان های مختلف فراخوانی کنیم. این رویکرد از نقاط قوت Go و انعطاف پذیری WebAssembly استفاده می کند و امکان تعامل با تعاریف زیرساخت Tau از زبان هایی مانند جاوا اسکریپت، تایپ اسکریپت و پایتون را فراهم می کند.

افراط گرایی

نوشتن کد برای شروع زمان اجرا WebAssembly، بارگذاری ماژول ما و فراخوانی توابع صادر شده می تواند کار بسیار زیادی باشد. خوشبختانه، تیم dylibso در مورد آن فکر کرده و Extism را ساخته است، چارچوبی برای ساخت پلاگین ها با WebAssembly.

نمونه ای از افزونه Extism

در اینجا یک مثال ساده از یک افزونه Go با استفاده از Extism آورده شده است:

package main

import (
    "github.com/extism/go-pdk"
)

//export greet
func greet() int32 {
    input := pdk.Input()
    greeting := `Hello, ` + string(input) + `!`
    pdk.OutputString(greeting)
    return 0
}

func main() {}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در حال بارگیری و تماس greet از جاوا اسکریپت ساده است:

import createPlugin from '@extism/extism';

const plugin = await createPlugin('plugin.wasm', {
  useWasi: true,
});

const out = await plugin.call('greet', 'Samy');
console.log(out.text());

await plugin.close();
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با استفاده از Extism، می‌توانیم به راحتی کد Go خود را در WebAssembly کامپایل کنیم و آن را از زبان‌های دیگر مانند جاوا اسکریپت فراخوانی کنیم و فرآیند یکپارچه‌سازی را یکپارچه و کارآمد کنیم. این قابلیت پیچیدگی کار با WebAssembly را به میزان قابل توجهی کاهش می‌دهد و ما را قادر می‌سازد تا بدون دردسر قابلیت‌های CDK Tau را به محیط‌های برنامه‌نویسی مختلف گسترش دهیم.

پلاگین

این افزونه یک بسته بندی در اطراف بسته طرحواره است که از Extism PDK استفاده می کند. درست مانند طرح، اولین مرحله شامل باز کردن یک پروژه با خواندن پوشه ای است که حاوی فایل های پیکربندی است (پوشه همچنین می تواند خالی باشد).

در اینجا نحوه انجام این کار در Go آمده است:

package main

import (
    "github.com/extism/go-pdk"
    proj "github.com/taubyte/tau/pkg/schema/project"
)

var project proj.Project

//export openProject
func openProject() int32 {
    var err error
    project, err = proj.Open(proj.SystemFS("/mnt"))
    if err != nil {
        pdk.SetError(err)
        return 1
    }

    return 0
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ممکن است متوجه متغیر جهانی شوید project. این یک اشتباه تازه کار نیست:

  1. هر بار که پروژه ای را باز می کنیم، ماژول را بارگذاری می کنیم.
  2. WebAssembly حداقل در حال حاضر تک رشته ای است.

CDK جاوا اسکریپت

در سمت جاوا اسکریپت، ما داریم:

import createPlugin from '@extism/extism';
import * as path from 'path';

export async function core(mountPath: string): Promiseany> {
    const coreWasmPath = path.resolve(__dirname, '../core.wasm');

    return await createPlugin(
        coreWasmPath,
        {
            useWasi: true,
            allowedPaths: { '/mnt': mountPath },
        }
    );
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این تابع، core، ماژول را بارگذاری می کند و پوشه حاوی فایل های پیکربندی را به عنوان پیوست می کند /mnt.

برای باز کردن یک پروژه، ماژول Wasm را بارگذاری می کنیم، تماس بگیرید openProjectو سپس a را برگردانید Project شیئی که به نمونه ای از ماژول هسته اولیه به پروژه ما ارجاع می دهد.

export async function open(mountPath: string): PromiseProject> {
    const plugin = await core(mountPath);

    await plugin.call('openProject');

    return new Project(plugin);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از آنجا می توانیم کدی مانند این بنویسیم:

import open from '@taubyte/cdk';

const prj = await open('path/to/folder');
await prj.functions().new({
  name: 'ping',
  method: 'http',
  // other configurations
});

await prj.close();
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراحل بعدی

اکنون که CDK داریم، قدم بعدی ادغام آن با گردش کار CI/CD Tau است. این ادغام استقرار و مدیریت یکپارچه منابع ابری را مستقیماً از خط لوله توسعه شما امکان پذیر می کند. من این ادغام را در یک مقاله جداگانه پوشش خواهم داد، جایی که ما به جزئیات خودکارسازی استقرارهای شما خواهیم پرداخت.

نتیجه

در این مقاله، ما بررسی کردیم که کیت توسعه ابری (CDK) چیست و چرا یک تغییر دهنده بازی برای مدیریت زیرساخت ابری است. ما بررسی کردیم که چگونه AWS CDK تعریف و استقرار منابع ابری را با استفاده از زبان های برنامه نویسی آشنا ساده می کند.

با استفاده از WebAssembly و چارچوب Extism، ما توانستیم CDK همه کاره ای ایجاد کنیم که از چندین زبان پشتیبانی می کند و مدیریت زیرساخت tau را در دسترس تر و کارآمدتر می کند.

چشم انداز من این است که این امر به توسعه دهندگان اجازه می دهد تا تعاریف زیرساخت را مستقیماً در کد برنامه خود جاسازی کنند و یک تجربه توسعه یکپارچه و منسجم را ارائه دهند.

منتظر مقاله بعدی باشید، جایی که ما به ادغام CDK با گردش کار CI/CD tau خواهیم پرداخت.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا