ځینې وختونه .NET غوښتنلیکونه په تولید کې ځي، او هیڅکله نه پوهیږئ چې چرا، ځکه چې ژور او مټريکونه ښه دي. دا ډیری ستونزه ده او دا ډبرګون کولو ډیر ناڅاپي کوي. په داسې حالونو کې، د حافظه ډیمپونه کولی شي ډبرګون کولو ساده کړي او د ستونزو حل وختونه د ورځو څخه د دقیقې ته کم کړي. دا مقاله توضیح کوي چې څنګه د .NET غوښتنلیکونو لپاره ډیمپونه تنظیم کړئ چې د او بیا دوی ته د پراختیا ټیم ته ترټولو مناسب او خوندي ډول وړاندې کړي. AWS ECS Fargate په دې مقاله کې، موږ به د AWS سرچینو جوړ کړي، او زه به په ځانګړي حالتونو کې د AWS سندونو په اړه اشاره کروں. IAC به زموږ په تمرکز کې نه وي. په هرصورت، که تاسو د Terraform په لټه کې یاست، نو تاسو کولی شئ د هر مقاله برخه کې د AWS مخکښ ماډلونه کاروئ. زما په برخه کې، زه کولی شئ تاسو ته د دوو AWS Terraform ماډل پروژې وګورئ: https://github.com/cloudposse https://github.com/terraform-aws-modules په دې مقاله کې، موږ به د AWS سرچینو جوړ کړي، او زه به په ځانګړي حالتونو کې د AWS سندونو په اړه اشاره کروں. IAC به زموږ په تمرکز کې نه وي. په هرصورت، که تاسو د Terraform په لټه کې یاست، نو تاسو کولی شئ د هر مقاله برخه کې د AWS مخکښ ماډلونه کاروئ. زما په برخه کې، زه کولی شئ تاسو ته د دوو AWS Terraform ماډل پروژې وګورئ: https://github.com/cloudposse https://github.com/terraform-aws-modules https://github.com/cloudposse https://github.com/terraform-aws-modules د حل Architecture دا وخت دی چې زموږ د آرکټیکټیکټې په لټه کې ونیسئ. زه به په پیل کې فرض وکړم چې د پراختیا ټیم د دې پیچیدو له امله د ذخیره کولو لکه EBS یا EFS څخه د .NET ډیمپونو په پام کې نلري. S3 د پراختیا لپاره ډیر ساده دی چې د هر ډول فایل ترلاسه کړي، او دا په بشپړه توګه زموږ د انتظارونو سره مطابقت لري. د دې په پرتله، کله چې د نوي .NET ډیمپ جوړ شي د پروتیکي خبرتیاوې ترلاسه کولو به خورا ارزانه وي. د مثال په توګه، زه به Slack کاروئ، مګر نور انتخابونه شامل دي Teams، Mattermost، WhatsApp، او داسې نور. د خبرتیا پيغام ته رسولو لپاره موږ به د Lambda او S3 تګریجرونه کاروي. په دې امله موږ به د EFS، DataSync، او sidecar ECS کانټینر / Lambda فابريکه پر بنسټ د منځني سافټویر کچه جوړ کړي. EFS به د ټولو زموږ د ECS کارونو لپاره د منځني فایل ذخیره کولو په توګه کارول شي، Datasync به د EFS څخه د S3 ته د معلوماتو په اتوماتيک ډول انتقال کړي، او د sidecar کانټینر یا Lambda به د EFS څخه قدي معلوماتو پاک کړي. موږ به د ډیزاین په چټکۍ سره وګورئ: AWS Lambda deletes old EFS files by the schedule configured in EventBridge. Alternatively, during ECS Task bootstrap phase, sidecar container removes outdated dumps from EFS and quits. janitor During .NET application crash, a new dump is created at EFS filesystem, and only after that the process is terminated. DataSync moves data to S3 after a new file is uploaded to EFS. When an S3 hook detects a newly uploaded file, AWS Lambda is triggered. AWS Lambda uses IAM to obtain the necessary secrets from AWS Secret Manager. AWS Lambda sends a message to Slack via API. د پړاو implementation د ECS Fargate کار جوړ کړئ په دې برخه کې موږ باید د .NET نمونه غوښتنلیک په کارولو سره د ECS Fargate ورکشاپ جوړ کړي. اړتیاوې مخکې له دې چې چمتو شي، د ځينو ګامونه دي چې باید بشپړ شي: Setup ECS cluster via AWS Console, or Terraform. An official AWS guide: Creating an Amazon ECS cluster for Fargate workloads Create an IAM execution role for ECS task. To do it, you can follow . In the scope of this article I will use name for IAM execution role. this AWS guide kvendingoldo-dotnet-crash-dump-demo د Fargate کارګرامونو لپاره د Amazon ECS کلستر جوړولو د AWS لارښود د کمېسيون د اغیزې دنده به کافی وي: Trust policy { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } همدارنګه د کمېسيون : permissions policy { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] } د task definitions جوړول کله چې ټول اړتیاوې چمتو شوي دي، دا وخت دی چې د نمونه .NET اپلیکیشن سره د کمېسيون Fargate کار جوړ کړئ. ، او د دې task definition json فایل استعمال کړئ: د AWS رسمي لارښود د AWS رسمي لارښود { "containerDefinitions": [ { "cpu": 0, "essential": true, "image": "mcr.microsoft.com/dotnet/samples:aspnetapp", "mountPoints": [], "name": "app", "portMappings": [ { "containerPort": 8000, "hostPort": 8000, "protocol": "tcp" } ], "systemControls": [], "volumesFrom": [] } ], "cpu": "256", "executionRoleArn": "kvendingoldo-dotnet-crash-dump-demo", "family": "kvendingoldo-dotnet-crash-dump-demo", "memory": "512", "networkMode": "awsvpc", "placementConstraints": [], "requiresCompatibilities": ["FARGATE"], "volumes": [], "tags": [] } د .NET Dumps ترتیب کول د .NET اپلیکیشنونه د معياري ترتیب کولو لپاره، موږ باید د لاندې چاپیریال متغیرونه تنظیموي: # Forces the runtime to generate a stack dump on unhandled exceptions. COMPlus_StackDumpOnUnhandledException=1 # Enable mini dump generation on crash COMPlus_DbgEnableMiniDump=1 # Choose dump type: # 1 = Mini, # 2 = Full (use carefully) # 4 = Triage (includes stack, threads, and some heap info — a good balance for debugging). COMPlus_DbgMiniDumpType=2 # Target path for dump file (EFS is mounted here) COMPlus_DbgMiniDumpName=/dumps/dump-%e-%p-%t.dmp دا متغیرونه کولی شي په Dockerfile په مستقیم ډول اضافه شي یا په ECS Task Definition json کې د چاپیریال متغیرونه په توګه تعریف شي. زموږ د مثال په توګه، موږ به دوی په ECS دنده ځانګړتیاوې کې انجکشن کړي. د دې لپاره، موږ به دوی ته د لکه څنګه چې لاندې ښيي: containerDefinitions[0].environment "environment": [ { "name": "COMPlus_StackDumpOnUnhandledException", "value": "1" }, { "name": "COMPlus_DbgMiniDumpType", "value": "4" }, { "name": "COMPlus_DbgEnableMiniDump", "value": "1" }, { "name": "COMPlus_DbgMiniDumpName", "value": "/dumps/%t-kvendingoldo-dotnet-demo-crash.dmp" } ] لکه څنګه چې تاسو کولی شئ وګورئ، زه په COMPlus_DbgMiniDumpName ځینې ځایونه کاروي. Dotnet په اتوماتيک ډول په ډوم فایله نوم کې لاندې ځایونه پراختیا کوي: %e - executable نوم %p - د پروسه ID %t - د وخت ټیم د دې دوو لینکونو ته د .NET crash damps راټولولو او تجزیه کولو په اړه نور معلومات وګورئ: Collect .NET Crash Dumps (د مایکروسافټ زده کړئ) د dotnet ډیمپ سره د .NET Core حافظه ستونزو ډبرګون کول (د لینوکس کې) لکه څنګه چې تاسو کولی شئ وګورئ، زه په COMPlus_DbgMiniDumpName ځینې ځایونه کاروي. Dotnet په اتوماتيک ډول په ډوم فایله نوم کې لاندې ځایونه پراختیا کوي: %e - executable نوم %p - د پروسه ID %t - د وخت ټیم د دې دوو لینکونو ته د .NET crash damps راټولولو او تجزیه کولو په اړه نور معلومات وګورئ: Collect .NET Crash Dumps (د مایکروسافټ زده کړئ) د dotnet ډیمپ سره د .NET Core حافظه ستونزو ډبرګون کول (د لینوکس کې) Collect .NET Crash Dumps (د مایکروسافټ زده کړئ) د dotnet ډیمپ سره د .NET Core حافظه ستونزو ډبرګون کول (د لینوکس کې) د EFS ذخیره کولو جوړول او دا ته د ECS Fargate ورکشاپ ته نصب کړئ لکه څنګه چې زه په دې مقاله کې په پیل کې اشاره کړم، د ECS کار لپاره د S3 بکس سره سمون کول خورا سخت دی؛ په بل کې، موږ به د کارولو لپاره کار وکړي. د .NET ډیمپ فایلونو لپاره د منځني ذخیره کولو په توګه، کوم چې په اسانۍ سره د ECS کارونو ټولګه ته نصب کیدی شي. Amazon EFS (Elastic File System) د EFS ذخیره کولو جوړولو لپاره، د AWS رسمي لارښود لاندې کړئ: د Amazon ECS لارښود: د Amazon EFS فایل سیسټمونو کارولو د EFS ذخیره کولو جوړولو لپاره، د AWS رسمي لارښوونې سره سم: د Amazon ECS لارښود: د Amazon EFS فایل سیسټمونو کارولو د Amazon ECS لارښود: د Amazon EFS فایل سیسټمونو کارولو په رسمي سندونو کې اضافه کولو لپاره د ځانګړي څه نه دی. یوازې ډاډه وکړئ چې: EFS او ECS کلسترونه په ورته VPC کې دي EFS کولی شي د NFS (پورت 2049/tcp) له لارې د ECS کارونو لخوا لاس رسی شي. د دې لپاره د EFS امنیت ګروپ کې د NFS بندرونو ته د انډول لاس رسی اجازه کړئ. د EFS فایل سیسټم په ECS کار کې نصب کولو لپاره، موږ باید د اړتیاوو ته اړتیاوو ته اجازه ورکړو. د IAM رول (د ځای لخوا مراقبت وکړئ): kvendingoldo-dotnet-crash-dump-demo { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEFSAccess", "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientRootAccess" ], "Resource": "arn:aws:elasticfilesystem:<region>:<account-id>:file-system/<filesystem-id>" } ] } لکه څنګه چې په پای کې، د EFS ټومومومونه او د ECS ورکشاپ د تعریف (change fileSystemId د bootstrapping وروسته ستاسو د حقیقي File System ID سره): fs-xxxxxx "volumes": [ { "name": "dotnet-dumps", "efsVolumeConfiguration": { "fileSystemId": "fs-xxxxxx", "rootDirectory": "/" } } ] "mountPoints": [ { "containerPath": "/dumps", "readOnly": false, "sourceVolume": "dotnet-dumps" } ] د AWS DataSync تنظیم کړئ چې د EFS فایلونه په S3 کې انتقال کړئ د DataSync خدمت دی د مختلفو ډولونو د ذخیره کولو تر منځ د معلوماتو انتقال لپاره د AWS معياري وسیله. زموږ په صورت کې، دا به موږ سره مرسته وکړي move.NET له EFS ته S3 ډیمپ. زموږ هدف ته ورسیږي، موږ باید: Create an S3 bucket to store our.NET dumps. Further in this article I’ll use S3 bucket name kvendingoldo-dotnet-demo-crash Use to create a bucket. this official doc Create DataSync Use to create DataSync. this official doc Some service parameters I'll be using: Source: EFS Destination: S3 bucket (e.g., ) s3://kvendingoldo-dotnet-demo-crash/ Include path filters like /dumps/* Schedule sync every minute د دې رسمي DOC د دې رسمي DOC د AWS Lambda پر بنسټ د Slack خبرتیاوې جوړ کړئ لکه څنګه چې مخکې اشاره شوې ده، د new.NET ډیمپونو په اړه خبرتیاوې د پراختیا ټیم لپاره خورا ګټور دي. د آرکټریټ په نقطې کې، تفتیشونه کولی شي په مختلفو لارو جوړ شي: یو ساده Lambda دنده چې د API له لارې Slack ته پیژندل کیږي او د S3 واقعاتو له خوا د کارولو له لارې. پیغامونه د SNS موضوع ته د S3 واقعې خبرتیاوې په کارولو سره نشر شوي دي، کوم چې بیا د Lambda فورمې له لارې د واقعاتو ته Slack ته ورسیږي. لکه څنګه چې موږ د لوړ بار انتظار نه کوي، د لومړي اختیاري زموږ لپاره ښه دی. په صورت کې، که تاسو د دویمې اختیاري پلي کولو ته اړتیا لرئ، دا دوه لینکونه کاروئ: د SNS او Lambda stack نصب کولو لپاره د Terraform ماډل د S3 واقعاتو په SNS کې تنظیم کولو لارښود د SNS او Lambda stack نصب کولو لپاره د Terraform ماډل A guide for configuring S3 events to SNS موږ Python کاروي ترڅو پیغامونه په Slack ته ورسیږي. په دې مقاله کې موږ به یوازې د S3 فایل ته یو لنډ کړئ، مګر په ځینې حالتونو کې دا اړتیا لري چې ټول فایل ته ورسیږي. Slack API د ځینې وختونو مخکې بدل شوی دی، او د فایل د ورسی کولو کې کمی پیچلي وي. که تاسو غواړئ نور معلومات ترلاسه کړئ، مهرباني وکړئ د "Files to Slack with Python upload" مقاله وګورئ. موږ Python کاروي ترڅو پیغامونه په Slack ته ورسیږي. په دې مقاله کې موږ به یوازې د S3 فایل ته یو لنډ کړئ، مګر په ځینې حالتونو کې دا اړتیا لري چې ټول فایل ته ورسیږي. Slack API د ځینې وختونو مخکې بدل شوی دی، او د فایل د ورسی کولو کې کمی پیچلي وي. که تاسو غواړئ نور معلومات ترلاسه کړئ، مهرباني وکړئ د "Files to Slack with Python upload" مقاله وګورئ. په Python سره Slack فایلونه اپلوډ کړئ ښه، موږ به د هټۍ په ګام کې د هټۍ جوړ کړئ: 1. Create Slack secret د AWS Secret Manager راز جوړ کړئ په یوه میدان کې: دا کلید باید د Slack webhook لینک لري (د Slack webhook چک په اړه نور معلومات ترلاسه کړئ) همدارنګه kvendingoldo-dotnet-crash-dump-demo slack_webhook_url د رسمي لارښود د رسمي لارښود 2. Configure AWS Lambda موږ به د AWS Lambda جوړولو په اړه په عمده توګه نه وي، مګر موږ به د ځینې مهمو نقطې ته وده ورکړي. د AWS Lambda نصب په اړه ډیر بنسټیز معلومات ترلاسه کړئ، وګورئ . the official guide د رسمي لارښود 2.1 ډاډه وکړئ چې د Lambda IAM رول د S3 څخه د لوستلو اجازه لري: { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::kvendingoldo-dotnet-demo-crash/*" } 2.2: د AWS Secret مدیر څخه د معلوماتو ترلاسه کولو لپاره، موږ باید په AWS Lambda ترتیب کې د چاپیریال متغیر مشخص کړئ: SECRET_NAME=kvendingoldo-dotnet-demo-crash 2.3: د Python کوډ په Lambda کې اپلوډ کړئ import json import urllib3 import os import boto3 def get_secret(secret_name): client = boto3.client("secretsmanager") try: response = client.get_secret_value(SecretId=secret_name) if "SecretString" in response: secret = response["SecretString"] try: return json.loads(secret) except json.JSONDecodeError: return secret else: return response["SecretBinary"] except Exception as e: print(f"Error retrieving secret: {e}") return None def lambda_handler(event, context): print("Event received:", json.dumps(event)) secret_name = os.environ.get('SECRET_NAME', '') if secret_name == "": return { 'statusCode': 500, 'body': json.dumps("SECRET_NAME env variable is empty") } secret = get_secret(secret_name) slack_webhook_url = secret["slack_webhook_url"] for record in event['Records']: bucket_name = record['s3']['bucket']['name'] file_name = record['s3']['object']['key'] region = record['awsRegion'] if ".aws" in file_name: print(f"Skipping internal file: {file_name}") continue message = ( f":package: *New .NET dump is uploaded!*\n\n" f":cloud: Bucket: `{bucket_name}`\n" f":floppy_disk: File: `{file_name}`\n" f":link: Link: https://{bucket_name}.s3.{region}.amazonaws.com/{file_name}" ) http = urllib3.PoolManager() slack_resp = http.request( "POST", slack_webhook_url, body=json.dumps({ "text": message }), headers={ "Content-Type": "application/json" } ) if slack_resp.status != 200: raise Exception( f"Slack webhook request failed with status {slack_resp.status}: {slack_resp.data.decode('utf-8')}") return { "statusCode": 200, "body": json.dumps("Message has been sent successfully!") } 2.4: د S3 بکس لپاره د S3 واقعې خبرتیاوې تنظیم کړئ. د دې لپاره، د او انتخاب » ". د لاندې انتخاباتو په کارولو سره د واقعې ترتیب کړئ: Bucket -> ملکیتونه -> د واقعې خبرتیاوې د واقعې خبرتیا جوړ کړئ د واقعې نوم: kvendingoldo-dotnet-demo-crash د پروګرام: Dumps / د واقعې ډول: s3:ObjectCreated:* Target: <Your Lambda function Name> د EFS ذخیره کولو پاکولو تنظیم کړئ بشپړ، د .NET ډیمپ سپارښتنه چمتو دی، مګر د قدیم ډیمپ په اړه څه؟ EFS به موږ ته اجازه نه ورکوي چې د ژوند چرګونه پالیسۍ په کارولو سره د قدیم فایلونو حذف کړي؛ موږ کولی شو دوی یوازې د غیر معمولي لاس رسی ډول ته انتقال کړي، کوم چې نه کافی دی که موږ د غیر ضروری فضا لپاره پیسې ورکړئ. د دې ستونزو د حل لپاره، د دوو انتخابونه شتون لري: Create ECS sidecar container that will clean up old EFS files at the initialization phase. د ECS sidecar کانټینر جوړ کړئ چې په لومړنۍ مرحله کې د EFS فایلونه پاکوي. د Lambda یا ECS ورکشاپ جوړ کړئ چې د EFS نصب کړي، او د CRON لخوا د قدیم فایلونه پاک کړئ. په هر دوو کې چمتو کړئ. انتخاب 1: د AWS Lambda دا غوره حل دی ځکه چې دا د ECS کارونو د ژوند چرګانو او نورو عوامل له امله اغیزه نه کوي. د دې ستراتیژۍ ترسره کولو لپاره، تاسو اړتیا لرئ چې د EFS ذخیره کولو سره د Lambda فعالیت جوړ کړئ (د فایبر سیسټم په Lambda کې نصب کولو په اړه نور معلومات ترلاسه کړئ) ) او لاندې Python کوډ: the official doc د رسمي DOC import os import time import json def lambda_handler(event, context): # Note: you can only mount the filesystem to the /mnt/ directory. directory = '/mnt/dumps' # File pattern to match pattern = 'crash.dmp' # Time in minutes (by default 1d) minutes_old = 1440 # Convert minutes to seconds age_seconds = minutes_old * 60 # Current time now = time.time() for root, dirs, files in os.walk(directory): for file in files: if pattern in file: file_path = os.path.join(root, file) file_mtime = os.path.getmtime(file_path) if now - file_mtime > age_seconds: print(f"Found a file that older than {minutes_old} minutes: {file_path}") try: os.remove(file_path) except Exception as e: print(f"Failed to delete {file_path}: {e}") return { "statusCode": 200, "body": json.dumps("EFS clean-up completed successfully!") } لکه څنګه چې تاسو کولی شئ وګورئ، دا یو ساده کوډ دی چې د يو ورځ څخه ډیر عمر لرونکي فایلونه څخه پاکوي. کله چې ستاسو Lambda چمتو دی، موږ هم باید د CRON تیکر تنظیم کړئ ترڅو دنده په وخت کې چلول شي. دا کولی شي د__ په کارولو سره جوړ شي د Cloudwatch د واقعې قانون دا دی، د ټولو دغو مراحل وروسته ستاسو د EFS ذخیره کولو به ستاسو د CRON جدول په اتوماتيک ډول پاک شي. انتخاب 2: د ECS sidecar کنټرولر. د دې اختیاري فعالولو لپاره، موږ باید زموږ د taskdefinition ته د نوي container اضافه کړئ: { "essential": false, "name": "janitor", "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": [ "bash", "-lc", "find /dumps -name '*crash.dmp*' -type f -mmin +10080 -print -delete" ], "mountPoints": [ { "containerPath": "/dumps", "readOnly": false, "sourceVolume": "dotnet-dumps" } ], "linuxParameters": { "initProcessEnabled": true } } د دې ماموریت په پای کې منطق: د دوو کانټینرونو سره د نوي ECS ورکشاپ پیل کړئ: app او janitor په janitor کانټینر کې د عمر لرونکي EFS فایلونه پاک کړئ او خارج کړئ. په هرصورت، دا کار به د ECS انتخاب "د اړتیا": غلط له امله متوقف نه شي. لکه څنګه چې تاسو کولی شئ وګورئ، دا تکنالوژۍ خورا ساده دی او د Find امر پر بنسټ دی، کوم چې تاسو کولی شئ تنظیم کړئ. په مثال کې، دا د 10،080 دقیقې (7 ورځو) څخه عمر لرونکي فایلونه حذف کوي. البته، دا ستراتیژۍ د اوږد ژوند ECS کارونو په کارولو کې لږ تر اړتیا لري، مګر دا ممکن د مختصر ژوند ECS کارونو یا پروتوټینګ لپاره ډیر مناسب وي. د آزموینې وخت په دې برخه کې، موږ به د .NET غوښتنلیک د جوړولو په عمیق ډول نه کړي. د ازموینې لپاره، تاسو کولی شئ د چې موږ په پیل کې کارول. د نمونوي Aspnetapp د نمونوي Aspnetapp د .NET خراب کولو لپاره ساده ترین لاره ده دا روش معمولا د نمونې لپاره کارول کیږي . Environment.FailFast() سخت crashes ایا موږ د crash simulate کوو: Add Environment.FailFast("kvendingoldo-dotnet-demo-crash .NET مثال crash"); لړۍ ته dotnet-docker/samples/aspnetapp/aspnetapp/Program.cs فایل. د نوي ډیکر انځور جوړ کړئ، او د ECS ورکشاپ بیا جوړ کړئ. ECS Task به ختم شي، مګر لومړی د .NET crash dump جوړوي، کوم چې په ځینې ثانیو کې په S3 کې شتون لري. په پایله مرحله کې، تاسو به په Slack کې یو پیغام ترلاسه کړئ لکه څنګه: 📦 New .NET dump is uploaded! ☁️ Bucket: kvendingoldo-dotnet-demo-crash 💾 File: 1739104252-kvendingoldo-dotnet-demo-crash.dmp 🔗 Link: https://kvendingoldo-dotnet-demo-crash.s3.us-east-2.amazonaws.com/1739104252-kvendingoldo-dotnet-demo-crash.dmp احتمالي پرمختګونه مخکې له دې چې د مقاله پوښښ، زه غواړم د احتمالي بدلونونو په اړه ځینې نظرونه ورکړئ: دا به د S3 اجزاو لپاره مخکښ URLs جوړولو لپاره یو ښه خیال وي. د S3 کڅوړه لپاره د ژوند چرګانو پالیسۍ تنظیم کړئ ترڅو د کڅوړه څخه د قدیم کڅوړه په اتوماتيک ډول حذف کړئ Use SNS to send notifications about new S3 objects to multiple destinations Conclusion په تولیدي چاپیریالونو کې، د بریښنا په اړه چټک ښودلو مهم دی. اتومات ډیمپ سپارښتنه د MTTR (Mean Time To Resolution) کموي او د حادثاتو ځواب ښه کوي. لکه څنګه چې تاسو کولی شئ وګورئ، د دې پروسه implementing نه ده لکه څنګه چې تاسو کولی شئ انتظار وکړئ. بله، موږ د AWS خدماتو ډیری کارونو کارولو لپاره کار واخلئ، مګر کله چې موږ په عمده توګه وګورئ، دوی ټول مهم دي. زه امیدوارم چې دا مقاله تاسو سره مرسته وکړي چې د شخصي سپارلو د چڼاسکه جوړ کړي او ستاسو د پراختیا ټیم خوشحاله کړي. په وړیا توګه د وړاندیز شوي لارښوونې بدل کړئ، او لطفا په هر وخت کې زما سره اړیکه ونیسئ که تاسو کومه پوښتنې لري. خوشحاله coding!