এস 3 বালতিগুলির মধ্যে ফাইলগুলি সরানোর সর্বোত্তম উপায়?


90

আমি প্রতিদিন একটি প্রোডাকশন বালতি থেকে কিছু ডেভলপমেন্ট বালতিতে অনুলিপি করতে চাই।

উদাহরণস্বরূপ: প্রোডাকশনবকেট / ফিড / ফিডনাম / তারিখ বিকাশবুকিট / ফিড / ফিডনাম / তারিখে অনুলিপি করুন

যে ফাইলগুলি আমি চাই সেগুলি ফোল্ডারের কাঠামোর মধ্যে এত গভীর, প্রতিটি ফোল্ডারে গিয়ে কপি / পেস্ট করা খুব সময়সাপেক্ষ।

আমি প্রতিটি বালতিতে ড্রাইভ মাউন্ট করে এবং একটি উইন্ডোজ ব্যাচের স্ক্রিপ্ট লেখার সাথে ঘুরেছি, তবে এটি খুব ধীর এবং এটি অকারণে সমস্ত ফাইল / ফোল্ডারগুলি স্থানীয় সার্ভারে ডাউনলোড করে আবার ব্যাক আপ করে।

উত্তর:


110

হালনাগাদ

অ্যালবার্জ (+1) দ্বারা নির্দেশিত হিসাবে , আজকাল দুর্দান্ত এডাব্লুএস কমান্ড লাইন ইন্টারফেস (প্রায়) সমস্ত জিনিস এডাব্লুএসের সাথে কথোপকথনের জন্য সর্বাধিক বহুমুখী দৃষ্টিভঙ্গি সরবরাহ করে - এর মধ্যে বেশিরভাগ পরিষেবাদির এপিআইগুলিকে অন্তর্ভুক্ত করে এবং এটি আপনার সাথে ডিল করার জন্য উচ্চ স্তরের এস 3 কমান্ডগুলিও দেখায় বিশেষত কেস ব্যবহার করুন, এস 3 এর জন্য এডাব্লুএস সিএলআই রেফারেন্সটি দেখুন :

  • সিঙ্ক - ডিরেক্টরি এবং এস 3 উপসর্গ সিঙ্ক করে আপনার ব্যবহার কেস আওতায় পড়ে উদাহরণ 2 (আরও জরিমানা ব্যবহার গ্রেনেড --exclude, --includeএবং উপসর্গ ইত্যাদি হ্যান্ডলিং পাওয়া যায়):

    নিম্নলিখিত সিঙ্ক কমান্ডটি নির্দিষ্ট উপসর্গ এবং বালতির অধীনে বস্তুগুলিকে অন্য নির্দিষ্ট উপসর্গ এবং বাল্টির অধীনে এস 3 বস্তু অনুলিপি করে সিঙ্ক করে। [...]

    aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
    

সম্পূর্ণতার জন্য, আমি উল্লেখ করব যে নিম্ন স্তরের এস 3 কমান্ডগুলি এখনও এস 3 এপি সাব কমান্ডের মাধ্যমে পাওয়া যায় , যা শেষ পর্যন্ত উচ্চতর স্তরের কার্যকারিতা গ্রহণের আগে অ্যাডাব্লুএস সি এল আই- তে কোনও এসডিকে ভিত্তিক সমাধানটি সরাসরি অনুবাদ করতে দেয়।


প্রাথমিক উত্তর

এস 3 বালতিগুলির মধ্যে ফাইলগুলি মুভিং করা PUT অবজেক্ট - অনুলিপি এপিআইয়ের মাধ্যমে অর্জন করা যেতে পারে (এর পরে ডিলিট অবজেক্ট ):

পুট অপারেশনের এই বাস্তবায়নটি এমন একটি সামগ্রীর অনুলিপি তৈরি করে যা ইতিমধ্যে অ্যামাজন এস 3 এ সঞ্চিত রয়েছে। একটি পুট অনুলিপি অপারেশন হ'ল জিইটি সম্পাদন করা এবং তারপরে একটি পুট করা। অনুরোধ শিরোনাম, এক্স-এমজেজ-অনুলিপি-উত্স যুক্ত করা, পুট অপারেশনটি গন্তব্য বালতিতে উত্সটির অনুলিপিটি তৈরি করে। সূত্র

