當使用Amazon S3(簡單儲存服務)時,您可能會使用S3網頁控制台來下載、複製或上傳文件到S3存儲桶。使用控制台是完全可以的,這是它最初的設計目的。
對於習慣於使用滑鼠點擊而不是鍵盤命令的管理員來說,網頁控制台可能是最簡單的工具。然而,管理員最終會遇到需要使用Amazon S3執行大量文件操作的需求,如自動上傳文件。GUI不是最適合這種操作的工具。
對於這類Amazon Web Services(AWS)的自動化需求,包括Amazon S3,AWS CLI工具為管理員提供了命令行選項,用於管理Amazon S3存儲桶和對象。
在本文中,您將學習如何使用AWS CLI命令行工具上傳、複製、下載和同步Amazon S3中的文件。您還將學習如何提供對您的S3存儲桶的訪問權限,並配置該訪問配置文件以與AWS CLI工具一起使用。
先決條件
由於這是一篇實用文章,後續章節將提供示例和演示。為了成功跟隨,您需要滿足幾個要求。
- 一個AWS帳戶。如果您還沒有現有的AWS訂閱,您可以註冊一個AWS免費層級。
- 一個 AWS S3 存儲桶。如果您希望的話,可以使用現有的存儲桶。然而,建議創建一個空的存儲桶。請參考創建存儲桶。
- A Windows 10 computer with at least Windows PowerShell 5.1. In this article, PowerShell 7.0.2 will be used.
- 您的電腦上必須安裝AWS CLI 第二版工具。
- 您將上傳或與 Amazon S3 同步的本地文件夾和文件
準備您的 AWS S3 訪問權限
假設您已經滿足了相關要求。您可能認為您已經可以開始使用 AWS CLI 操作您的 S3 存儲桶了。我的意思是,如果事情真的那麼簡單,那該有多好啊?
對於那些剛開始使用 Amazon S3 或 AWS 的人來說,本節旨在幫助您設置對 S3 的訪問權限並配置 AWS CLI 憑證設定。
有關在 AWS 中創建 IAM 用戶的完整文檔可以在以下鏈接中找到。 在您的 AWS 帳戶中創建 IAM 用戶
創建具有 S3 訪問權限的 IAM 用戶
當使用 CLI 訪問 AWS 時,您將需要創建一個或多個具有足夠訪問您打算使用的資源的 IAM 用戶。在本節中,您將創建一個具有對 Amazon S3 的訪問權限的 IAM 用戶。
要创建一个具有访问Amazon S3权限的IAM用户,首先需要登录到您的AWS IAM控制台。在访问管理组下,点击用户。接下来,点击添加用户。

在用户名*框中输入您要创建的IAM用户的名称,例如s3Admin。在访问类型*选择中,勾选程序化访问。然后,点击下一步:权限按钮。

接下来,点击直接附加现有策略。然后,搜索AmazonS3FullAccess策略名称并勾选它。完成后,点击下一步:标签。

在添加标签页面中,创建标签是可选的,您可以直接跳过此步骤,点击下一步:审核按钮。

在审核页面上,您将看到正在创建的新账户的摘要。点击创建用户。

最后,一旦用户创建成功,您必须复制访问密钥ID和秘密访问密钥的值,并妥善保存以备将来使用。请注意,这是您唯一能看到这些值的时候。

在计算机上设置AWS CLI配置文件
现在,您已经创建了具有适当访问Amazon S3权限的IAM用户,下一步是在您的计算机上设置AWS CLI配置文件。
此部分假設您已按照要求安裝了 AWS CLI 版本 2工具。在創建配置文件時,您需要以下信息:
- IAM 用戶的存取金鑰 ID。
- IAM 用戶相關聯的秘密存取金鑰。
- 預設區域名對應於您的 AWS S3 存儲桶的位置。您可以使用此鏈接查看端點列表。在本文中,AWS S3 存儲桶位於亞太地區(悉尼),相應的端點是ap-southeast-2。
- 默認輸出格式。使用JSON。
要創建配置文件,打開 PowerShell,輸入以下命令並按照提示操作。
輸入存取金鑰 ID、秘密存取金鑰、預設區域名和默認輸出名稱。請參考以下示範。

測試 AWS CLI 存取權限
配置 AWS CLI 配置文件後,您可以在 PowerShell 中運行以下命令來確認配置文件是否有效。
上述命令應該列出您帳戶中的 Amazon S3 存儲桶。以下示範顯示了命令的執行情況。結果顯示可用的 S3 存儲桶列表,表示配置文件配置成功。

要了解關於Amazon S3的AWS CLI命令,您可以訪問 AWS CLI 命令參考 S3 頁面。
在S3中管理文件
使用AWS CLI,可以像上傳文件到S3、從S3下載文件、刪除S3中的對象以及將S3對象複製到另一個S3位置等進行典型的文件管理操作。這只是關於知道正確的命令、語法、參數和選項的問題。
在接下來的章節中,所使用的環境包括以下內容。
- 兩個S3存儲桶,分別是 atasync1 和 atasync2。下面的屏幕截圖顯示了 Amazon S3控制台 中現有的S3存儲桶。

- 本地目錄和位於 c:\sync 下的文件。

將單個文件上傳到S3
當您將文件上傳到S3時,可以一次上傳一個文件,也可以遞歸上傳多個文件和文件夾。根據您的要求,您可以選擇適合的方式。
要將文件上傳到S3,您需要向 aws s3 cp
命令提供兩個參數(源和目的地)。
例如,要將文件 c:\sync\logs\log1.xml 上傳到 atasync1 存儲桶的根目錄,您可以使用下面的命令。
注意:當與AWS CLI一起使用時,S3存儲桶名稱前綴始終為S3://
在 PowerShell 中运行上述命令,但首先根据您的环境更改源和目标。输出应该与下面的演示类似。

