نصائح حول Google Cloud S3

@Pfaffman تم فصل هذه المعلومات الخاصة بـ Google Cloud، والتي لا تتناسب بالضرورة مع المنشور الأصلي، ولكن يجب حفظها لمن يواجهون صعوبة مع Google Cloud.


مرحباً،

شكراً على النصيحة، لكنها لم تعمل معي حتى قمت بتغيير الدور من “مالك كائن التخزين القديم” (Storage Legacy Object Owner) إلى “مالك حاوية التخزين القديمة” (Storage Legacy Bucket Owner).

وهذا ما هو مكتوب تحديداً في التلميح أثناء اختيار الدور:

مالك كائن التخزين القديم (Storage Legacy Object Owner)

الوصول للقراءة/الكتابة للكائنات الموجودة بدون سرد.

مالك حاوية التخزين القديمة (Storage Legacy Bucket Owner)

الوصول للقراءة والكتابة للحاويات الموجودة مع سرد الكائنات/إنشائها/حذفها.

الآن يعمل، بما في ذلك السرد الذي يتيح النسخ الاحتياطي التلقائي! يا للروعة!!

3 إعجابات

حول استخدام S3 على Google Buckets:

كما ذكرت هنا:
https://meta.discourse.org/t/using-object-storage-for-uploads-s3-clones/148916/334
يمكنني تأكيد أن القائمة تعمل وأن النسخ الاحتياطي التلقائي يعمل باستخدام حساب خدمة لديه دور مالك مستودع التخزين القديم (Storage Legacy Bucket Owner) على المستودع.

كن على علم بأن استخدام S3 لمستودعات Google يعني تحديد منطقة لها نفس الاسم في Amazon كما في Google.
أجد أنه من السخيف أن تضطر إلى الاختيار من قائمة منسدلة مع التحقق من صحة الواجهة الخلفية (حاولت العبث بواجهة برمجة التطبيقات دون نجاح) بدلاً من كتابتها.

هذا يعني أنه لا يمكنك استخدام مستودع في أوروبا على سبيل المثال لأن البادئة في Amazon هي EU و EUROPE في Google، ولا يمكنك استخدام مناطق متعددة.

AWS:

اسم المنطقة الرمز
شرق الولايات المتحدة (أوهايو) us-east-2
شرق الولايات المتحدة (فرجينيا الشمالية) us-east-1
غرب الولايات المتحدة (كاليفورنيا الشمالية) us-west-1
غرب الولايات المتحدة (أوريغون) us-west-2
أفريقيا (كيب تاون) af-south-1
آسيا والمحيط الهادئ (هونغ كونغ) ap-east-1
آسيا والمحيط الهادئ (جاكرتا) ap-southeast-3
آسيا والمحيط الهادئ (مومباي) ap-south-1
آسيا والمحيط الهادئ (أوساكا) ap-northeast-3
آسيا والمحيط الهادئ (سيول) ap-northeast-2
آسيا والمحيط الهادئ (سنغافورة) ap-southeast-1
آسيا والمحيط الهادئ (سيدني) ap-southeast-2
آسيا والمحيط الهادئ (طوكيو) ap-northeast-1
كندا (وسط) ca-central-1
الصين (بكين) cn-north-1
الصين (نينغشيا) cn-northwest-1
أوروبا (فرانكفورت) eu-central-1
أوروبا (أيرلندا) eu-west-1
أوروبا (لندن) eu-west-2
أوروبا (ميلانو) eu-south-1
أوروبا (باريس) eu-west-3
أوروبا (ستوكهولم) eu-north-1
الشرق الأوسط (البحرين) me-south-1
أمريكا الجنوبية (ساو باولو) sa-east-1

Google:

القارة اسم المنطقة وصف المنطقة
أمريكا الشمالية
NORTHAMERICA-NORTHEAST1 مونتريال أيقونة ورقة شجر انبعاثات كربونية منخفضة
NORTHAMERICA-NORTHEAST2 تورنتو أيقونة ورقة شجر انبعاثات كربونية منخفضة
US-CENTRAL1 أيوا أيقونة ورقة شجر انبعاثات كربونية منخفضة
US-EAST1 كارولينا الجنوبية
US-EAST4 فرجينيا الشمالية
US-EAST5 كولومبوس
US-SOUTH1 دالاس
US-WEST1 أوريغون أيقونة ورقة شجر انبعاثات كربونية منخفضة
US-WEST2 لوس أنجلوس
US-WEST3 سولت ليك سيتي
US-WEST4 لاس فيغاس
أمريكا الجنوبية
SOUTHAMERICA-EAST1 ساو باولو أيقونة ورقة شجر انبعاثات كربونية منخفضة
SOUTHAMERICA-WEST1 سانتياغو
أوروبا
EUROPE-CENTRAL2 وارسو
EUROPE-NORTH1 فنلندا أيقونة ورقة شجر انبعاثات كربونية منخفضة
EUROPE-SOUTHWEST1 مدريد أيقونة ورقة شجر انبعاثات كربونية منخفضة
EUROPE-WEST1 بلجيكا أيقونة ورقة شجر انبعاثات كربونية منخفضة
EUROPE-WEST2 لندن
EUROPE-WEST3 فرانكفورت
EUROPE-WEST4 هولندا
EUROPE-WEST6 زيورخ أيقونة ورقة شجر انبعاثات كربونية منخفضة
EUROPE-WEST8 ميلانو
EUROPE-WEST9 باريس أيقونة ورقة شجر انبعاثات كربونية منخفضة
آسيا
ASIA-EAST1 تايوان
ASIA-EAST2 هونغ كونغ
ASIA-NORTHEAST1 طوكيو
ASIA-NORTHEAST2 أوساكا
ASIA-NORTHEAST3 سيول
ASIA-SOUTH1 مومباي
ASIA-SOUTH2 دلهي
ASIA-SOUTHEAST1 سنغافورة
إندونيسيا
ASIA-SOUTHEAST2 جاكرتا
أستراليا
AUSTRALIA-SOUTHEAST1 سيدني
AUSTRALIA-SOUTHEAST2 ملبورن

