برنامه نویسی

Pydantic Settings + AWS راه آسان

Summarize this content to 400 words in Persian Lang
Pydantic Settings یک کتابخانه پایتون است که 🚀 Pydantic را برای مدیریت تنظیمات گسترش می دهد.

اگر تا به حال نام pydantic را نشنیده اید، لطفاً صفحه اسناد آن را بررسی کنید تا ببینید چقدر آسان و قدرتمند است. به نظر من، یکی از بهترین کتابخانه های پایتون است که در چند ماه/سال اخیر با آن برخورد کرده ام. ساموئل کولوین تبریک می گویم!

⚙️ استفاده از تنظیمات Pydantic

برای استفاده pydantic-settings، ابتدا باید آن را نصب کنیم:

pip install pydantic
pip install pydantic-settings

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

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

حالا بیایید تصور کنیم که ما یک میکروسرویس FastAPI داریم که نیاز به بارگذاری تنظیمات دارد.

فرض کنید برای درست کار کردن به برخی اطلاعات وابسته هستیم:

محیطی که در متغیرهای محیطی موجود است
میزبان پایگاه داده که در فروشگاه پارامترهای AWS موجود است
اطلاعات احراز هویت پایگاه داده که در AWS Secrets Manager موجود است

کاری که باید انجام دهیم چیزی شبیه به این است:

import json

import boto3

from pydantic_settings import BaseSettings, SettingsConfigDict

class AppSettings(BaseSettings):
model_config = SettingsConfigDict(env_prefix=”APP_”)

environment: str # will be loaded by environment variable APP_ENVIRONMENT
host: str # need to pass it when creating AppSettings 🙁
username: str # need to pass it when creating AppSettings 🙁
password: str # need to pass it when creating AppSettings 🙁

ssm_client = boto3.client(“boto3”)
secrets_client = boto3.client(“secretsmanager”)

# need to get the secret before creating our settings object
secret_response = secrets_client.get_secret_value(SecretId=”my/secrets”)
secret_string = secret_response.get(“SecretString”)
secret = json.loads(secret_string)

# need to get the parameter store before creating our settings object
parameter = ssm_client.get_parameter(Name=”/my/ssm/parameter”)
host = parameter.get(“Parameter”).get(“Value”)

settings = AppSettings(host=host, **secret)

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

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

اشتباه نکنید، هنوز هم عالی است. اما بهتر است یک منبع تنظیمات pydantic داشته باشیم که این کار را برای ما انجام دهد!

توضیحات: می توانید بررسی کنید pydantic-settings 📖 برای دیدن همه منابع تنظیماتی که ارائه می دهد، اسناد را ثبت کنید.

☁️ Pydantic Settings AWS

من به تازگی شروع به ایجاد یک pydantic-settings برنامه افزودنی برای مقابله با تنظیماتی که در AWS زندگی می کنند. Pydantic Settings AWS نام دارد و می توانید کد منبع را در github.com/ceb10n/pydantic-settings-aws ببینید.

🏃 شروع به کار

اگر هنوز تنظیمات boto3 یا pydantic را نصب نکرده‌اید:

pip install boto3
pip install pydantic-settings

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

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

و سپس می توانید pydantic-settings-aws را نصب کنید

pip install pydantic-settings-aws

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

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

حالا بیایید به مثال خود برگردیم.

ما یک کلاس تنظیمات اولیه داریم که باید داده ها را از متغیرهای Environmet، ذخیره پارامترها و مدیر مخفی بارگیری کند.

pydantic-settings-aws کلاسی به نام ارائه می دهد AWSBaseSettings، که به شما توانایی مقابله با همه آن منابع داده را می دهد.

from typing import Annotated

from pydantic_settings import SettingsConfigDict
from pydantic_settings_aws import AWSBaseSettings

class AppSettings(AWSBaseSettings):
model_config = SettingsConfigDict(
secrets_name=”my/secrets”,
env_prefix=”APP_”
)

environment: str
host: Annotated[str, {“service”: “ssm”, “ssm”: “/my/ssm/parameter”}] username: Annotated[str, {“service”: “secrets”}] password: Annotated[str, {“service”: “secrets”}]

settings = AppSettings()

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

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

با AWSBaseSettings، تنها کاری که باید انجام دهید این است که استفاده کنید typing.Annotated برای اطلاع از سرویسی که می‌خواهید استفاده کنید و موارد دیگر، مانند نام‌های ذخیره مخفی و پارامترها.

🙊 تنظیمات فقط با Secrets Manager

اگر به سادگی می خواهید از Secrets Manager استفاده کنید، می توانید از آن استفاده کنید SecretsManagerBaseSettings.

از آنجایی که ما فقط از Secrets Manager به عنوان منبع داده استفاده می کنیم، نیازی به تعیین چیزی نداریم، به جز نام Secrets:

