مستندات n8n
74+ نود
☁️

آمازون S3

AWS S3

مدیریت فایل در Amazon S3 و سرویس‌های سازگار مانند MinIO و Arvan Cloud

ذخیره‌سازی
متوسط
۰ بازدید
n8n 1.0+

نمای کلی

نود AWS S3 ابزاری قدرتمند برای مدیریت ذخیره‌سازی ابری Object Storage است.

Amazon S3 چیست؟

Amazon Simple Storage Service (S3) یکی از محبوب‌ترین سرویس‌های ذخیره‌سازی ابری دنیاست که فایل‌ها را به صورت Object در Bucketها ذخیره می‌کند. S3 مقیاس‌پذیری نامحدود، دسترسی بالا (99.999999999% durability) و قیمت‌گذاری بر اساس مصرف ارائه می‌دهد.

مدل Bucket/Object:

  • Bucket: مخزن اصلی فایل‌ها (مانند پوشه ریشه)، نام آن باید در کل جهان منحصر به فرد باشد
  • Object: هر فایل ذخیره شده شامل Key (مسیر)، Value (محتوا) و Metadata
  • Prefix: شبیه‌سازی پوشه‌بندی با / در Key (مثل: images/2024/photo.jpg)

Storage Classes (کلاس‌های ذخیره‌سازی):

  • S3 Standard: دسترسی مکرر، بالاترین سرعت
  • S3 Intelligent-Tiering: جابجایی خودکار بر اساس الگوی دسترسی
  • S3 Standard-IA: دسترسی نادر، ارزان‌تر
  • S3 One Zone-IA: یک منطقه، ارزان‌ترین برای داده غیرحیاتی
  • S3 Glacier: آرشیو بلندمدت (بازیابی ساعت‌ها)
  • S3 Glacier Deep Archive: ارزان‌ترین، بازیابی 12 ساعت

سرویس‌های S3-Compatible:

پروتکل S3 استاندارد صنعتی شده و سرویس‌های زیادی از آن پشتیبانی می‌کنند:

  • MinIO: متن‌باز، self-hosted، ایده‌آل برای ایران (بدون نیاز به VPN)
  • DigitalOcean Spaces: ساده و ارزان
  • Backblaze B2: ارزان‌ترین گزینه ابری
  • Arvan Cloud Object Storage: سرویس ایرانی، بدون تحریم
  • Cloudflare R2: بدون هزینه Egress

احراز هویت

احراز هویت AWS S3

روش 1: IAM Access Key (رایج‌ترین)

#### مراحل ایجاد IAM User:

  1. 1به [AWS Console](https://console.aws.amazon.com/iam/) وارد شوید
  2. 2IAM > Users > Add User
  3. 3نام کاربر: مثل n8n-s3-user
  4. 4Access type: Programmatic access فعال کنید
  5. 5Permissions: یکی از این روش‌ها:

#### IAM Policy پیشنهادی (حداقل دسترسی):

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket-name",
        "arn:aws:s3:::my-bucket-name/*"
      ]
    }
  ]
}
  1. 1Access Key ID و Secret Access Key را کپی کنید

#### تنظیم در n8n:

  1. 1Credentials > AWS > S3
  2. 2Access Key ID وارد کنید
  3. 3Secret Access Key وارد کنید
  4. 4Region انتخاب کنید (مثل: eu-west-1)
  5. 5Test Connection بزنید

روش 2: سرویس‌های S3-Compatible (MinIO, Arvan)

برای سرویس‌های غیر-AWS، فقط Endpoint URL تغییر می‌کند:

code
MinIO:
  Endpoint: https://minio.your-server.com
  Access Key: minioadmin
  Secret Key: minioadmin123

Arvan Cloud:
  Endpoint: https://s3.ir-thr-at1.arvanstorage.ir
  Access Key: از پنل آروان

DigitalOcean Spaces:
  Endpoint: https://nyc3.digitaloceanspaces.com
  Access Key: از پنل DigitalOcean

