مقالات

Formae و PKL: انقلابی در اتوماسیون زیرساخت


من به عنوان یک مهندس و معمار اتوماسیون، سال ها از ابزارهای IaC مانند Terraform استفاده می کنم. من اخیراً شروع به تحقیق و یادگیری در مورد Pulumi کردم، یک پلتفرم زیرساخت به عنوان کد که به توسعه دهندگان و تیم ها اجازه می دهد منابع ابری را با استفاده از زبان های برنامه نویسی آشنا ایجاد، استقرار و مدیریت کنند. به عنوان بخشی از مطالعه آخر هفته‌ام، با اطلاعیه جدیدی در مورد یک پلتفرم منبع باز به نام Formae مواجه شدم. در این مقاله، بیایید در مورد Formae و نحوه استفاده از PKL، یک زبان پیکربندی به عنوان کد، بیاموزیم.

زیرساخت به عنوان کد، نحوه مدیریت منابع ابری را تغییر می‌دهد، اما چالش‌های اصلی همچنان باقی می‌مانند: خرابی فایل‌های حالت، پیچیدگی در تشخیص رانش، و فرآیند دردناک کدگذاری زیرساخت‌های موجود. Enter Formae، یک پلتفرم منبع باز که در اکتبر 2025 توسط Platform Engineering Labs راه اندازی شد که این قراردادها را با استفاده از زبان پیکربندی PKL اپل و معرفی یک رویکرد بدون حالت و کشف خودکار برای مدیریت زیرساخت به چالش می کشد.

درک PKL: بنیاد

PKL چیست؟

PKL (تلفظ “ترشی”) یک زبان برنامه نویسی پیکربندی است که توسط اپل ایجاد شد و در اوایل سال 2024 منبع باز شد. بر خلاف فرمت های ایستا مانند JSON یا YAML، PKL پیکربندی اعلانی را با بیان و ایمنی زبان های برنامه نویسی تایپ ایستا ترکیب می کند.

آن را بررسی کنید در مونتاژ راهنمای راه اندازی PKL در دستگاه شما.

نحو اصلی PKL

PKL از یک ساختار کلید-مقدار ساده برای پیکربندی‌های اولیه استفاده می‌کند:

// Basic PKL configuration
name = "Pkl: Configure your Systems in New Ways"
attendants = 100
isInteractive = true
amountLearned = 13.37

شما می توانید با استفاده از فرمت های خروجی مختلف تولید کنید -f گزینه:

pkl eval -f json config.pkl

خارج شوید:

{
  "name": "Pkl: Configure your Systems in New Ways",
  "attendants": 100,
  "isInteractive": true,
  "amountLearned": 13.37
}

چه چیزی PKL را منحصر به فرد می کند؟

PKL ماهیت اعلانی فرمت های داده ایستا را با بیان و ایمنی یک زبان برنامه نویسی تایپ ایستا ترکیب می کند. برخلاف YAML یا JSON که فاقد بیان و اعتبار هستند، PKL ارائه می دهد:

ایمنی و اعتبار سنجی را تایپ کنید

PKL دارای یک نوع غنی و سیستم اعتبار سنجی است که قبل از استقرار با استفاده از حاشیه نویسی نوع با محدودیت های تعریف شده که می تواند عبارات دلخواه را پوشش دهد، خطاهای پیکربندی را تشخیص می دهد.

module example.AppConfig

/// The hostname for the application
host: String

/// The port to listen on (must be > 1000)
port: UInt16(this > 1000)

/// Email address
email: String = "[email protected]"

اگر محدودیت ها را نقض کنید، PKL بلافاصله خطاها را می گیرد:

–– Pkl Error ––
Type constraint `this > 1000` violated.
Value: 80

قابلیت برنامه ریزی

PKL از کلاس‌ها، توابع، شرایط و حلقه‌ها پشتیبانی می‌کند—ویژگی‌هایی که از یک زبان برنامه‌نویسی انتظار دارید، اما به‌طور خاص برای مدیریت پیکربندی طراحی شده‌اند. PKL اشیای تغییرناپذیر را برای یک ساختار سلسله مراتبی با ویژگی ها، عناصر و رکوردها فراهم می کند:

