使用AzCopy傳輸文件:OAuth和SAS令牌

現今的IT領域到處都是自動化。從虛擬機器供應到網站部署,自動化在處理多個項目時尤為重要。甚至可以使用一個名為AzCopy的實用程序來實現Azure存儲與本地機器之間的文件管理的自動化。

AzCopy是一個獨立的實用程序,用於管理Azure存儲。使用AzCopy可以執行多種操作。在本文中,我們將專注於:

  • 創建存儲容器
  • 將本地文件複製到容器中
  • 在容器之間複製文件

讓我們開始吧!

如果您更喜歡通過視頻學習,您還可以查看一個與本文內容密切相關的TechSnips視頻。

先決條件

本文將通過一個演示來展示各種任務。如果您想跟隨操作,請在開始之前確保滿足以下要求:

建立新的儲存容器

首先,我們使用 AzCopy 在現有的儲存帳戶中建立新的儲存容器。在您將要使用的範例中,您將建立兩個名為container1container2的新容器。

注意:在建立新的容器之前,您必須知道容器的端點 URL。端點 URL 的格式為:https://[storageaccountname].blob.core.windows.net/[container_name]。

首先,定義端點 URL。在此範例中,容器將被建立在名為storageaccount1207的儲存帳戶中,建立兩個端點 URL:

現在您已經知道端點 URL,可以使用azcopy make命令,將每個端點 URL 作為參數傳遞,如下所示。

> azcopy make https://storageaccount1207.blob.core.windows.net/container1
> azcopy make https://storageaccount1207.blob.core.windows.net/container2
Creating new containers in the storageaccount1207 storage account

將檔案從/到 Azure 容器複製

一旦您已經建立了儲存容器,您可能會問:“我該如何上傳到 Azure Blob Storage?” 您可以使用 AzCopy 和azcopy copy命令實現這一點。您可以使用 AzCopy 來複製 PST、VHD 等檔案。

使用 OAuth 認證

在使用 AzCopy 複製檔案到 Blob 時,您有幾個選項可供認證。由於預設您已經進行 Azure 儲存的認證(因為這是先決條件),您只需執行以下命令:azcopy copy,指定本地檔案路徑,接著是容器端點的 URL。

若未指定任何其他參數,則使用 OAuth 認證。

> azcopy copy c:\myDir\file1.txt https://storageaccount1207.blob.core.windows.net/container1
Upload file to Azure Storage using OAuth

要如何確認檔案已複製到 Azure Blob 容器中?您可以使用 azcopy list [容器 URL] 命令。以下範例顯示 file1.txt 檔案存在於容器中。

> azcopy list https://storageaccount1207.blob.core.windows.net/container1
List the contents of the Azure blob container

若要將 Azure Blob 的檔案下載到本地目錄,只需交換來源和目的地引數的位置即可。以下範例說明此操作方式。

> azcopy copy https://storageaccount1207.blob.core.windows.net/container1/file1.txt>c:\myDir
Download file from Azure Storage using OAuth authentication

使用共用存取簽章(SAS)權杖

若要使用 SAS 權杖,您必須先生成一個。若不知道如何生成 SAS 權杖,請參閱「如何生成 Azure SAS 權杖以存取儲存帳戶」文章。

當您擁有可用的 SAS 權杖時,您可以將該權杖附加到目的地容器的 URL 中,作為 HTTP 參數,如下所示。

> azcopy copy c:\myDir\file1.txt 'https://storageaccount1207.blob.core.windows.net/container1?sv=2019-02-02&sr=c&sig=LgFsqIRHZovsSjpAVNAyyyy4tnDJ%2BxNh%2B1Cq3rY4Gbk%3D&se=2019-12-09T06%3A34%3A30Z&sp=rw'

若您使用 PowerShell 並將權杖儲存在變數中(例如 $token),您可以將該變數傳遞給命令,而不是使用完整的權杖字串,如下所示。

> azcopy copy c:\myDir\file1.txt "https://storageaccount1207.blob.core.windows.net/container1?$token"
Copy file to Azure Container using SAS Token Authentication

使用相同的令牌(假设令牌仍在有效期内),您还可以将文件从Azure存储下载到本地存储。下面的示例将使用SAS令牌从Azure存储中复制file1.txt文件。

在下面的代码中,您可以看到这次在容器名称后面不是附加令牌,而是先添加文件名。这指示AzCopy使用SAS身份验证复制特定文件。

> azcopy copy ('https://storageaccount1207.blob.core.windows.net/container1/file1.txt'+$token) C:\MyDir\
Copy file from Azure Container with SAS Token

复制目录到/从Azure存储

如果您有许多文件要从Azure传输或下载,您也可以一次性复制整个目录使用azcopy copy。要执行此操作的命令与您用于复制单个文件的命令并没有太大差别。

下面是一个命令,将C:\\MyDir递归地复制到Blob容器container1中。这里的关键是--recursive参数。命令末尾的--recursive标志表示将复制父目录和可能存在的子目录的所有内容。

> azcopy copy C:\MyDir\ https://storageaccount1207.blob.core.windows.net/container1/ --recursive

您可以看到下面的C:\MyDir文件夹中的十个文件根据作业摘要都成功复制了。

Copying a directory and its contents

在Azure存储容器之间复制文件

在本文中,您多次使用了azcopy copy命令。现在没有停止的必要!您不仅可以复制本地目录和文件到/从本地,在存储容器之间也可以复制块。

与其使用本地文件路径,您可以更改参数,将一个块容器URL作为源和另一个块容器URL作为目标。

您已经创建了两个名为container1container2的存储容器。在本节中,让我们从container1复制文件、目录甚至整个块容器到container2

要将文件从一个容器复制到另一个容器,首先生成一个新的SAS令牌。由于这两个容器属于同一个存储帐户,可以使用同一个令牌作为源和目标。

假设您将令牌字符串保存到一个名为$token的变量中(如果在PowerShell中运行azcopy),您可以像下面显示的那样轻松地将所有数据从一个存储容器复制到另一个存储容器。

提醒:如果您不知道如何生成SAS令牌,请查看如何生成用于访问存储帐户的Azure SAS令牌文章。

> azcopy copy ('https://storageaccount1207.blob.core.windows.net/container1'+$token) ('https://storageaccount1207.blob.core.windows.net/container2'+$token) --recursive
Copying data between containers using SAS Token authentication

其他有用的AzCopy操作

除了复制文件和文件夹,您还可以使用AzCopy执行其他复制操作。其中一些是:

  • 复制特定文件(过滤)。
  • 将一个目录复制到块容器中的另一个目录中。
  • 从Amazon AWS复制到Azure存储。

如果您想了解 AzCopy 的全部功能,請運行 azcopy -h 查看幫助內容。除了本文中您專注介紹的 copy 命令外,還有許多其他有用的命令可供使用。您可以在下方看到這些命令的屏幕截圖。

List of AzCopy Commands

要了解更多信息,請訪問AzCopy Copy頁面。然後,您可以根據本文學到的技巧自行嘗試這些命令。

總結

在本文中,您學到了如何使用 AzCopy 在本地和 Azure 存儲之間傳輸文件。您還學到了如何在使用 OAuth 和共享訪問簽名令牌進行身份驗證時執行這些任務。您已經了解了其他可用的 AzCopy 命令以及如何查找它們。

I hope this article has helped you get started with AzCopy and sparked your interest in using it more as part of your administration or development tasks. Thank you!

Source:
https://adamtheautomator.com/azcopy/