সমস্ত বিদ্যমান এডাব্লুএস এসডিকে উপলক্ষে উপলব্ধ নমুনা রয়েছে, একটি একক অপারেশনে অবজেক্টগুলি অনুলিপি করা দেখুন । স্বাভাবিকভাবেই, এখানে একটি স্ক্রিপ্টিং ভিত্তিক সমাধান হ'ল সুস্পষ্ট প্রথম পছন্দ, সুতরাং রুবির জন্য অ্যাডাব্লুএস এসডিকে ব্যবহার করে কোনও বিষয় অনুলিপি করা একটি ভাল সূচনা পয়েন্ট হতে পারে; আপনি যদি এর পরিবর্তে পাইথন পছন্দ করেন তবে বোটোর মাধ্যমেও এটি অর্জন করা সম্ভব , copy_key()বোটোর এস 3 এপিআই ডকুমেন্টেশনের মধ্যে পদ্ধতিটি দেখুন ।

PUT Objectকেবল ফাইলগুলি অনুলিপি করে, তাই আপনাকে DELETE Objectসফল কপি অপারেশনের পরেও একটি ফাইল স্পষ্টভাবে মুছে ফেলতে হবে, তবে বালতি এবং ফাইলের নাম পরিচালনা করার সামগ্রিক স্ক্রিপ্টটি ঠিক তখনই অন্য কয়েকটি লাইন হবে (স্বতন্ত্র উদাহরণগুলিও রয়েছে) , উদাহরণস্বরূপ প্রতি অনুরোধে একটি অবজেক্ট মুছে ফেলা ) দেখুন।


নেট। এ এনডাব্লুএস এসডিকে দিয়ে অপারেশনটির স্ক্রিপ্টিং শেষ করেছি
ম্যাট ডেল

4
@ ম্যাটডেল আপনি কি এই প্রশ্নের .NET উত্তর যুক্ত করতে পারেন?
বেলেক্সান্ড্রে

4
এ সম্পর্কে যেটি স্তন্যপান করছে তা হ'ল আমাজন কপি কমান্ড সফল হয়েছে কিনা সে সম্পর্কে খুব একটা পরিষ্কার নয়, সুতরাং অপারেশনের পরে মুছে ফেলা বিপজ্জনক বলে মনে হয়।
জেমস ম্যাকমাহন

শুধু পরিষ্কার করে বলতে গেলে, আমি জাভা এপিআই-তে বিশেষভাবে উল্লেখ করছি। আমি একটি পৃথক প্রশ্ন খুলেছি স্ট্যাকওভারফ্লো.com
জেমস ম্যাকমাহন

একটি বালতি থেকে পড়ার জন্য এবং অন্য বালতিতে লেখার জন্য একক আইডি এবং কী তৈরি করতে আমাদের এখনও কিছু সহজ উপায় প্রয়োজন। বিশেষত যদি বালতিগুলি অ্যাকাউন্টের বাইরে থাকে।
সিএমসিডিগ্রাগনকাই

66

নতুন আধিকারিক এডাব্লুএস সি এল আই এর বেশিরভাগ কার্যকারিতা সমর্থন করে s3cmd। আমি আগে s3cmdবা রুবি এডাব্লুএস এসডিকে ব্যবহার করে আসছি এই জাতীয় জিনিসগুলি করার জন্য, তবে সরকারী সিএলআই এটির জন্য দুর্দান্ত কাজ করে।

http://docs.aws.amazon.com/cli/latest/references/s3/sync.html

aws s3 sync s3://oldbucket s3://newbucket

4
এটি তালিকার শীর্ষে ভোট দেওয়া উচিত। এই সমস্ত উত্তরগুলির মধ্যে বালতিগুলি সিঙ্ক করার উপযুক্ত উপায় এবং সর্বাধিক আপ টু ডেট।
dft

