কোনও এস 3 অবজেক্টে ডেটা যুক্ত করুন


91

ধরা যাক যে আমার কাছে একটি মেশিন রয়েছে যা আমি একটি এস 3 বালতিতে সঞ্চিত একটি নির্দিষ্ট লগ ফাইলটিতে লিখতে সক্ষম হতে চাই।

সুতরাং, সেই বালতিটিতে মেশিনের লেখার দক্ষতা থাকা দরকার, তবে আমি সেই বালতির কোনও ফাইল ওভাররাইট বা মুছে ফেলার ক্ষমতা রাখতে চাই না (যার সাথে আমি এটি লিখতে চাই সেগুলি সহ)।

সুতরাং মূলত, আমি চাই যে আমার মেশিনটি ওভাররাইড না করে বা ডাউনলোড না করে কেবল সেই লগ ফাইলটিতে ডেটা যুক্ত করতে সক্ষম হবে।

আমার এস 3 এর মতো কাজ করার জন্য কি কোনও উপায় আছে? সম্ভবত কিছু আইএএম নীতি আছে যা আমি এটির সাথে সংযুক্ত করতে পারি তাই এটি আমার পছন্দ মতো কাজ করবে?


আপনি এস 3 এ অবজেক্টগুলি সংশোধন করতে পারবেন না। আপনি কি কেবল একটি নতুন লগ ফাইল সংযুক্ত করতে পারেন? এটি আরও ভাল মডেল হবে এবং একাধিক, যুগপত ক্লায়েন্টকে সমর্থন করবে।
jarmod

@ জাজমোড হ্যাঁ, আমি সে সম্পর্কে ভেবেছিলাম, তবে সমস্যাটি হ'ল যদি কোনও আক্রমণকারী আমার সার্ভারটি অ্যাক্সেস করতে সফল হন তবে এস 3 বাল্টিতে প্রেরণের আগে তার এতে থাকা স্থানীয় ফাইলটি মুছে ফেলার ক্ষমতা রাখবে (যা বলা যাক যে দিন শেষে ঘটে)।
থিওডোর

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

4
আপনি গুগল বিগকুয়েরিতে একবার দেখে নিতে পারেন। আপনি আপনার সমস্যা সমাধানের জন্য এটি ব্যবহার করতে পারেন।
ড্যানিয়েল 777

উত্তর:


133

দুর্ভাগ্যক্রমে, আপনি পারবেন না।

এস 3 এর "অ্যাপেন্ড" অপারেশন নেই। * একবার কোনও জিনিস আপলোড হয়ে গেলে, এটির জায়গায় পরিবর্তন করার কোনও উপায় নেই; আপনার একমাত্র বিকল্প হ'ল এটি প্রতিস্থাপন করতে একটি নতুন অবজেক্ট আপলোড করা, যা আপনার প্রয়োজনীয়তা পূরণ করে না।

*: হ্যাঁ, আমি জানি এই পোস্টটি কয়েক বছরের পুরনো। যদিও এটি এখনও সঠিক।


আমি কি জানতে পারি, মাল্টিপার্ট আপলোড ব্যবহার করে আমরা কি এটি অর্জন করতে পারি?
অঞ্জলি

4
মাল্টিপার্ট আপলোড আপনাকে আসল অবজেক্টটি ডাউনলোড না করেই এস 3-তে ডেটা পাওয়ার অনুমতি দেবে, তবে এটি আপনাকে আসল অবজেক্টটি সরাসরি ওভাররাইট করার অনুমতি দেয় না। উদাহরণস্বরূপ দেখুন docs.aws.amazon.com/AmazonS3/latest/API/… আপনি তারপরে পুরানো অবজেক্টটি মুছতে / নতুনটির নামকরণ করতে পারেন। এটি অবশ্য প্রশ্নটি জিজ্ঞাসা করছে না।
মাইকেজিএম

