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

برای اطلاعات بیشتر، می‌توانید مستندات رسمی AWS را مطالعه کنید.

نکته

در برخی مستندات ممکن است قانون Transition را مشاهده کنید که مربوط به جابجایی خودکار آبجکت‌ها به یک کلاس دیگر (مثلاً کلاس سردتر) پس از مدت مشخصی است. این قانون در حال حاضر در سرویس آبجکت استوریج ستون قابل تنظیم نیست.

ایجاد یک قانون لایف‌سایکل

برای تعریف یک قانون لایف‌سایکل در یک باکت:

۱. وارد صفحه لیست باکت‌ها شوید و باکت مورد نظر را انتخاب کنید.

۲. روی مدیریت لایف‌سایکل کلیک کنید.

۳. گزینه ساخت قانون جدید را انتخاب کنید.

۴. یک نام منحصربه‌فرد (Unique) و انگلیسی برای قانون انتخاب کنید. (امکان استفاده از - و _ وجود دارد.)

۵. محدوده‌ی اعمال این قانون را مشخص کنید:

  • همه‌ آبجکت‌ها: قانون روی تمام آبجکت‌های باکت اعمال می‌شود.
  • آبجکت‌های خاص: قانون روی آبجکت‌های دارای پیشوند یا برچسب مشخص‌شده اعمال می‌شود.

۶. حداقل یکی از قوانین لایف‌سایکل (توضیح داده‌شده در ادامه) را انتخاب کنید.

۷. روی ساخت قانون کلیک کنید.

قوانین لایف‌سایکل

۱. اعمال بر روی نسخه‌های جاری آبجکت‌ها

  • آبجکت‌ها پس از تعداد روز مشخص‌شده از باکت حذف می‌شوند.
  • در صورت فعال بودن مدیریت نسخه، نسخه فعلی حذف و نسخه‌های قدیمی‌تر باقی می‌مانند.
  • محدوده‌ی مجاز: بین ۱ تا ۳۶۵۰ روز (۱۰ سال).

۲. اعمال بر روی نسخه‌های قدیمی آبجکت‌ها

  • نسخه‌های قدیمی و غیرجاری آبجکت‌ها پس از تعداد روز مشخص حذف می‌شوند.
  • نسخه‌ی جاری حذف نخواهد شد.

۳. اعمال بر روی آپلودهای چندبخشی ناقص

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

تنظیم لایف‌سایکل با CLI

ایجاد قانون با AWS CLI

برای تعریف یک قانون لایف‌سایکل، از دستور زیر استفاده کنید:

aws s3api put-bucket-lifecycle-configuration --endpoint-url ENDPOINT --bucket BUCKET_NAME --lifecycle-configuration  file://lifecycle.json

ساختار فایل lifecycle.json:

{
"Rules": [
    {
      "Expiration": {
        "Date": timestamp,
        "Days": integer,
        "ExpiredObjectDeleteMarker": true|false
      },
      "ID": "string",
      "Filter": {
        "Prefix": "string",
        "Tag": {
          "Key": "string",
          "Value": "string"
        },
        "ObjectSizeGreaterThan": long,
        "ObjectSizeLessThan": long,
      },
      "Status": "Enabled"|"Disabled",
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": integer,
        "NewerNoncurrentVersions": integer
      },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": integer
      }
    }
    ...
  ]

مشاهده قوانین

aws s3api get-bucket-lifecycle-configuration --endpoint-url ENDPOINT --bucket BUCKET_NAME

حذف قوانین لایف‌سایکل

aws s3api delete-bucket-lifecycle-configuration --endpoint-url ENDPOINT --bucket BUCKET_NAME

استفاده از Minio Client

مشاهده‌ی لیست قوانین

minio ilm rule export BUCKET_NAME
mc ilm ls BUCKET_NAME --json

اضافه کردن قانون

minio ilm import BUCKET_NAME <<EOF
{
"Rules": [
 {
  "Expiration": {
   "Days": 365
  },
  "ID": "OneYearExpiration",
  "Status": "Enabled"
 }
]
}
EOF

یا با فایل ورودی:

mc ilm rule import BUCKET_NAME < lifecycle.json
  • دقت کنید: این دستور همه‌ی قوانین قبلی را جایگزین می‌کند.
  • برای اضافه کردن یک قانون جدید بدون حذف قوانین قبلی:
mc ilm rule add --expire-days 365 BUCKET_NAME

حذف قانون لایف‌سایکل

mc ilm rule rm --id "RULE_ID" BUCKET_NAME

استفاده از Python Client) Boto3)

نمونه کد برای تعریف قوانین در پایتون:

import boto3
import botocore
import datetime
botocore.config.Config(s3={"addressing_style": "path"})
client = boto3.client(
            's3',
            endpoint_url=ENDPOINT,
            aws_access_key_id=ACCESS_KEY,
            aws_secret_access_key=SECRET_KEY
        )
client.create_bucket(Bucket=BUCKET_NAME)
client.put_bucket_lifecycle_configuration(
        Bucket=BUCKET_NAME,
        LifecycleConfiguration=
        {
            "Rules": [
                {
                    "Expiration": {
                        "Days": 30
                    },
                    "ID": "1-month-expiration",
                    "Status": "Enabled"
                },
                {
                    "Expiration": {
                        "Days": 7
                    },
                    "ID": "1-week-tagged-expiration",
                    "Filter": {
                        "Prefix": "logs"
                        "Tag": {
                            "Key": "backup",
                            "Value": "true"
                        }
                    },
                    "Status": "Enabled"
                }
            ]
        }
    )