403 অ্যাক্সেস অস্বীকার ত্রুটিগুলি নিয়ে যদি আপনার সমস্যা হয় তবে এই ব্লগ পোস্টটি দেখুন see এটা সাহায্য করেছিল. alfielapeter.com/posts/...
crlane

4
ক্রস অঞ্চল অনুলিপিaws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1
সমমান 8

আপনি যদি সার্ভারে এই ওভার nohup aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1 & নাইটটি
সমমান 8

@ অ্যালবার্জ কমান্ড লাইন আর্গুমেন্ট ব্যবহার করে অ্যাক্সেস কী এবং গোপনীয়তা সরবরাহ করার কোনও উপায় আছে?
EmptyData

29

এক বালতি থেকে অন্য বালিশে বা একই বালতিতে স্থানান্তর / অনুলিপি করতে আমি এস 3 সিএমডি সরঞ্জাম ব্যবহার করি এবং সূক্ষ্মভাবে কাজ করি। এই ক্ষেত্রে:

s3cmd cp --recursive s3://bucket1/directory1 s3://bucket2/directory1
s3cmd mv --recursive s3://bucket1/directory1 s3://bucket2/directory1

29

আমি এর জন্য প্রয়োজনীয় কপিগুলিকে সমান্তরাল করার জন্য আমার নিজস্ব কাস্টম টুলটি লেখার জন্য দিন কাটিয়েছি, তবে তারপরে আমি কীভাবে বৃহত্তর সমান্তরালতার সাথে বালতিগুলিকে সিঙ্ক্রোনাইজ করতে AWS S3 সিআইএল সিঙ্ক কমান্ডটি পেতে পারি তার ডকুমেন্টেশন জুড়ে ছুটে এসেছি । নিম্নলিখিত কমান্ডগুলি AWS CLI কে কাজ সম্পাদন করতে 1,000 থ্রেড (প্রতিটি ছোট ফাইল বা একাধিক অংশের অনুলিপিটির একাংশ) ব্যবহার করতে এবং 100,000 কাজ দেখার জন্য বলবে:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

এগুলি চালানোর পরে, আপনি নিম্নোক্তভাবে সাধারণ সিঙ্ক কমান্ডটি ব্যবহার করতে পারেন:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

একটি এম 4.এক্সলেজ মেশিনে (এডাব্লুএস - 4 কোর, 16 গিগাবাইট র‌্যামে) সিঙ্ক / কপির গতি প্রায় 9.5MiB / s থেকে 700 + MiB / s এ চলে গেছে, এর গতি বৃদ্ধি পেয়েছে ডিফল্ট কনফিগারেশন 70x।

আপডেট: দ্রষ্টব্য যে S3CMD বছরের পর বছর ধরে আপডেট করা হয়েছে এবং আপনি যখন প্রচুর ছোট ফাইলগুলির সাথে কাজ করছেন তখন এই পরিবর্তনগুলি কেবল কার্যকর হয়। এছাড়াও নোট করুন যে উইন্ডোজে S3CMD (কেবল উইন্ডোজে) সামগ্রিক থ্রুপুটটিতে মারাত্মকভাবে সীমাবদ্ধ এবং আপনি কোন উদাহরণের আকার বা সেটিংস ব্যবহার করুন তা বিবেচনা না করেই প্রক্রিয়া প্রতি কেবল 3 জিবিপিএস অর্জন করতে পারে। অন্যান্য সিস্টেমগুলির মতো এস 5 সিএমডি তেও একই সমস্যা রয়েছে। আমি এস 3 টিমের সাথে এটি সম্পর্কে কথা বলেছি এবং তারা এটি সন্ধান করছে।


ধন্যবাদ, আপনার কনফিগারেশনের মাধ্যমে 900 + এমআইবি / গুলি অর্জন করতে সক্ষম হয়েছে, ডিফল্টর চেয়ে বিশাল গতি বাড়ায়।
কোজির

