как передавать файлы между aws s3 и aws ec2

<p>я использую экземпляр aws ec2. в этом случае я привожу несколько файлов. эти операции выполняются пользовательскими данными.</p><p>теперь я хочу сохранить эти файлы на s3, написав код в самих пользовательских данных.</p><ul> <li>итак, как я могу хранить эти файлы на s3?</li> <li>есть какие-нибудь учебники по этому?</li> </ul>

<p>используя самый последний интерфейс командной строки aws ( <a href="http://aws.amazon.com/cli/">http://aws.amazon.com/cli/</a> ), вы можете использовать следующие команды для копирования файлов из вашего экземпляра ec2 или даже с вашего локального компьютера в хранилище s3.</p><pre><code>aws s3 cp myfolder s3://mybucket/myfolder --recursive </code></pre><p>затем вы получите что-то вроде:</p><pre><code>upload: myfolder/file1.txt to s3://mybucket/myfolder/file1.txt upload: myfolder/subfolder/file1.txt to s3://mybucket/myfolder/subfolder/file1.txt </code></pre><p>если вы впервые используете инструмент cli <code>aws</code>, вам нужно будет выполнить:</p><p><code>aws configure</code></p><p>вам будет предложено ввести ключ доступа и секрет, а также указать регион по умолчанию. </p>

<p>существует несколько способов отправки файлов на s3. я перечислил их ниже вместе с установкой и документацией, где это уместно.</p><ul> <li><p><strong>s3cmd</strong>: ( <a href="http://s3tools.org/s3cmd">http://s3tools.org/s3cmd</a> ) вы можете легко установить это на debian/ubuntu через apt-get install s3cmd, а затем запустить из командной строки. вы можете включить это в скрипт bash или в свою программу.</p></li> <li><p><strong>s3fs</strong>: ( <a href="http://www.pophams.com/blog/howto-setups3fsonubuntu1104x64">http://www.pophams.com/blog/howto-setups3fsonubuntu1104x64</a> и <a href="https://code.google.com/p/s3fs/wiki/installationnotes">https://code.google.com/p/s3fs/wiki/installationnotes</a> ). .. это монтирует корзину s3, так что это выглядит как локальный диск. для установки требуется немного больше усилий, но как только диск смонтирован, вам не нужно делать ничего особенного, чтобы получить файлы в вашем ведре.</p></li> <li><p>если вы используете cms (в качестве примера рассмотрим drupal), у вас может быть возможность <strong>использовать модуль</strong> для управления доступом к вашему ведру, например, <a href="http://drupal.org/project/storage\_api">http://drupal.org/project/storage\_api</a> </p></li> <li><p>наконец, вы можете использовать <strong>реализации языка программирования</strong> для самостоятельной обработки всего логического, для php вы можете начать с этого <a href="http://undesigned.org.za/2007/10/22/amazon-s3-php-class">http://undesigned.org.za/2007/10/22/amazon- s3-php-class</a> и смотри документацию здесь <a href="http://undesigned.org.za/2007/10/22/amazon-s3-php-class/documentation">http://undesigned.org.za/2007/10/22/amazon-s3-php-class/documentation</a> </p></li> </ul><p>пример реализации php:</p><pre><code><?php // simple put: if (s3::putobject(s3::inputfile($file), $bucket, $uri, s3::acl\_private)) { echo "file uploaded."; } else { echo "failed to upload file."; } ?> </code></pre><p>пример s3cmd:</p><pre><code>s3cmd put my.file s3://bucket-url/my.file </code></pre><h1>правка</h1><p>стоит упомянуть еще один вариант - aws cli <a href="http://aws.amazon.com/cli/">http://aws.amazon.com/cli/</a> он широко доступен, например, он уже включен в amazonlinux и может быть загружен через python (который устанавливается на многие системы, включая linux и windows).</p><p> <a href="http://docs.aws.amazon.com/cli/latest/reference/s3/index.html">http://docs.aws.amazon.com/cli/latest/reference/s3/index.html</a> </p><blockquote> <p>доступные команды, cp ls mb mv rb rm sync website</p> </blockquote><p> <a href="http://docs.aws.amazon.com/cli/latest/reference/s3api/index.html">http://docs.aws.amazon.com/cli/latest/reference/s3api/index.html</a> для взаимодействия с s3</p>

<p>установите пакет <strong>s3cmd</strong> как:</p><pre><code>yum install s3cmd </code></pre><p>или же </p><pre><code>sudo apt-get install s3cmd </code></pre><p>в зависимости от вашей ос. затем скопируйте данные с этим:</p><pre><code>s3cmd get s3://tecadmin/file.txt </code></pre><p>также <code>ls</code> может перечислить файлы.</p><p>для получения дополнительной информации см. <a href="http://tecadmin.net/install-s3cmd-manage-amazon-s3-buckets/#">это</a> </p>

<p>я использую <a href="http://s3tools.org/s3cmd">s3cmd</a> для хранения еженедельно экспортированных файлов резервных копий базы данных из моего экземпляра ec2. после настройки s3cmd, о которой вы можете прочитать на их сайте, вы можете запустить такую команду:</p><p><code>s3cmd put ./myfile s3://mybucket</code></p>

<p>используйте <code>s3cmd</code> для этого:</p><pre><code>s3cmd get s3://aws\_s3\_bucket/dir/file </code></pre><p>посмотрите, как установить s3cmd <a href="http://kb.site5.com/shell-access-ssh/how-to-setup-and-configure-the-s3cmd-tool-for-amazon-s3/">здесь</a> :</p><p>это работает для меня ...</p>

<p>все попытки монтировать s3 как псевдофайловую систему проблематичны. это хранилище объектов, а не блочное устройство. если вам нужно смонтировать его, потому что у вас есть устаревший код, который должен иметь локальные пути к файлам, попробуйте goofys. это примерно в 50 раз быстрее, чем s3fs. <a href="https://github.com/kahing/goofys">https://github.com/kahing/goofys</a> </p><p>s3cmd немного длиннее в зубе в эти дни. aws cli - лучший вариант в наши дни. синтаксис немного менее удобен, но это еще один инструмент, который вам нужно держать в руках.</p><p>если вы можете придерживаться http доступа. это сделает вашу жизнь легче в долгосрочной перспективе.</p>

<p>в aws cli я использовал следующую команду для копирования файла zip из экземпляра ec2 в s3</p><pre><code>aws s3 cp file-name.zip s3://bucket-name/ </code></pre>

<p>я думаю, что лучший ответ на самом деле выше - использовать команду <code>aws</code>, но для случаев, когда вы не хотите беспокоиться об установке чего-либо еще, также стоит упомянуть, что вы можете просто загрузить файл через https, например, откройте браузер и перейдите к:</p><p><code>https://s3.amazonaws.com/</code><em> (bucketname) </em><code>/</code><em> (относительный путь) </em><code>/</code><em> (filename) </em></p><p>это также означает, что вы можете просто использовать <code>wget</code> или <code>curl</code> для передачи из приглашений shell.</p>