from pydantic_settings import SettingsConfigDict
from pydantic_settings_aws import SecretsManagerBaseSettings

class AppSettings(SecretsManagerBaseSettings):
model_config = SettingsConfigDict(
secrets_name=”my/secrets”
)

username: str
password: str

settings = AppSettings()
# username=”my-username” password=’my-super-secret-password’

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

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

🔒 تنظیمات فقط با Parameter Store

فرض کنید از Parameter Store استفاده می‌کنید تا پیکربندی بسیاری از برنامه‌های خود را ذخیره کنید، مانند نام‌های صف، آدرس‌های اینترنتی و غیره.

شما می توانید از آن استفاده کنید ParameterStoreBaseSettings کلاس برای بارگیری تمام داده ها از فروشگاه های پارامترهای مختلف.

from pydantic_settings_aws import ParameterStoreBaseSettings

class AppSettings(ParameterStoreBaseSettings):

dev_base_endpoint: str
database_host: str
database_port: str

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

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

و همین. ParameterStoreBaseSettings سعی خواهد کرد که یک boto3 مشتری با پیکربندی محلی شما، و سپس سعی خواهد کرد مقدار را از یک ذخیره پارامتر با همان نام فیلد شما دریافت کند.

اما غیرمعمول نیست که نام ذخیره پارامترهای ما با نام متغیرهای ما مطابقت نداشته باشد. در این موارد می توانید استفاده کنید typing.Annotated:

from typing import Annotated

from pydantic_settings_aws import ParameterStoreBaseSettings

class AppSettings(ParameterStoreBaseSettings):

dev_base_endpoint: Annotated[str, “/payments/endpoint”] database_host: Annotated[str, “/databases/mongodb/payments/dbhost”] database_port: Annotated[str, “/databases/mongodb/payments/dbport”]

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

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

📜 اسناد و کد منبع