@ জামেস: এপিআই কি আমাদের এত দ্রুতগতির স্থানান্তর অর্জনে সীমাবদ্ধ করে? আমি 2 জিবি ফাইল স্থানান্তর করতে একটি টি 2 ইসি 2 মেশিন থেকে এডাব্লুএস জাভা এসডিকে বনাম সি এল এলির সরবরাহিত ট্রান্সফর্মেনার এপিআই ব্যবহার করছি। সময়ের পার্থক্যটি ~ 5.5 গুণ (সিএলআই - 14 সেকেন্ড) বনাম (এসডিকে - 80 সেকেন্ড)। এছাড়াও, আমি এসডিকে s3.max_queue_size এর জন্য কোনও বিকল্প দেখছি না। কোন মন্তব্য?
দ্বাররিয়র

@ দ্বাররিয়র, এই দুটি সেটিংসই সিএলআইয়ের জন্য। কোনও এসডিকে ব্যবহার করার সময়, আপনাকে নিজেকে অনুরোধ করার জন্য সমস্ত অনুরোধ পরিচালনা করতে হবে। এডাব্লুএস সমর্থন দাবি করে যে ইসি 2 এবং এস 3 এর মধ্যে লিনাক্স (যেমন বিজ্ঞাপনিত ইসি 2 ইনস্ট্যান্স নেটওয়ার্ক থ্রুটপুট) ব্যবহার করে সর্বোচ্চ সম্ভাব্য থ্রুপুট প্রায় 80% হিট হয়েছে। উইন্ডোজ অ্যাডাব্লুএস-এ দ্বিতীয় শ্রেণির নাগরিক এবং এটি অ্যামাজন সরবরাহিত সরঞ্জামগুলির চেয়ে অর্ধেকও পেতে পারে না এবং দেখে মনে হচ্ছে তারা এটি ঠিক করার পরিকল্পনা করেনি। :-( একটি টি 2 মেশিনের সাথে, এডাব্লুএস ঠিক কতটা ব্যান্ডউইথ পেয়েছে তা নির্দিষ্ট করে না, যদিও আপনি এস 3 ভিপিসি শেষ পয়েন্ট স্থাপন করেন তবে কিছুটা উন্নতি হয়
জেমস

@ জেমস আমি স্পার্কে ক্লাস্টারের সাথে আমার ফাইলগুলির তালিকার সমান্তরাল করে প্রতিটি পার্টিশনের মধ্যে সমান্তরালকরণের মিশ্রণ এবং তারপরে যে কোনও ফাইলের জন্য সমান্তরাল আপলোডের জন্য ট্রান্সফর্মেনার ব্যবহার করেছি went আমি এটি করার পরে 80 থেকে 45 সেকেন্ডের উন্নতি দেখতে পাচ্ছি তবে ইসি 2 থেকে সি এল এল হ্যান্ডল করার পথে এখনও অনুপস্থিত। ধন্যবাদ, যদিও এই সেটআপের জন্য। এটি উইন্ডোগুলির মধ্যে পারফরম্যান্সকেও মারাত্মকভাবে উন্নত করেছে। এসডিকে, আমরা সর্বাধিক সংযোগগুলি সেট করতে পারি তবে কাতার আকার নয়, তাই আমি মনে করি আমাদের সাথে এটি ছেড়ে যেতে হবে। :) কীভাবে সারিবদ্ধ পরিচালনা করতে হবে সে সম্পর্কে কোনও পয়েন্টার, কোনও নমুনা কোড যা আমি বেসলাইন হিসাবে নিতে পারি।
দ্বাররিওর

4
এস 5 সিএমডি ( github.com/peakgames/s5cmd ) হ'ল সর্বাধিক মাধ্যমে আউটপুট ব্যবহারের জন্য AWS সমর্থনকারীদের ইউটিলিটি। তাত্ক্ষণিক আকার একটি বড় পার্থক্য করতে পারে। নতুন সি 5 এন সিরিজটি নেটওয়ার্কিংয়ের জন্য খুব সাশ্রয়ী এবং এক আশ্চর্যজনক 100 জিবিপিএস পর্যন্ত যায়।
জেমস

13

.NET অনুরোধ হিসাবে উদাহরণ:

using (client)
{
    var existingObject = client.ListObjects(requestForExisingFile).S3Objects; 
    if (existingObject.Count == 1)
    {
        var requestCopyObject = new CopyObjectRequest()
        {
            SourceBucket = BucketNameProd,
            SourceKey = objectToMerge.Key,
            DestinationBucket = BucketNameDev,
            DestinationKey = newKey
        };
        client.CopyObject(requestCopyObject);
    }
}

ক্লায়েন্ট যেমন কিছু হচ্ছে

var config = new AmazonS3Config { CommunicationProtocol = Protocol.HTTP, ServiceURL = "s3-eu-west-1.amazonaws.com" };
var client = AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretAccessKey, config);

আরও ভাল উপায় হতে পারে, তবে কিছু ফাইল স্থানান্তরিত করার জন্য এটি আমি কিছু দ্রুত কোড লিখেছি।


4
এটি একটি ভাল সমাধান বলে মনে হচ্ছে। তবে আপনার কাছে যদি দুটি বালতির জন্য আলাদা আলাদা শংসাপত্র থাকে?
রুই গাভিরেল

4
শংসাপত্রগুলি কপি কমান্ড কার্যকর করার জন্য। এই একক শংসাপত্রগুলির উত্স / টার্গেট বালতিগুলিতে উপযুক্ত পড়ার / লেখার অনুমতি প্রয়োজন। অ্যাকাউন্টগুলির মধ্যে অনুলিপি করতে, তারপরে আপনাকে অন্য অ্যাকাউন্টের শংসাপত্রগুলি থেকে বালতিতে অ্যাক্সেসের অনুমতি দেওয়ার জন্য বালতি নীতি ব্যবহার করতে হবে।
ম্যাট হাউজার

9

যদি আপনার এডাব্লুএসের মধ্যে একটি ইউনিক্স হোস্ট থাকে তবে s3tools.org থেকে s3cmd ব্যবহার করুন। অনুমতিগুলি সেট আপ করুন যাতে আপনার কীটি আপনার বিকাশের বালতিতে পড়ার অ্যাক্সেস হিসাবে থাকে। তারপরে চালান:

s3cmd cp -r s3://productionbucket/feed/feedname/date s3://developmentbucket/feed/feedname

সার্ভারের পাশে? এস 3 এর জন্য কোনও সার্ভার দিক নেই। সমস্ত কমান্ড একটি দূরবর্তী ক্লায়েন্ট থেকে সঞ্চালিত হয়।
ডিকে।

এই কমান্ডটি ইন্টারনেটের মাধ্যমে ঠিকঠাক কাজ করছে বলে মনে হচ্ছে!
গাবে কোপেলি

4
"সার্ভার সাইড" প্রশ্নটি বৈধ। এস 3 সিএমডি স্থানান্তর কি ক্লায়েন্টের কাছে সমস্ত ডেটা সরিয়ে দেয়, না এটি সরাসরি এস 3 থেকে এস 3 স্থানান্তর? যদি পূর্বের হয় তবে বাহ্যিক ডাব্লুএইএন ট্রান্সফার এড়ানোর জন্য এটি এডাব্লুএস মেঘে চালানো ভাল।
ব্রুস এড

4
অনুলিপিটি সমস্ত দূরবর্তীভাবে এস 3 এ ঘটে।
ডিকে।

এছাড়াও মনে রাখবেন যে আপনি যদি ভুলক্রমে এই প্রক্রিয়াটি ব্যাহত করেন তবে এই বিকল্পটি s3cmd cpগ্রহণ --skip-existingনা করে তবে আপনি এর s3cmd syncপরিবর্তে চলতে পারেন
ianstarz

9

আমার জন্য নিম্নলিখিত কমান্ডটি সবেমাত্র কাজ করেছে:

aws s3 mv s3://bucket/data s3://bucket/old_data --recursive

4
সহজ এবং সোজা ফরোয়ার্ড সলিউশন ... এগুলি যখন ক্লাসের সাথে সম্পন্ন করা যায় তখন কেন এই জাতীয় সহজ কাজের জন্য তৃতীয় পক্ষের সরঞ্জাম বা কর্মক্ষেত্রগুলি ব্যবহার করবেন ?!
Fr0zenFyr