// Properties: named values
bird {
  name = "Common wood pigeon"
  diet = "Seeds"
  taxonomy {
    species = "Columba palumbus"
  }
}

// Listings: arrays of elements
birds {
  "Pigeon"
  "Parrot"
  "Barn owl"
  "Falcon"
}

// Mappings: key-value pairs
habitats {
  ["Pigeon"] = "Streets"
  ["Parrot"] = "Parks"
  ["Barn owl"] = "Forests"
  ["Falcon"] = "Mountains"
}

خروجی چند فرمتی

PKL می‌تواند خروجی برای JSON، YAML، لیست‌های دارایی و سایر فرمت‌های پیکربندی تولید کند، که آن را برای زنجیره‌های ابزار موجود همه‌کاره می‌سازد.

تولید کد

PKL می تواند به طور خودکار کدهای پیکربندی را در زبان های برنامه نویسی محبوب از جمله جاوا، کاتلین، سوئیفت و Go تولید کند و پیوندهای ایمن برای برنامه های شما ایجاد کند.

پشتیبانی عالی از IDE

Pkl اعتبار سنجی بلادرنگ، دسترسی به اسناد و راهنمایی را از طریق پلاگین ها و برنامه های افزودنی برای IntelliJ، Visual Studio Code و Neovim ارائه می دهد.

فلسفه طراحی PKL

PKL بر اساس یک ساختار کلید-مقدار است که یک روش مستقیم و شهودی برای تعریف تنظیمات پیکربندی ارائه می‌کند و نه تنها از انواع داده‌های ساده بلکه از ساختارهای داده پیچیده نیز پشتیبانی می‌کند. این باعث می شود که در عین خوانایی، بسیار انعطاف پذیر باشد.

این زبان برای رسیدگی به یک مشکل خاص ایجاد شده است: فایل های پیکربندی که ساده شروع می شوند اما به طرز غیر قابل تحملی پیچیده می شوند. اپل PKL را طوری طراحی کرد که از طریق تشخیص خطاهای اعتبارسنجی قبل از استقرار، ایمن باشد، از موارد استفاده ساده تا پیچیده مقیاس بندی کند و نوشتن با بهترین ادغام های IDE در کلاس لذت بخش باشد.

گردش کار PKL

در زیر نحوه مدیریت پیکربندی‌ها از توسعه تا استقرار توسط PKL آمده است:

Formae: بازاندیشی زیرساخت به عنوان کد

Formae با یک فرض برجسته وارد فضای اتوماسیون زیرساخت می‌شود: فایل‌های حالت را حذف کنید، زیرساخت‌های موجود را به‌طور خودکار شناسایی و کدگذاری کنید، و کد زیرساخت را حفظ کنید که همیشه با واقعیت همگام باشد.

معماری پایه

Formae زیرساخت را به طور کامل به صورت کد پیاده سازی می کند و نیازی به فایل های حالت ندارد. این پلتفرم شامل کشف و کدگذاری خودکار زیرساخت‌های موجود، نگاشت هر منبع عملیاتی به ویژگی‌های ابری است، صرف نظر از اینکه این منابع در ابتدا چگونه ایجاد شده‌اند – چه از طریق Terraform، عملیات کنسول دستی یا اسکریپت‌های قدیمی. Formae از یک مدل همیشه روشن Agent + Metastructure استفاده می کند که محیط های زندگی را مشاهده، هماهنگ و کدگذاری می کند.

معماری فرم ها

معماری فرم ها

اصول اولیه

رمز به عنوان تنها منبع حقیقت

Formae زیرساخت خود را به طور کامل در کد، با هر گونه جزئیات، بدون نیاز به کاربران برای نگهداری مصنوعات ثانویه مانند فایل های حالت، پیاده سازی می کند. این اساساً با رویکرد Terraform متفاوت است، جایی که فایل های حالت به عنوان یک لایه مجزا بین پیکربندی شما و زیرساخت واقعی عمل می کنند.