আমি মনে করি যে মাল্টিপার্ট আপলোড ব্যবহার করা আসলে কাজ করতে পারে। আপনার সমস্ত অংশগুলি একই ফাইলের ক্রম বিভাগ gments যদি অংশটি আপলোড করতে সফল হয়, আপনি শেষ পর্যন্ত ফাইলটি পড়তে সক্ষম হতে আপলোডটি প্রতিশ্রুতি দিতে পারেন। সুতরাং, যতক্ষণ না আপনার ফাইলের বিষয়বস্তু পড়ার দরকার নেই, আপনি একই মাল্টিপার্ট আপলোড ব্যবহার করে যুক্ত হতে পারেন।
সেরিব্রোটেকনোলিকো

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

16

গৃহীত উত্তর হিসাবে, আপনি পারবেন না। আমি সচেতন যে সর্বোত্তম সমাধানটি হ'ল ব্যবহার করা:

এডাব্লুএস কিনেসিস ফায়ারহোজ

https://aws.amazon.com/kinesis/firehose/

তাদের কোড নমুনা জটিল দেখায় কিন্তু আপনার সত্যিই সহজ হতে পারে। আপনি আপনার অ্যাপ্লিকেশনের (এডাব্লুএস এসডিকে ব্যবহার করে) কেইনিস ফায়ারহোজ বিতরণ প্রবাহে PUT (বা ব্যাচ পুট) ক্রিয়াকলাপ চালিয়ে যাচ্ছেন এবং আপনার পছন্দসই AWS S3 বালতিতে আপনার স্ট্রিমযুক্ত ডেটা প্রেরণের জন্য আপনি কিনসিস ফায়ারহোজ বিতরণ প্রবাহটি কনফিগার করেছেন ( এডাব্লুএস কিনেসিস ফায়ারহোজ কনসোল)।

এখানে চিত্র বর্ণনা লিখুন

এটি এখনও >>লিনাক্স কমান্ড লাইনের মতো সুবিধাজনক নয় , কারণ আপনি একবার এস 3-তে একটি ফাইল তৈরি করার পরে আপনাকে নতুন ফাইলটি ডাউনলোড, সংযোজন এবং আপলোড করতে হবে তবে আপনি কেবল একবার লাইন প্রতি ব্যাচেই এটি করতে হবে rather প্রতিটি লাইন ডেটার তুলনায় যাতে আপনাকে অতিরিক্ত চার্জ সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই কারণ অ্যাপেন্ড অপারেশনগুলির পরিমাণ বেশি volume হতে পারে এটি করা যেতে পারে তবে কনসোল থেকে এটি কীভাবে করব তা আমি দেখতে পাচ্ছি না।


8
মনে রাখবেন যে এটি করার ক্ষেত্রে সর্বাধিক সময় (900 সেকেন্ড) বা সর্বোচ্চ আকার (128 এমবি ফাইলের আকার) রয়েছে - অর্থ, কাইনিসিস ফায়ারহোজ সেই সীমাতে যে কোনও একটির
html

আপনি কি ফায়ারহোজের আউটপুট হিসাবে একটি একক এস 3 ফাইল ব্যবহার করতে পারেন? এটি একটি এস 3 বালতিতে একাধিক ফাইল একত্রিত করতে কিছুটা অগোছালো মনে হচ্ছে।
জান ট্রুস্তি আরসন

4
দুর্ভাগ্যক্রমে না. আমিও আশা করি এর থেকে আরও ভাল সমাধান হতে পারে।
শ্রীধর সারনোবাত

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

6

এস 3-তে অবজেক্টস সক্ষম নয়। এক্ষেত্রে আপনার 2 টি সমাধান রয়েছে:

  1. সমস্ত এস 3 ডেটা একটি নতুন অবজেক্টে অনুলিপি করুন, নতুন সামগ্রী যুক্ত করুন এবং এস 3 এ আবার লিখুন।
function writeToS3(input) {
    var content;
    var getParams = {
        Bucket: 'myBucket', 
        Key: "myKey"
    };

    s3.getObject(getParams, function(err, data) {
        if (err) console.log(err, err.stack);
        else {
            content = new Buffer(data.Body).toString("utf8");
            content = content + '\n' + new Date() + '\t' + input;
            var putParams = {
                Body: content,
                Bucket: 'myBucket', 
                Key: "myKey",
                ACL: "public-read"
             };

            s3.putObject(putParams, function(err, data) {
                if (err) console.log(err, err.stack); // an error occurred
                else     {
                    console.log(data);           // successful response
                }
             });
        }
    });  
}
  1. দ্বিতীয় বিকল্পটি হ'ল কেনেসিস ফায়ারহোজ ব্যবহার করা। এটি মোটামুটি সোজা। আপনাকে আপনার ফায়ারহোজ বিতরণ প্রবাহ তৈরি করতে হবে এবং গন্তব্যটিকে এস 3 বালতিতে লিঙ্ক করতে হবে। এটাই!
