[英]How to transfer files between AWS s3 and AWS ec2
我正在使用 AWS ec2 實例。 在這種情況下,我生成了一些文件。 這些操作由用戶數據完成。
現在我想通過在用戶數據本身中編寫代碼來將這些文件存儲在 s3 上。
使用最新的 AWS CLI ( http://aws.amazon.com/cli/ ),您可以使用以下命令將文件從您的 Ec2 實例甚至您的本地機器復制到 S3 存儲。
aws s3 cp myfolder s3://mybucket/myfolder --recursive
然后你會得到類似的東西:
upload: myfolder/file1.txt to s3://mybucket/myfolder/file1.txt
upload: myfolder/subfolder/file1.txt to s3://mybucket/myfolder/subfolder/file1.txt
如果這是您第一次使用aws
CLI 工具,那么您需要運行:
aws configure
這將要求您輸入您的訪問密鑰和秘密以及指定默認區域。
有多種方法可以將文件發送到 S3。 我在下面列出了它們以及相關的安裝和文檔。
S3CMD : ( http://s3tools.org/s3cmd ) 您可以通過 apt-get install s3cmd在 debian/ubuntu 上輕松安裝它,然后從命令行運行。 您可以將其合並到 bash 腳本或您的程序中。
S3FS :( http://www.pophams.com/blog/howto-setups3fsonubuntu1104x64和https://code.google.com/p/s3fs/wiki/InstallationNotes )...這會安裝一個 s3 存儲桶,使其看起來就像本地磁盤一樣。 設置需要更多的努力,但是一旦安裝了磁盤,您就不需要做任何特殊的事情來獲取存儲桶中的文件。
如果您使用 CMS(以 Drupal 為例),您可以選擇使用模塊來處理對您的存儲桶的訪問,例如http://drupal.org/project/storage_api
最后,您可以用編程語言實現來處理所有的邏輯自己,因為PHP你可以用這個啟動http://undesigned.org.za/2007/10/22/amazon-s3-php-class ,看到這里的文檔HTTP ://undesigned.org.za/2007/10/22/amazon-s3-php-class/documentation
PHP 實現的一個例子:
<?php
// Simple PUT:
if (S3::putObject(S3::inputFile($file), $bucket, $uri, S3::ACL_PRIVATE)) {
echo "File uploaded.";
} else {
echo "Failed to upload file.";
}
?>
s3cmd 的一個例子:
s3cmd put my.file s3://bucket-url/my.file
另一個值得一提的選項是 AWS CLI http://aws.amazon.com/cli/這是廣泛可用的,例如它已經包含在 AmazonLinux 中,可以通過 Python 下載(安裝在許多系統上,包括 linux 和 windows) .
http://docs.aws.amazon.com/cli/latest/reference/s3/index.html
可用命令,cp ls mb mv rb rm sync 網站
http://docs.aws.amazon.com/cli/latest/reference/s3api/index.html用於與 S3 交互
將s3cmd包安裝為:
yum install s3cmd
要么
sudo apt-get install s3cmd
取決於您的操作系統。 然后用這個復制數據:
s3cmd get s3://tecadmin/file.txt
ls
也可以列出文件。
有關更多詳細信息,請參閱此
我正在使用s3cmd來存儲每晚從我的 ec2 實例導出的數據庫備份文件。 配置 s3cmd 后,您可以在他們的站點上閱讀相關信息,然后可以運行如下命令:
s3cmd put ./myfile s3://mybucket
所有將 s3 掛載為偽文件系統的嘗試都是有問題的。 它是一個對象存儲,而不是一個塊設備。 如果您必須掛載它,因為您的遺留代碼必須具有本地文件路徑,請嘗試 goofys。 它比 s3fs 快大約 50 倍。 https://github.com/kahin/goofys
這些天s3cmd有點長。 如今,AWS cli 是更好的選擇。 語法不太方便,但它是您需要保留的少一個工具。
如果您可以堅持使用http訪問。 從長遠來看,它會讓你的生活更輕松。
在 AWS CLI 上,我使用以下命令將 zip 文件從 EC2 實例復制到 S3
aws s3 cp file-name.zip s3://bucket-name/
我認為通常最好的答案實際上是上面,使用aws
命令,但是對於您不想安裝其他任何東西的情況,還值得一提的是,您可以通過 HTTPS 下載文件,例如 open瀏覽器並導航到:
https://s3.amazonaws.com/
(bucketName) /
(relativePath) /
(fileName)
這也意味着您可以只使用wget
或curl
從 shell 提示進行傳輸。
我假設您需要從新實例復制到 s3。 首先創建一個 IAM 角色,這樣您就不需要運行 aws configure 並且這應該在啟動時都可以工作。 其次安裝 cli,然后在用戶數據中使用 aws cli 定義您的復制作業。 下面是 Ubuntu 18 的示例。將 IAM 角色分配給您的實例。
用戶數據:
#!/bin/bash
apt-get update -y
apt install awscli -y
aws s3 cp *Path of data* s3://*destination bucket* -recursive *--other options*
創建 IAM 角色1. 轉到位於https://console.aws.amazon.com/iam/的 IAM 控制台 2. 在左窗格中,選擇角色,然后單擊創建角色。 3. 對於選擇可信實體類型,選擇 AWS 服務。 選擇 EC2。 選擇下一步:權限。 4. 對於附加權限策略,選擇包含所需權限的 AWS 托管策略或創建自定義策略。 5. 點擊服務選擇一個服務,在查找服務框中輸入 S3,點擊 S3,選擇操作(全部或讀+寫和其他你可能需要的) 6. 點擊資源,選擇資源(你可以輸入所有資源或限制為具有 ARN 的特定存儲桶) 7. 單擊下一步:查看策略。 輸入名稱和說明。 單擊創建策略。 8. 返回創建角色頁面,單擊刷新,按您指定的名稱過濾策略,選擇策略。 9. 單擊下一步:標簽,然后添加任何必需的標簽 10. 在查看頁面上,輸入角色的名稱和描述,然后單擊創建角色。
參考
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.