شناسایی و کدگذاری خودکار

Formae خود را با کشف و کدگذاری خودکار زیرساخت‌های موجود، نگاشت هر منبع عملیاتی به ویژگی‌های ابری متمایز می‌کند، صرف نظر از اینکه این منابع در ابتدا چگونه ایجاد شده‌اند، چه از طریق Terraform، OpenTofu، Pulumi، عملیات کنسول ابری دستی یا اسکریپت‌های قدیمی.

ساخته شده برای همزیستی

شما نیازی به مهاجرت یا وارد کردن چیزی ندارید – Formae به طور خودکار منابع را کشف و به روز می کند و با خوشحالی با سایر ابزارهای IaC و مدیریت زیرساخت و حتی ClickOps همزیستی می کند.

مفهوم فراساختار

مفهوم فراساختار در معماری Formae، پیکربندی زیرساخت را با منطق عملیاتی ترکیب می‌کند و امکان نظارت در زمان واقعی، اعمال تغییرات ناهمزمان و هماهنگ‌سازی زیرساخت مداوم با کد را فراهم می‌کند. برخلاف ابزارهای سنتی IaC که فقط پیکربندی استاتیک را ذخیره می‌کنند، Metastructure هم از what (زیرساخت شما) و هم از چگونگی (عملیات مورد نیاز برای مدیریت آن) پشتیبانی می‌کند.

حالت های عملیاتی دوگانه

Formae در دو حالت متمایز اما مکمل عمل می کند: آشتی و اصلاح. حالت آشتی به تیم ها اجازه می دهد تا محیط مورد نظر خود را به عنوان “منبع حقیقت” نهایی در کد PKL تعریف کنند، با فرم هایی که از سازگاری محیط تولید کاری اطمینان می دهند. حالت Patch مهندسان را قادر می سازد تا حداقل تغییرات هدفمندی را که توسط فرم ها قبل از استقرار تأیید شده اند اعمال کنند.

این انعطاف پذیری برای سناریوهای عملیاتی مختلف اعمال می شود:

  • حالت آشتی: محیط مورد نظر را به عنوان “منبع حقیقت” نهایی در کد PKL تعریف کنید، با Formae که از انطباق تولید اطمینان حاصل می کند.
  • حالت تصحیح: حداقل تغییرات هدفمند تایید شده قبل از استقرار را برای به روز رسانی های جراحی کم خطر با حداقل شعاع ضربه اعمال کنید.

رویکردهای IaC سنتی در مقابل مدرن

نمودار زیر تفاوت اساسی بین رویکرد سنتی و رویکرد Formae را نشان می‌دهد:

Formae در مقابل Terraform

چشم انداز پلت فرم IaC

ماتریس مقایسه سریع

پلت فرم زبان مدیریت دولتی مجوز پشتیبانی از ابر
Terraform HCL فایل های حالت خارجی BSL (پست نسخه 1.5) چند ابری
OpenTofu HCL فایل های حالت خارجی MPL 2.0 چند ابری
فرم ها PKL بی تابعیت FSL چند ابری
پولومی Python، TS، Go، C# شرایط خارجی آپاچی 2.0 چند ابری
CloudFormation JSON، YAML مدیریت شده توسط AWS ثبت اختراع فقط AWS
عضله دوسر / بازو Biceps، JSON با مدیریت Azure ثبت اختراع فقط لاجوردی
Crossplane YAML (CRD) Kubernetes و بیشتر آپاچی 2.0 چند ابری

مقایسه کد: سنتی در مقابل Formae

رویکرد Terraform (HCL).

# Terraform requires explicit state configuration
terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "prod/terraform.tfstate"
    region = "us-east-1"
  }
}

provider "aws" {
  region = var.region
}

# Variable definitions
variable "environment" {
  type    = string
  default = "dev"
}

variable "vpc_cidr" {
  type    = string
  default = "10.0.0.0/16"
}

# VPC Resource
resource "aws_vpc" "main" {
  cidr_block           = var.vpc_cidr
  enable_dns_hostnames = true
  enable_dns_support   = true
  
  tags = {
    Name        = "main-vpc-${var.environment}"
    Environment = var.environment
  }
}