Backblaze B2:
  Endpoint: https://s3.us-west-004.backblazeb2.com
  Access Key: Application Key ID
  Secret Key: Application Key

نکات امنیتی:

  • هرگز از Root Account Key استفاده نکنید
  • حداقل دسترسی لازم (Least Privilege) تنظیم کنید
  • Access Keyها را مرتب Rotate کنید
  • Secret Key را در متغیرهای محیطی نگهداری کنید

عملیات‌های موجود

1

upload

آپلود فایل جدید یا جایگزینی فایل موجود در Bucket

2

download

دانلود فایل از Bucket و دریافت به صورت Binary Data

3

delete

حذف یک Object از Bucket

4

list

لیست تمام Objectهای داخل یک Bucket یا Prefix خاص

5

copy

کپی فایل از یک مکان به مکان دیگر (حتی بین Bucketها)

6

getUrl

دریافت URL مستقیم فایل (فقط برای فایل‌های public)

7

presignedUrl

ایجاد لینک دسترسی موقت با زمان انقضا (بدون نیاز به عمومی بودن فایل)

8

createBucket

ایجاد Bucket جدید

9

deleteBucket

حذف Bucket (باید خالی باشد)

10

listBuckets

دریافت لیست تمام Bucketهای موجود در اکانت

11

getMetadata

دریافت اطلاعات فایل بدون دانلود محتوا (حجم، نوع، تاریخ، متادیتا)

12

setAcl

تغییر سطح دسترسی Object یا Bucket

13

multipartUpload

آپلود فایل‌های بزرگ به صورت چند قسمتی (برای فایل‌های بالای 100MB)

14

headObject

بررسی وجود یک Object بدون دانلود آن (کاربرد: چک کردن قبل از آپلود)

15

getObjectTagging

دریافت Tag‌های اختصاص داده شده به Object برای دسته‌بندی و مدیریت هزینه

کاربردهای متداول

1. بک‌آپ خودکار دیتابیس روزانه

ذخیره بک‌آپ‌های دیتابیس در S3:

code
Schedule (هر شب ساعت 2)
  → SSH Command (mysqldump database > backup.sql)
  → Compression (gzip backup.sql)
  → AWS S3 (Upload)
    Bucket: my-backups
    Key: database/{{$now.toFormat('yyyy/MM/dd')}}/backup.sql.gz
    StorageClass: STANDARD_IA
  → Telegram (گزارش بک‌آپ)
  → AWS S3 (حذف بک‌آپ‌های قدیمی‌تر از 30 روز)

2. پردازش تصاویر آپلودی

پایپلاین پردازش عکس:

code
Webhook (آپلود تصویر)
  → AWS S3 (Upload: originals/photo.jpg)
  → HTTP Request (API تغییر اندازه تصویر)
  → AWS S3 (Upload: thumbnails/photo_thumb.jpg)
  → AWS S3 (Upload: medium/photo_medium.jpg)
  → MySQL (ذخیره URLها)
  → Respond to Webhook (لینک تصاویر)

3. میزبانی سایت استاتیک

دیپلوی خودکار فایل‌های سایت:

code
GitHub Trigger (Push to main)
  → HTTP Request (دانلود فایل‌های build)
  → Loop (هر فایل)
    → AWS S3 (Upload با Content-Type مناسب)
      Bucket: my-website
      ACL: public-read
  → CloudFront (Invalidation)

4. مدیریت رسانه فروشگاه

آپلود و سازماندهی تصاویر محصولات:

code
Webhook (محصول جدید)
  → Loop (هر تصویر)
    → AWS S3 (Upload)
      Key: products/{{$json.productId}}/{{$json.index}}.jpg
      ACL: public-read
      Metadata: {productName: "...", category: "..."}
  → MySQL (ذخیره لینک‌ها)
  → AWS S3 (Presigned URL: لینک موقت برای پنل مدیریت)