می توانید نگاهی بیندازید pydantic-settings-aws اسناد در [ceb10n.github.io/pydantic-settings-aws](https://ceb10n.github.io/pydantic-settings-aws/].

این پروژه در github میزبانی می شود: github.com/ceb10n/pydantic-settings-aws. این هنوز یک پروژه در حال انجام است. با خیال راحت موضوعی را باز کنید، روابط عمومی برقرار کنید و … 🤗

Pydantic Settings یک کتابخانه پایتون است که 🚀 Pydantic را برای مدیریت تنظیمات گسترش می دهد.

اگر تا به حال نام pydantic را نشنیده اید، لطفاً صفحه اسناد آن را بررسی کنید تا ببینید چقدر آسان و قدرتمند است. به نظر من، یکی از بهترین کتابخانه های پایتون است که در چند ماه/سال اخیر با آن برخورد کرده ام. ساموئل کولوین تبریک می گویم!

⚙️ استفاده از تنظیمات Pydantic

برای استفاده pydantic-settings، ابتدا باید آن را نصب کنیم:

pip install pydantic
pip install pydantic-settings
وارد حالت تمام صفحه شوید

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

حالا بیایید تصور کنیم که ما یک میکروسرویس FastAPI داریم که نیاز به بارگذاری تنظیمات دارد.

فرض کنید برای درست کار کردن به برخی اطلاعات وابسته هستیم:

  • محیطی که در متغیرهای محیطی موجود است
  • میزبان پایگاه داده که در فروشگاه پارامترهای AWS موجود است
  • اطلاعات احراز هویت پایگاه داده که در AWS Secrets Manager موجود است

کاری که باید انجام دهیم چیزی شبیه به این است:

import json

import boto3

from pydantic_settings import BaseSettings, SettingsConfigDict


class AppSettings(BaseSettings):
    model_config = SettingsConfigDict(env_prefix="APP_")

    environment: str  # will be loaded by environment variable APP_ENVIRONMENT
    host: str  # need to pass it when creating AppSettings :(
    username: str  # need to pass it when creating AppSettings :(
    password: str  # need to pass it when creating AppSettings :(


ssm_client = boto3.client("boto3")
secrets_client = boto3.client("secretsmanager")

# need to get the secret before creating our settings object
secret_response = secrets_client.get_secret_value(SecretId="my/secrets")
secret_string = secret_response.get("SecretString")
secret = json.loads(secret_string)

# need to get the parameter store before creating our settings object
parameter = ssm_client.get_parameter(Name="/my/ssm/parameter")
host = parameter.get("Parameter").get("Value")


settings = AppSettings(host=host, **secret)
وارد حالت تمام صفحه شوید

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

اشتباه نکنید، هنوز هم عالی است. اما بهتر است یک منبع تنظیمات pydantic داشته باشیم که این کار را برای ما انجام دهد!

توضیحات: می توانید بررسی کنید pydantic-settings 📖 برای دیدن همه منابع تنظیماتی که ارائه می دهد، اسناد را ثبت کنید.

☁️ Pydantic Settings AWS

تنظیمات Pydantic + AWS

من به تازگی شروع به ایجاد یک pydantic-settings برنامه افزودنی برای مقابله با تنظیماتی که در AWS زندگی می کنند. Pydantic Settings AWS نام دارد و می توانید کد منبع را در github.com/ceb10n/pydantic-settings-aws ببینید.

🏃 شروع به کار

اگر هنوز تنظیمات boto3 یا pydantic را نصب نکرده‌اید:

pip install boto3
pip install pydantic-settings
وارد حالت تمام صفحه شوید

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

و سپس می توانید pydantic-settings-aws را نصب کنید

pip install pydantic-settings-aws
وارد حالت تمام صفحه شوید

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

حالا بیایید به مثال خود برگردیم.

ما یک کلاس تنظیمات اولیه داریم که باید داده ها را از متغیرهای Environmet، ذخیره پارامترها و مدیر مخفی بارگیری کند.

pydantic-settings-aws کلاسی به نام ارائه می دهد AWSBaseSettings، که به شما توانایی مقابله با همه آن منابع داده را می دهد.

from typing import Annotated

from pydantic_settings import SettingsConfigDict
from pydantic_settings_aws import AWSBaseSettings


class AppSettings(AWSBaseSettings):
    model_config = SettingsConfigDict(
        secrets_name="my/secrets",
        env_prefix="APP_"
    )

    environment: str
    host: Annotated[str, {"service": "ssm", "ssm": "/my/ssm/parameter"}]
    username: Annotated[str, {"service": "secrets"}]
    password: Annotated[str, {"service": "secrets"}]


settings = AppSettings()
وارد حالت تمام صفحه شوید

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

با AWSBaseSettings، تنها کاری که باید انجام دهید این است که استفاده کنید typing.Annotated برای اطلاع از سرویسی که می‌خواهید استفاده کنید و موارد دیگر، مانند نام‌های ذخیره مخفی و پارامترها.

🙊 تنظیمات فقط با Secrets Manager

اگر به سادگی می خواهید از Secrets Manager استفاده کنید، می توانید از آن استفاده کنید SecretsManagerBaseSettings.

از آنجایی که ما فقط از Secrets Manager به عنوان منبع داده استفاده می کنیم، نیازی به تعیین چیزی نداریم، به جز نام Secrets:

from pydantic_settings import SettingsConfigDict
from pydantic_settings_aws import SecretsManagerBaseSettings


class AppSettings(SecretsManagerBaseSettings):
    model_config = SettingsConfigDict(
        secrets_name="my/secrets"
    )

    username: str
    password: str

settings = AppSettings()
# username="my-username" password='my-super-secret-password'
وارد حالت تمام صفحه شوید

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

🔒 تنظیمات فقط با Parameter Store

فرض کنید از Parameter Store استفاده می‌کنید تا پیکربندی بسیاری از برنامه‌های خود را ذخیره کنید، مانند نام‌های صف، آدرس‌های اینترنتی و غیره.

شما می توانید از آن استفاده کنید ParameterStoreBaseSettings کلاس برای بارگیری تمام داده ها از فروشگاه های پارامترهای مختلف.


from pydantic_settings_aws import ParameterStoreBaseSettings


class AppSettings(ParameterStoreBaseSettings):

    dev_base_endpoint: str
    database_host: str
    database_port: str
وارد حالت تمام صفحه شوید

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

و همین. ParameterStoreBaseSettings سعی خواهد کرد که یک boto3 مشتری با پیکربندی محلی شما، و سپس سعی خواهد کرد مقدار را از یک ذخیره پارامتر با همان نام فیلد شما دریافت کند.

اما غیرمعمول نیست که نام ذخیره پارامترهای ما با نام متغیرهای ما مطابقت نداشته باشد. در این موارد می توانید استفاده کنید typing.Annotated:

from typing import Annotated

from pydantic_settings_aws import ParameterStoreBaseSettings


class AppSettings(ParameterStoreBaseSettings):

    dev_base_endpoint: Annotated[str, "/payments/endpoint"]
    database_host: Annotated[str, "/databases/mongodb/payments/dbhost"]
    database_port: Annotated[str, "/databases/mongodb/payments/dbport"]
وارد حالت تمام صفحه شوید

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

📜 اسناد و کد منبع

می توانید نگاهی بیندازید pydantic-settings-aws اسناد در [ceb10n.github.io/pydantic-settings-aws](https://ceb10n.github.io/pydantic-settings-aws/].

این پروژه در github میزبانی می شود: github.com/ceb10n/pydantic-settings-aws. این هنوز یک پروژه در حال انجام است. با خیال راحت موضوعی را باز کنید، روابط عمومی برقرار کنید و … 🤗

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

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

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

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