# Subnet Resource
resource "aws_subnet" "public" {
  vpc_id                  = aws_vpc.main.id
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "us-east-1a"
  map_public_ip_on_launch = true
  
  tags = {
    Name = "public-subnet-${var.environment}"
  }
}

# EC2 Instance
resource "aws_instance" "web" {
  ami           = var.ami_id
  instance_type = var.instance_type
  subnet_id     = aws_subnet.public.id
  
  tags = {
    Name = "web-server-${var.environment}"
  }
}

# Must manually import existing resources
# terraform import aws_vpc.main vpc-12345678
# terraform import aws_subnet.public subnet-abcdef12

گردش کار Terraform:

# Initialize and download providers
terraform init

# Plan changes (requires state file)
terraform plan

# Apply changes
terraform apply

# Detect drift manually
terraform plan -refresh-only

# If drift detected, must manually update code or force alignment

رویکرد Formae (PKL).

amends "@formae/forma.pkl"

// No state configuration needed - Formae is stateless
// Automatically discovers existing resources

import "@formae/formae.pkl"
import "@aws/aws.pkl"
import "@aws/ec2/vpc.pkl"
import "@aws/ec2/subnet.pkl"
import "@aws/ec2/instance.pkl"

properties {
  environment = new formae.Prop {
    flag = "env"
    default = "dev"
  }
  
  vpcCidr = new formae.Prop {
    flag = "vpc-cidr"
    default = "10.0.0.0/16"
  }
  
  instanceType = new formae.Prop {
    flag = "instance-type"
    default = "t3.micro"
  }
}

forma {
  new formae.Stack {
    label = "infrastructure"
    description = "Main infrastructure stack"
  }
  
  new formae.Target {
    label = "aws"
    config = new aws.Config {
      region = "us-east-1"
    }
  }
  
  // Resources created OR discovered automatically
  new vpc.VPC {
    label = "main-vpc"
    cidrBlock = properties.vpcCidr.value
    enableDnsHostnames = true
    enableDnsSupport = true
    tags {
      ["Name"] = "main-vpc-\(properties.environment.value)"
      ["Environment"] = properties.environment.value
    }
  }
  
  new subnet.Subnet {
    label = "public-subnet"
    vpcId = "@main-vpc.id"
    cidrBlock = "10.0.1.0/24"
    availabilityZone = "us-east-1a"
    mapPublicIpOnLaunch = true
    tags {
      ["Name"] = "public-subnet-\(properties.environment.value)"
    }
  }
  
  new instance.Instance {
    label = "web-server"
    ami = "ami-0c55b159cbfafe1f0"
    instanceType = properties.instanceType.value
    subnetId = "@public-subnet.id"
    tags {
      ["Name"] = "web-server-\(properties.environment.value)"
    }
  }
}

گردش کار Formae:

# Start agent (no initialization needed)
formae agent start

# Apply changes - automatically discovers existing resources
formae apply --mode reconcile infrastructure.pkl

# Drift is automatically detected and incorporated into code
# No manual intervention required

# Extract all existing infrastructure to code
formae extract --output discovered.pkl

نقاط قوت و ضعف پلت فرم

  • Terraform/OpenTofu: استاندارد صنعتی با اکوسیستم بالغ. نقاط قوت: فروشندگان گسترده، پشتیبانی جامعه. نقاط ضعف: وضعیت پیچیدگی فایل، تشخیص دستی نقاط پرت، و فرآیند واردات جداگانه.
  • فرم ها: رویکرد نسل بعدی. نقاط قوت: عدم مدیریت حالت، کشف خودکار، همزیستی با ابزارهای دیگر و اعتبارسنجی قوی. نقاط ضعف: اکوسیستم جدید، مجوز FSL، نیاز به یادگیری PKL دارد.
  • پولومی: رویکرد مدرن به توسعه. نقاط قوت: زبان های آشنا، پشتیبانی قوی از IDE. نقاط ضعف: هنوز به مدیریت دولتی نیاز دارد، منحنی یادگیری تندتر برای غیر توسعه دهندگان.
  • CloudFormation: AWS-native. نقاط قوت: پشتیبانی ممتاز AWS، رایگان، تشخیص انحراف داخلی. نقاط ضعف: فقط AWS، نحو پرمخاطب، محدودیت 500 منبع در هر پشته.
  • Crossplane: کوبرنت گرا. نقاط قوت: GitOps پسند، YAML اعلامی. نقاط ضعف: به یک خوشه Kubernetes نیاز دارد، یک لایه اضافی از پیچیدگی.