5. جمع‌آوری و آرشیو لاگ‌ها

ذخیره لاگ‌های اپلیکیشن:

code
Webhook (لاگ جدید)
  → Code (فرمت‌دهی JSON Lines)
  → AWS S3 (Upload)
    Key: logs/{{$json.service}}/{{$now.toFormat('yyyy/MM/dd/HH')}}.jsonl
    StorageClass: GLACIER (بعد از 30 روز)

6. Data Lake با S3

ذخیره داده‌های تحلیلی:

code
Schedule (هر ساعت)
  → MySQL (داده‌های جدید)
  → Code (تبدیل به Parquet/CSV)
  → AWS S3 (Upload)
    Key: data-lake/events/year={{$now.year}}/month={{$now.month}}/data.csv
  → Telegram (گزارش تعداد رکوردها)

7. CDN Origin برای فایل‌ها

S3 به عنوان منبع CloudFront:

code
Webhook (فایل جدید)
  → AWS S3 (Upload)
    Bucket: cdn-origin
    Key: assets/{{$json.category}}/{{$json.filename}}
    CacheControl: max-age=31536000
  → Set (URL CDN)
    URL: https://cdn.example.com/assets/...
  → MySQL (ذخیره لینک CDN)

8. مدیریت اسناد و فاکتورها

آرشیو خودکار فاکتورها:

code
Webhook (پرداخت موفق)
  → HTTP Request (تولید PDF فاکتور)
  → AWS S3 (Upload)
    Key: invoices/{{$now.toFormat('yyyy')}}/INV-{{$json.invoiceId}}.pdf
    Metadata: {customerId: "...", amount: "..."}
  → AWS S3 (Presigned URL: لینک 24 ساعته)
  → Email (ارسال لینک دانلود به مشتری)

9. Replication بین مناطق

کپی فایل‌ها برای Disaster Recovery:

code
Schedule (هر 6 ساعت)
  → AWS S3 (List: critical-data/)
  → Loop
    → AWS S3 (Copy)
      Source: primary-bucket/critical-data/
      Destination: backup-bucket-eu/critical-data/
  → Telegram (گزارش Replication)

10. آرشیو بلندمدت

انتقال فایل‌های قدیمی به Glacier:

code
Schedule (هر هفته)
  → AWS S3 (List: فایل‌های قدیمی‌تر از 90 روز)
  → Loop
    → AWS S3 (Copy با StorageClass: GLACIER)
    → AWS S3 (Delete فایل اصلی)
  → Telegram (تعداد فایل‌های آرشیو شده)

نکات حرفه‌ای

نکات حرفه‌ای

  1. 1Presigned URL برای آپلود مستقیم: بدون عبور ترافیک از سرور:
code
Webhook → AWS S3 (Presigned URL: putObject)
     Expires: 600 (10 دقیقه)
   → Respond (URL برای آپلود مستقیم از Browser)
   // Client با PUT مستقیم فایل را آپلود می‌کند
  1. 1Storage Class انتخاب مناسب: صرفه‌جویی تا 90%:
code
فایل‌های فعال: STANDARD
   بک‌آپ‌های ماهانه: STANDARD_IA
   لاگ‌های قدیمی: GLACIER
   آرشیو قانونی: GLACIER_DEEP_ARCHIVE
  1. 1Lifecycle Policy: انتقال خودکار بین کلاس‌ها:
code
روز 0: STANDARD
   بعد 30 روز: STANDARD_IA
   بعد 90 روز: GLACIER
   بعد 365 روز: حذف خودکار
   // از AWS Console > Bucket > Management > Lifecycle
  1. 1Versioning فعال کنید: محافظت از حذف تصادفی:
code
Bucket > Properties > Versioning > Enable
   // هر بار آپلود مجدد، نسخه قبلی حفظ می‌شود
   // قابل بازیابی با versionId
  1. 1Server-Side Encryption: رمزگذاری خودکار:
code
AES256: رمزگذاری رایگان توسط AWS
   aws:kms: رمزگذاری با کلید اختصاصی KMS
   // Bucket > Properties > Default Encryption
  1. 1MinIO به عنوان جایگزین S3 برای ایران:
code
MinIO یک Object Storage متن‌باز و S3-compatible است.
   مزایا برای کاربران ایرانی:
   - بدون نیاز به VPN یا پرداخت دلاری
   - نصب روی سرور خودتان
   - کاملاً سازگار با نود AWS S3 در n8n
   - رابط وب مدیریتی

   نصب با Docker:
   docker run -p 9000:9000 -p 9001:9001 \
     -e MINIO_ROOT_USER=admin \
     -e MINIO_ROOT_PASSWORD=password123 \
     minio/minio server /data --console-address ":9001"

   در n8n: Endpoint = http://minio-server:9000
  1. 1Multipart Upload برای فایل‌های بزرگ:
code
فایل < 5MB: آپلود عادی
   فایل 5MB-5GB: Multipart با Part Size 5MB
   فایل > 5GB: Multipart با Part Size بزرگ‌تر
   // حداکثر 10,000 Part
  1. 1Content-Type صحیح تنظیم کنید:
code
.jpg → image/jpeg
   .png → image/png
   .pdf → application/pdf
   .json → application/json
   .html → text/html
   .css → text/css
   .js → application/javascript
   .gz → application/gzip
   // مهم برای سرو صحیح فایل‌ها توسط Browser
  1. 1Custom Metadata برای جستجو و دسته‌بندی:
code
x-amz-meta-project: "my-app"
   x-amz-meta-uploader: "workflow-123"
   x-amz-meta-category: "invoice"
   // قابل خواندن با HeadObject
  1. 1ACL vs Bucket Policy:
code
ACL: دسترسی ساده در سطح Object
      → private, public-read, public-read-write
    Bucket Policy: کنترل دقیق‌تر با JSON
      → IP فیلتر، زمان، شرط‌های پیچیده
    توصیه AWS: از Bucket Policy استفاده کنید، ACL خاموش
  1. 1Transfer Acceleration: آپلود سریع‌تر از مناطق دور:
code
Bucket > Properties > Transfer Acceleration > Enable
    Endpoint: bucketname.s3-accelerate.amazonaws.com
    // از شبکه Edge Location AWS استفاده می‌کند
  1. 1Event Notifications: اعلان خودکار رویدادها:
code
S3 Event → SNS/SQS/Lambda
    رویدادها: s3:ObjectCreated, s3:ObjectRemoved
    // در n8n: از AWS SNS Trigger استفاده کنید
  1. 1بهینه‌سازی هزینه:
code
- Lifecycle Policy فعال کنید
    - Intelligent-Tiering برای الگوی دسترسی متغیر
    - فایل‌های غیرضروری پاک کنید
    - از CloudFront جلوی S3 بگذارید (کاهش هزینه Transfer)
    - Versioning Cleanup: نسخه‌های قدیمی پاک شوند
    - S3 Analytics برای بررسی الگوی استفاده
  1. 1نام‌گذاری استاندارد Key:
code
پوشه‌بندی منطقی:
    uploads/{userId}/{year}/{month}/{filename}
    backups/{service}/{date}/backup.sql.gz
    assets/images/{category}/{productId}.jpg
    logs/{service}/{year}/{month}/{day}/{hour}.log

    // از / ابتدایی استفاده نکنید
    // از فاصله و کاراکتر خاص پرهیز کنید
  1. 1Cross-Account Access: دسترسی بین اکانت‌ها:
code
Bucket Policy:
    {
      "Principal": {"AWS": "arn:aws:iam::ACCOUNT_ID:root"},
      "Action": ["s3:GetObject"],
      "Resource": "arn:aws:s3:::bucket/*"
    }
    // مفید برای اشتراک داده بین تیم‌ها
    // یا دسترسی سرویس ثالث