7

এটি সম্পাদন করার জন্য এখানে একটি রুবি শ্রেণি রয়েছে: https://gist.github.com/4080793

ব্যবহারের উদাহরণ:

$ gem install aws-sdk
$ irb -r ./bucket_sync_service.rb
> from_creds = {aws_access_key_id:"XXX",
                aws_secret_access_key:"YYY",
                bucket:"first-bucket"}
> to_creds = {aws_access_key_id:"ZZZ",
              aws_secret_access_key:"AAA",
              bucket:"first-bucket"}
> syncer = BucketSyncService.new(from_creds, to_creds)
> syncer.debug = true # log each object
> syncer.perform

6

প্রকৃতপক্ষে আমি সম্প্রতি এডাব্লুএস এস 3 ইন্টারফেসে কপি + পেস্ট ক্রিয়াকলাপটি ব্যবহার করি। আপনি যে ফাইলগুলি অনুলিপি করতে চান সেগুলিতে কেবল নেভিগেট করুন, "ক্রিয়াগুলি" -> "অনুলিপি করুন" এ ক্লিক করুন তারপরে গন্তব্য বালতিতে নেভিগেট করুন এবং "ক্রিয়াগুলি" -> "আটকান"

এটি ফাইলগুলি বেশ দ্রুত স্থানান্তরিত করে এবং এটি একটি কম সংশ্লেষিত সমাধানের মতো বলে মনে হয় যার কোনও প্রোগ্রামিংয়ের প্রয়োজন হয় না বা এর মতো শীর্ষ সমাধানগুলিও।


হ্যাঁ. আমি এটি কয়েক মিনিট আগে আবিষ্কার করেছি। আমি
উঁচুতে উঠেছি

আমি চেষ্টা করেছি যে বালতিতে এটিতে 134,364 টি অবজেক্টের সাথে বালতি অনুলিপি করা উচিত। ঘন্টা সময় লাগল। এবং গন্তব্যটি কেবল ১৩৪,৩৩৩ টি ফাইল দিয়ে শেষ হয়েছিল - অনুলিপিটি বলেছিল যে এটি "সফল", তবে অনুপস্থিত ফাইলগুলির জন্য কোনও ব্যাখ্যা নেই।
ওয়্যারেনস

এখানে অন্যান্য পোস্টগুলিতে বর্ণিত "অ্যাউস এস 3 সিঙ্ক" টাইপ কমান্ড ব্যবহার করে, সমস্ত 134,364 টি অবজেক্ট প্রায় 20 মিনিটের মধ্যে অনুলিপি করা হয়েছিল।
warrens

4

আমরা আমাদের সংক্ষিপ্তসার ETL কাজ সঙ্গে ঠিক এই সমস্যা Snowplow যাতে আমরা আমাদের সমান্তরাল ফাইল কপি কোড (রুবি, উপরে নির্মিত নিষ্কাশিত, কুয়াশা নিজস্ব রুবি মণি, স্লুইচ নামক মধ্যে):

https://github.com/snowplow/sluice

স্লুইস এস 3 ফাইল মোছা, সরানো এবং ডাউনলোড করতেও পরিচালনা করে; সমস্ত সমান্তরাল এবং স্বয়ংক্রিয় পুনরায় চেষ্টা করুন যদি কোনও অপারেশন ব্যর্থ হয় (যা এটি আশ্চর্যরকমভাবে প্রায়শই ঘটে)। আমি আশা করি এটি কার্যকর!


1

আমি জানি এটি একটি পুরানো থ্রেড তবে অন্যদের জন্য যারা সেখানে পৌঁছেছেন তাদের পরামর্শ হ'ল প্রোডাকশন বালতি থেকে বিকাশে একটি বিষয়বস্তু অনুলিপি করার জন্য একটি নির্ধারিত কাজ তৈরি করা।

আপনি ব্যবহার করতে পারেন যদি আপনি ব্যবহার করেন। নেট এই নিবন্ধটি আপনাকে সাহায্য করতে পারে

https://edunyte.com/2015/03/aws-s3-copy-object-from-one-bucket-or/


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.