موارد استفاده در دنیای واقعی

محیط های صنعتی متروکه

یک محیط قدیمی، در زمینه زیرساخت به عنوان کد (IaC)، به یک محیط محاسباتی موجود و کاملاً عملیاتی اشاره دارد که قبلاً مستقر شده است.

برای زیرساخت های موجود، Formae واردات دردناک را حذف می کند:

# Discover all existing AWS resources
formae extract --target aws --output current-infrastructure.pkl

# Review discovered infrastructure
cat current-infrastructure.pkl

# Make changes and apply
formae apply --mode patch current-infrastructure.pkl

مدیریت چندین محیط

از خصوصیات برای تنظیمات محیطی خاص استفاده کنید:

// environments/production.pkl
amends "../base-infrastructure.pkl"

properties {
  environment = new formae.Prop {
    flag = "env"
    default = "production"
  }
  
  instanceType = new formae.Prop {
    flag = "instance-type"
    default = "t3.large"
  }
  
  instanceCount = new formae.Prop {
    flag = "instances"
    default = "10"
  }
}

// Deploy production with overrides
// formae apply --mode reconcile environments/production.pkl

فرآیندهای کار تیمی

مهندسان پلتفرم اصلی کد زیرساخت اصلی را مدیریت می‌کنند و تغییراتی در کل سیستم ایجاد می‌کنند، در حالی که مهندسان نقش خاص تغییرات کوچک و ایمن را از طریق حالت وصله انجام می‌دهند.

راهنمای انتخاب

Terraform/OpenTofu را انتخاب کنید برای حداکثر پوشش تامین کننده و مهارت های استاندارد صنعت. OpenTofu آینده منبع باز را تضمین می کند.

Formae را انتخاب کنید برای از بین بردن پیچیدگی حالت، نیاز به کشف خودکار و ارزش گذاری کد همیشه همگام با حداقل هزینه عملیاتی دارید.

Pulumi را انتخاب کنید اگر تیم شما زبان های همه منظوره را ترجیح می دهد و نیاز به یکپارچه سازی برنامه های زیرساختی دارد.

CloudFormation/Biceps را انتخاب کنید برای سناریوهای تک ابری با ادغام بومی.

Crossplane را انتخاب کنید برای سازمان‌های Kubernetes محور که مدل‌های زیرساخت GitOps را می‌خواهند.

نتیجه گیری

Formae و PKL نشان دهنده اولین نوآوری عمده در ابزارهای زیرساخت به عنوان کد در نزدیک به یک دهه است. با پرداختن به محدودیت‌های اساسی – پیچیدگی مدیریت حالت، چالش‌های تشخیص ناهنجاری و اصطکاک زیرساخت‌های قدیمی – Formae دیدگاه جدیدی در مورد اتوماسیون زیرساخت ارائه می‌دهد.

موفقیت این پلتفرم به این بستگی دارد که آیا رویکرد آن به کشف و کدگذاری خودکار ارزشمندتر از دانش جامعه و پشتیبانی پیرامون ابزارهای موجود است یا خیر. برای تیم‌های مهندسی پلتفرم که با فضای ابری در حال رشد، جابجایی زیرساخت‌ها و زنجیره‌های ابزار شکننده دست و پنجه نرم می‌کنند، رویکرد Formae برای تلقی کد به‌عنوان منبع واحد حقیقت در حالی که به‌طور خودکار واقعیت را در خود جای می‌دهد، می‌تواند تحول‌آفرین باشد.


Source link

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

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

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