رفع مشکلات

خطاهای رایج و راه‌حل‌ها

1. خطای 403 AccessDenied

علت: کاربر IAM دسترسی لازم به Bucket یا Object را ندارد

راه‌حل

  • IAM Policy را بررسی کنید: آیا Action مورد نظر (s3:PutObject, s3:GetObject) مجاز است؟
  • Resource در Policy باید هم Bucket و هم Object را شامل شود:
code
"Resource": [
    "arn:aws:s3:::bucket-name",
    "arn:aws:s3:::bucket-name/*"
  ]
  • Bucket Policy جداگانه بررسی شود (ممکن است Deny صریح داشته باشد)
  • Block Public Access تنظیمات Bucket چک شود

2. خطای 404 NoSuchKey

علت: فایل (Object) با این Key وجود ندارد

راه‌حل

  • Key را دقیقاً بررسی کنید (Case-sensitive است)
  • فاصله یا کاراکتر اضافی در Key نباشد
  • از List استفاده کنید تا Key دقیق را پیدا کنید
  • Prefix اشتباه نباشد (مثلاً /images/ به جای images/)
  • توجه: S3 با / شروع نمی‌شود

3. خطای 404 NoSuchBucket

علت: Bucket با این نام وجود ندارد

راه‌حل

  • نام Bucket را بررسی کنید (حروف کوچک، بدون فاصله)
  • Region درست تنظیم شده باشد
  • Bucket حذف نشده باشد
  • از ListBuckets برای بررسی لیست Bucketها استفاده کنید

4. خطای SignatureDoesNotMatch

علت: Access Key یا Secret Key اشتباه است

راه‌حل

  • Secret Access Key را مجدداً کپی کنید (بدون فاصله اضافی)
  • Region صحیح تنظیم شده باشد
  • ساعت سرور n8n دقیق باشد (AWS Signature حساس به زمان است)
  • برای S3-Compatible: Endpoint URL صحیح وارد شده باشد
  • Signature Version: v4 استفاده کنید

5. خطای 503 SlowDown (Rate Limit)

علت: تعداد درخواست‌ها بیش از حد مجاز

راه‌حل

  • بین درخواست‌ها Wait اضافه کنید:
code
Loop → AWS S3 → Wait (100ms) → Next
  • از Batch درخواست‌ها استفاده کنید
  • Prefix‌ها را توزیع کنید (از Prefix یکسان پرهیز)
  • Retry on Fail فعال کنید

6. خطای CORS در Browser

علت: تنظیمات CORS روی Bucket انجام نشده

راه‌حل

  • CORS Configuration برای Bucket تنظیم کنید:
json
[
    {
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET", "PUT", "POST"],
      "AllowedOrigins": ["https://your-domain.com"],
      "MaxAgeSeconds": 3600
    }
  ]
  • توجه: در n8n سمت سرور CORS مشکلی ندارد، فقط در آپلود مستقیم از Browser

7. Timeout در فایل‌های بزرگ

علت: فایل بیش از حد بزرگ برای آپلود یکپارچه

راه‌حل

  • برای فایل‌های بالای 100MB از Multipart Upload استفاده کنید
  • Timeout نود را افزایش دهید
  • اتصال اینترنت سرور n8n بررسی شود
  • حداکثر حجم: 5TB (ولی Multipart باید باشد)

8. خطای BucketAlreadyExists

علت: نام Bucket توسط اکانت دیگری استفاده شده (نام‌ها در کل جهان منحصر به فرد هستند)

راه‌حل

  • نام دیگری انتخاب کنید
  • از پیشوند منحصر به فرد استفاده کنید: mycompany-production-assets
  • از UUID یا تاریخ در نام استفاده نکنید (خوانایی کم)
  • قوانین نام‌گذاری: 3-63 کاراکتر، حروف کوچک، اعداد و خط تیره
اشتراک‌گذاری:

آیا این مستندات مفید بود؟