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-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. این هنوز یک پروژه در حال انجام است. با خیال راحت موضوعی را باز کنید، روابط عمومی برقرار کنید و … 🤗