function writeToS3(input) {
    var content = "\n" + new Date() + "\t" + input;
    var params = {
      DeliveryStreamName: 'myDeliveryStream', /* required */
      Record: { /* required */
        Data: new Buffer(content) || 'STRING_VALUE' /* Strings will be Base-64 encoded on your behalf */ /* required */
      }
    };

    firehose.putRecord(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    }); 
}

আপনি কি আউটপুট হিসাবে একটি একক এস 3 ফাইল ব্যবহার করতে পারেন?
জান ট্রুস্তি আরসন

1

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


1

যদি কেউ এস 3-এর মতো পরিষেবা সহ কোনও বস্তুর ডেটা যুক্ত করতে চায় তবে আলিবাবা ক্লাউড ওএসএস (অবজেক্ট স্টোরেজ সার্ভিস) এটিকে স্থানীয়ভাবে সমর্থন করে

ওএসএস অ্যাপেন্ড আপলোড সরবরাহ করে (অ্যাপেন্ডোবজেক্ট এপিআই এর মাধ্যমে), যা আপনাকে কোনও সামগ্রীর শেষে সরাসরি সামগ্রীতে সংযোজন করতে দেয়। এই পদ্ধতিটি ব্যবহার করে আপলোড করা অবজেক্টগুলি অ্যাপেন্ডেবল অবজেক্টস, অন্য পদ্ধতিগুলি ব্যবহার করে আপলোড করা অবজেক্টগুলি সাধারণ বস্তু। সংযুক্ত ডেটা তাত্ক্ষণিকভাবে পঠনযোগ্য।


-1

আমার অনুরূপ সমস্যা ছিল এবং এটিই আমি জিজ্ঞাসা করেছি

এডাব্লুএস ল্যাম্বদা ব্যবহার করে কীভাবে ফাইলের ডেটা যুক্ত করতে হয়

উপরের সমস্যাটি সমাধান করার জন্য আমি এখানে যা এলাম:

বিদ্যমান ফাইলটি থেকে পুনরুদ্ধার করতে getObject ব্যবহার করুন

   s3.getObject(getParams, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else{
       console.log(data);           // successful response
       var s3Projects = JSON.parse(data.Body);
       console.log('s3 data==>', s3Projects);
       if(s3Projects.length > 0) {
           projects = s3Projects;
       }   
   }
   projects.push(event);
   writeToS3(); // Calling function to append the data
});

ফাইলটিতে সংযুক্ত করতে ফাংশন লিখুন Write

   function writeToS3() {
    var putParams = {
      Body: JSON.stringify(projects),
      Bucket: bucketPath, 
      Key: "projects.json",
      ACL: "public-read"
     };

    s3.putObject(putParams, function(err, data) {
       if (err) console.log(err, err.stack); // an error occurred
       else     console.log(data);           // successful response
        callback(null, 'Hello from Lambda');
     });
}

এই সাহায্য আশা করি !!


13
আপনার writeToS3ফাংশন কোনও ফাইলকে ওভাররাইট করবে, এতে যুক্ত হবে না।
সন্ধ্যাশক্তি-নিষ্ক্রিয়-

@ ডাসকউফ-অ্যাক্টিভেট- সম্মত, এবং এটি দুটি জাতি একই পদে কাজ করার চেষ্টা করলে জাতি শর্তের সাথেও ভুগছে, তবে এটি যে ভাষাগুলির সাথে অপরিবর্তনীয় স্ট্রিং বা প্রকারগুলি রয়েছে তার থেকে সত্যই আলাদা নয় - আপনি ফিরে আসার / পুনর্লিখনের মাধ্যমে একটি পরিশিষ্ট সিমুলেট করে থাকেন একটি নতুন অবজেক্ট
মারাত্মক_অরর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.