خودکارسازی تکثیر منطقه ای در AWS S3 با استفاده از محرک های لامبدا

هنگامی که داده های مهم یا حساس را در آمازون S3 ذخیره می کنید ، تکیه بر یک منطقه واحد همیشه بی خطر نیست. این جایی است که Replication Cross-Repion (CRR) وارد می شود-این به محافظت از داده های شما با کپی کردن خودکار اشیاء از یک منطقه به منطقه دیگر کمک می کند. در حالی که آمازون S3 پیشنهادات داخلی تکثیر منطقه ای (CRR)، گاهی اوقات مورد استفاده شما بیش از کپی کردن داده ها نیاز دارد – ممکن است شما نیاز داشته باشید منطق سفارشیبا ورود به سیستمبا اعتبار سنجی امنیتی، یا اعلان هابشر هنگامی که من در S3 با Replication Cross-Repion (CRR) آشنا شدم ، فکر کردم AWS همه چیز را در داخل کشور اداره می کند.
اما پس از آن این سؤال مطرح شد: “اگر بخواهم آن تکثیر را به صورت دستی کنترل کنم ، چه می شود؟” شاید بخواهم منطق را مانند ورود به سیستم ، فیلتر ، ادغام با سایر خدمات AWS یا ارسال اعلان هنگام تکرار پرونده تزریق کنم. این جایی است که AWS Lambda به عنوان محرک برای فعال کردن CRR مبتنی بر رویداد متناسب با نیازهای شما وارد می شود.
در این مقاله ، من شما را از طریق نحوه استفاده پیاده روی می کنم AWS Lambda به عنوان محرک برای تکثیر متقابل اشیاء S3. این به شما کنترل ریز و درشت بر آنچه اتفاق می افتد هنگام فرود پرونده ها در سطل شما می دهد.
چرا از Lambda با CRR استفاده می کنیم؟
S3 CRR قدرتمند است ، اما همچنین سفت و سخت است. این برای تکثیر عمومی عالی است. بعضی اوقات می خواهید کنترل بیشتری بر آنچه تکرار می شود ، چه زمانی ، و چگونه – و لامبدا این قدرت را به شما می دهد. بنابراین ، اگر می خواهید:
- تکرار کردن تنها انواع فایل خاصی؟
- فیلتر توسط برچسب ها یا پسوند؟
- انجام اقدامات پیش از یا پس از تکرار؟
- فعالیت تکثیر ورود به سیستم یا ارسال هشدارهای ایمیل؟
- رمزگذاری پرونده ها یا ایجاد گردش کار پشتیبان؟
- هنگامی که CRR اتفاق می افتد به مدیر اطلاع دهید
این جایی است که اعلان های رویداد Lambda + S3 درخشش می توانید منطق خود را با Python یا Node.js سفارشی کنید و آن را به صورت تقاضا مقیاس کنید.
موارد استفاده در دنیای واقعی
-
بازیابی فاجعه:
بگو یک بانک یا هر شرکت گزارش های معامله را از S3: // معاملات-شرقی به S3: // معاملات-West با استفاده از Lambda تکرار می کند. این امر در دسترس بودن داده ها و استمرار عملیاتی حتی اگر یک منطقه پایین بیاید ، تضمین می کند. -
انطباق و افزونگی محور بر انطباق:
مقررات دولت یا داده های بهداشتی ممکن است نیاز به ذخیره داده ها در مناطق خاص داشته باشد. با Lambda ، هر بارگذاری را می توان با سیاهههای موجود در CloudWatch یا DynamoDB کنترل و تکرار کرد. -
گردش کار رسانه ای/محتوا
یک شرکت رسانه ای فیلم ها را ذخیره می کندus-east-1
برای ویرایش ، اما به طور خودکار ویرایش های نهایی را به یک سطل بایگانی در “US-West-2” که توسط آپلودها انجام می شود ، سوق می دهد. -
تقسیم داده ها و تهیه نسخه پشتیبان
یک پلت فرم تجارت الکترونیکی ممکن است تکرار شود فاکتورها، اما پرش سیاهههای خام– فیلترهای لامبدا بر اساس نام پرونده یا برچسب ها قبل از تکثیر.
معماری بیش از حدحرف
در اینجا آنچه ما استفاده خواهیم کرد:
- سطل S3 (منبع) – مکان اصلی که پرونده ها بارگذاری می شوند.
- سطل S3 (مقصد) – یک سطل در منطقه AWS متفاوت.
- AWS Lambda – برای اجرای منطق تکثیر هنگام بارگذاری یک پرونده.
- نقش – مجوزهای لامبدا برای دسترسی به هر دو سطل.
- اعلان رویداد S3 – عملکرد Lambda را در بارگذاری پرونده تحریک می کند
- (به صورت اختیاری) SNS – دوباره ، برای دید.
مراحل تنظیم این عملکرد
مرحله 1: در مناطق مختلف دو سطل ایجاد کنید.
منبع باکت: منبع MY-CRR (منطقه: US-East-1)
مقصد-باکت: My-Crr-Destination (منطقه: ایالات متحده و غرب-2)
مطمئن شدن نسخه سازی فعال است در هر دو
- به سطل منبع بروید → قوانین تکثیر → ایجاد قانون
- سطل مقصد را انتخاب کنید
- نقش IAM: به S3 اجازه دهید اشیاء را تکرار کند
- قانون را نجات دهید
-
نقش iam را برای لامبدا ایجاد کنید
مجوزها را اختصاص دهید: - S3: GetObject
- S3: PutObject
- S3: لیست
- سیاست اعتماد برای لامبدا.
مرحله 3: برای اعلان ایمیل یک موضوع SNS ایجاد کنید
- به کنسول SNS بروید → ایجاد موضوع
- نام موضوع: S3ReplicationNotification
- نوع: استاندارد
- اشتراک ایجاد کنید
- پروتکل: ایمیل
- آدرس ایمیل خود را وارد کنید
- اشتراک را تأیید کنید (برای تأیید ایمیل خود را بررسی کنید)
-
عملکرد لامبدا را بنویسید
در اینجا یک کد اصلی پایتون برای تکرار اشیاء در S3: ObjectCreated:* رویداد:
`
import boto3
import os
s3 = boto3.client(‘s3’)
DESTINATION_BUCKET = ‘destination-bucket-name’
def lambda_handler(event, context):
for record in event[‘Records’]:
src_bucket = record[‘s3’][‘bucket’][‘name’]key = record[‘s3’][‘object’][‘key’]
copy_source = {'Bucket': src_bucket, 'Key': key}
s3.copy_object(
CopySource=copy_source,
Bucket=DESTINATION_BUCKET,
Key=key
)
return {
'statusCode': 200,
'body': f"Replicated {key} to {DESTINATION_BUCKET}"
}
`
Deploy the Lambda Function
Use the Python boto3 SDK to copy objects from the source to the destination bucket.
Step 5: Set Up S3 Event Trigger for Lambda
- Go to Lambda → Create Function → Author from Scratch
- Runtime: Python 3.9
-
Execution Role: Attach IAM Policy with
AmazonS3FullAccess
AmazonSNSFullAccess
-
بروید به سطل منبع → خواص → اعلان های رویداد
-
اعلان رویداد جدید را ایجاد کنید
-
نام رویداد: S3ReplicationTrigger
-
نوع رویداد: قرار دادن (بارگذاری پرونده)
-
مقصد: عملکرد لامبدا (عملکرد لامبدا را انتخاب کنید)
- تنظیم خود را تست کنید
- یک فایل را در منبع-bucket-us-east-1 بارگذاری کنید
- سطل مقصد را بررسی کنید (پرونده باید در آنجا ظاهر شود)
- برای اعلان تکثیر ایمیل را بررسی کنید
- برای پرونده های بزرگ یا انواع شیء خاص ، شامل فیلترها یا چک های اندازه در کد Lambda شوید.
- اطمینان حاصل کنید که لامبدا به هر دو سطل دسترسی دارد و در همان منطقه با سطل منبع مستقر می شود.
- شما می توانید این کار را با ادغام SNS برای هشدار تیم ها هنگام انجام CRR گسترش دهید.