上面的演示显示名为 c:\sync\logs\log1.xml 的文件已成功上传到 S3 目标 s3://atasync1/。
使用以下命令列出 S3 存储桶根目录中的对象。
在 PowerShell 中运行上述命令将产生类似的输出,如下面的演示所示。如下面的输出所示,文件 log1.xml 存在于 S3 位置的根目录中。

递归上传多个文件和文件夹到 S3
前面的部分向您展示了如何将单个文件复制到 S3 位置。但是如果您需要上传来自文件夹和子文件夹的多个文件怎么办?您肯定不想为不同的文件名多次运行相同的命令,对吗?
aws s3 cp
命令具有处理文件和文件夹递归的选项,这就是 --recursive
选项。
例如,目录 c:\sync 包含 166 个对象(文件和子文件夹)。

使用 --recursive
选项,将会上传 c:\sync 文件夹的所有内容到 S3,并保留文件夹结构。为了进行测试,请使用下面的示例代码,但请确保根据您的环境更改源和目标。
從下面的代碼中可以看出,源路徑是 c:\sync,目標路徑是 s3://atasync1/sync。接著的 /sync 鍵表示告訴 AWS CLI 將文件上傳到 S3 中的 /sync 文件夾中。如果 S3 中不存在 /sync 文件夾,它將自動創建。
上述代碼將產生以下輸出,如下面的示範所示。

有選擇地上傳多個文件和文件夾到 S3
在某些情況下,上傳所有類型的文件並不是最佳選擇。例如,當您只需要上傳具有特定文件擴展名的文件時(例如,*.ps1)。對於 cp
命令,還有另外兩個選項可用,即 --include
和 --exclude
。
使用前面一節中的命令將包含所有文件進行遞歸上傳,而下面的命令將只包含與 *.ps1 文件擴展名匹配的文件,並排除其他所有文件。
下面的示範演示了上述代碼在執行時的工作方式。

另一個例子是,如果您想要包含多個不同的文件擴展名,則需要多次指定 --include
選項。
下面的示例命令將只包含 *.csv 和 *.png 文件進行複製操作。
在 PowerShell 中運行上面的代碼將呈現類似的結果,如下所示。

從 S3 下載對象
根據您在本節學到的示例,您還可以將複製操作執行反向操作。也就是說,您可以從S3存儲桶位置下載對象到本地計算機。
從S3到本地的複製需要將源和目標位置互換。源是S3位置,目標是本地路徑,就像下面示例中所示。
請注意,上傳文件到S3時使用的相同選項也適用於從S3下載對象到本地。例如,使用下面的命令下載所有對象,帶有--recursive
選項。
在S3位置之間複製對象
除了上傳和下載文件和文件夾外,使用AWS CLI,您還可以在兩個S3存儲桶位置之間複製或移動文件。
您會注意到下面的命令使用一個S3位置作為源,另一個S3位置作為目標。
下面的演示展示了使用上述命令將源文件複製到另一個S3位置。

與S3同步文件和文件夾
到目前為止,您已經學會了如何使用AWS CLI命令在S3中上傳、下載和複製文件。在本節中,您將了解AWS CLI for S3中還提供了另一個文件操作命令,即sync
命令。sync
命令僅處理已更新、新增和刪除的文件。
有一些情况下,您需要将 S3 存储桶的内容与服务器上的本地目录保持更新和同步。例如,您可能需要将服务器上的事务日志定期同步到 S3。
使用以下命令,位于本地服务器上 c:\sync 文件夹下的 *.XML 日志文件将会同步到 S3 的位置 s3://atasync1。
下面的演示显示,在 PowerShell 中运行上述命令后,所有的 *.XML 文件都已上传到了 S3 目标位置 s3://atasync1/。

与 S3 同步新文件和已更新文件
在下面的示例中,假设日志文件 Log1.xml 的内容已被修改。sync
命令应该会检测到这个修改,并将本地文件的更改上传到 S3,如下面的演示所示。
要使用的命令与上一个示例中的相同。

从上面的输出中可以看出,由于只有文件 Log1.xml 在本地发生了更改,它也是唯一一个与 S3 同步的文件。
与 S3 同步删除操作
默认情况下,sync
命令不处理删除操作。源位置中被删除的文件不会在目标位置被移除。除非您使用 --delete
选项。
在下面的示例中,名为 Log5.xml 的文件已从源位置删除。同步文件的命令将会追加 --delete
选项,如下面的代码所示。
當您在PowerShell中運行上述命令時,位於目標S3位置的被刪除文件Log5.xml也應該被刪除。示例結果如下所示。

摘要
Amazon S3是一個優秀的雲端文件存儲資源。使用AWS CLI工具進一步擴展了您使用Amazon S3的方式,並打開了自動化流程的機會。
在本文中,您已經學會如何使用AWS CLI工具在本地位置和S3存儲桶之間上傳、下載和同步文件和文件夾。您還了解到,S3存儲桶的內容也可以複製或移動到其他S3位置。
使用AWS CLI工具自動化Amazon S3文件管理的用例場景可能還有很多。您甚至可以嘗試將其與PowerShell腳本結合,構建自己的工具或模塊,以便重複使用。找到這些機會並展示您的技能全由您決定。