أجد أيضًا أنه من السخيف الاضطرار إلى تعيين هذه الخيارات في إعدادات الملفات. لم أستخدم S3 لتحميل الملفات، بل استخدمته فقط للنسخ الاحتياطي. يلزم وجود مستودع مختلف للتحميلات والنسخ الاحتياطية، ولكن هناك مكان واحد فقط لتعيين المنطقة وهو في إعدادات الملفات.

آمل أن يوفر هذا الوقت على أي شخص آخر يحاول اكتشاف ذلك.

ملاحظة: قمت بتصحيح الأخطاء باستخدام https://discourse.example.com/logs/

فشل في سرد النسخ الاحتياطية من S3: قيد الموقع المحدد غير صالح. – مشكلة المنطقة

فشل في سرد النسخ الاحتياطية من S3: تم رفض الوصول. – مالك مستودع التخزين القديم بدلاً من مالك مستودع التخزين القديم

إعجاب واحد (1)

إذا قمت بالإعداد باستخدام متغيرات البيئة كما هو موضح في المنشور الأصلي، وقمت بتعيين DISCOURSE_S3_ENDPOINT كما هو موصى به، فسيتم تجاهل DISCOURSE_S3_REGION مما يجعل هذه مشكلة غير موجودة.

إعجابَين (2)

شكرا،
المسألة هي أنني أستخدم تثبيت bitnami vm بنقرة واحدة من سوق Google Cloud.
من المحتمل أن يكون من الممكن تخصيص متغيرات البيئة ولكن ليس بشكل مباشر.
تعيين نقطة النهاية في واجهة المستخدم لا يتجاهل المنطقة.

شكرا على أي حال

شكرا جزيلا لك!
بالفعل نسيت إضافة المقتطف.

للأسف، أحصل على الخطأ التالي:

Aws::S3::Errors::InvalidArgument: Invalid argument.

وهذا يتوافق تمامًا مع الخطأ الذي حصلت عليه أثناء استخدام واجهة المستخدم الرسومية، ولكنه لا يقدم الكثير من المعلومات لحل المشكلة…

وجدت هذا الموضوع الذي يشير إلى احتمال وجود عدم توافق مع Google Storage مقارنة بـ Amazon S3.

هل يمكن أن يكون هذا معطلاً لـ Google Storage؟

المكدس الكامل عند تشغيل المهمة يدويًا:

root@discourse-2-app:/var/www/discourse# sudo -E -u discourse bundle exec rake s3:upload_assets --trace
** Invoke s3:upload_assets (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke s3:ensure_cors_rules (first_time)
** Invoke environment
** Execute s3:ensure_cors_rules
Installing CORS rules...
skipping
** Execute s3:upload_assets
Uploading: assets/docker-manager-app-ecd2975f42c4096057a046c086d6a43905c8a18442900d5293ae9a3489422bb0.js
rake aborted!
Aws::S3::Errors::InvalidArgument: Invalid argument.
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/dualstack.rb:27:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/accelerate.rb:56:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/checksum_algorithm.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/request_callback.rb:71:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/client.rb:12369:in `put_object'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/object.rb:1472:in `put'
/var/www/discourse/lib/s3_helper.rb:75:in `upload'
/var/www/discourse/lib/tasks/s3.rake:37:in `block in upload'
/var/www/discourse/lib/tasks/s3.rake:36:in `open'
/var/www/discourse/lib/tasks/s3.rake:36:in `upload'
/var/www/discourse/lib/tasks/s3.rake:192:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/s3.rake:191:in `each'
/var/www/discourse/lib/tasks/s3.rake:191:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/rake:25:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/rake:25:in `<top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:485:in `exec'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:31:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:25:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:48:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:36:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets

ملاحظة: أنا لا أفكر في تغيير الحاوية ولكن أتساءل عما سيحدث للصور التي تم تحميلها سابقًا على قرص الجهاز الافتراضي.

تعديل (تم الحل):
@gerhard @Falco
لقد وجدت سبب المشكلة عن طريق تمكين http_wire_trace.
الاستجابة “argument invalid” من googleapis تشرح ذلك:
لا يمكن إدراج ACL قديم لكائن عندما يكون الوصول على مستوى الحاوية الموحد ممكّنًا. اقرأ المزيد على Uniform bucket-level access  |  Cloud Storage  |  Google Cloud

لقد قمت بتمكين ACL مفصل على الحاوية بدلاً من ACL الموحد لأن الرأس الذي تم تعيينه أثناء التحميل يحدد أنه عام. (كان لدي ACL موحد وقمت بتعيين الحاوية بأكملها لتكون عامة).

ليس لدي الحق في تحديث المنشور الأصلي ولكني أعتقد أنه يجب أن يذكر أنه لكي تعمل حاويات Google، يجب أن يكون لحساب الخدمة دور Storage Legacy Bucket Owner على حاوية النسخ الاحتياطي، ويجب أن تستخدم حاوية التحميل ACL مفصل.

آمل أن يوفر هذا الوقت للمجتمع.
شكرًا مرة أخرى لـ @Falco @pfaffman @gerhard @tuanpembual على المساعدة هنا.

إعجابَين (2)