AzCopy を使用して Amazon S3 から Azure Storage にデータをコピーするCopy data from Amazon S3 to Azure Storage by using AzCopy

AzCopy は、ストレージ アカウント間の BLOB またはファイル コピーに利用できるコマンドライン ユーティリティです。AzCopy is a command-line utility that you can use to copy blobs or files to or from a storage account. この記事は、AzCopy を使用して Amazon Web Services (AWS) S3 から Azure Blob Storage にオブジェクト、ディレクトリ、バケットをコピーする場合に役立ちます。This article helps you copy objects, directories, and buckets from Amazon Web Services (AWS) S3 to Azure Blob Storage by using AzCopy.

認証資格情報の提供方法を選択するChoose how you'll provide authorization credentials

  • Azure Storage による承認を行うには、Azure Active Directory (AD) または Shared Access Signature (SAS) トークンを使用します。To authorize with the Azure Storage, use Azure Active Directory (AD) or a Shared Access Signature (SAS) token.

  • AWS S3 による承認を行うには、AWS アクセス キーとシークレット アクセス キーを使用します。To authorize with AWS S3, use an AWS access key and a secret access key.

Azure Storage による認証Authorize with Azure Storage

AzCopy のダウンロード方法と、ストレージ サービスに認証資格情報を提供する方法については、「AzCopy を使ってみる」という記事をご覧ください。See the Get started with AzCopy article to download AzCopy, and choose how you'll provide authorization credentials to the storage service.

注意

この記事の例では、AzCopy login コマンドを使用して ID を認証したと想定しています。The examples in this article assume that you've authenticated your identity by using the AzCopy login command. AzCopy では次に、Blob Storage のデータへのアクセスを承認するために、Azure AD アカウントが使用されます。AzCopy then uses your Azure AD account to authorize access to data in Blob storage.

SAS トークンを使用して BLOB データへのアクセスを承認する場合、各 AzCopy コマンドのリソース URL の先頭にそのトークンを追加できます。If you'd rather use a SAS token to authorize access to blob data, then you can append that token to the resource URL in each AzCopy command.

(例: https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>)。For example: https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>.

AWS S3 による承認Authorize with AWS S3

AWS アクセス キーとシークレット アクセス キーを収集して、以下の環境変数を設定します。Gather your AWS access key and secret access key, and then set these environment variables:

オペレーティング システムOperating system commandCommand
WindowsWindows set AWS_ACCESS_KEY_ID=<access-key>
set AWS_SECRET_ACCESS_KEY=<secret-access-key>
LinuxLinux export AWS_ACCESS_KEY_ID=<access-key>
export AWS_SECRET_ACCESS_KEY=<secret-access-key>
macOSmacOS export AWS_ACCESS_KEY_ID=<access-key>
export AWS_SECRET_ACCESS_KEY=<secret-access-key>

オブジェクト、ディレクトリ、バケットをコピーするCopy objects, directories, and buckets

AzCopy では、URL からブロックの配置 API が使用されます。そのため、データは AWS S3 とストレージ サーバー間で直接コピーされます。AzCopy uses the Put Block From URL API, so data is copied directly between AWS S3 and storage servers. これらのコピー操作では、コンピューターのネットワーク帯域幅が使用されません。These copy operations don't use the network bandwidth of your computer.

ヒント

このセクションの例では、単一引用符 ('') でパス引数を囲みます。The examples in this section enclose path arguments with single quotes (''). Windows コマンド シェル (cmd.exe) を除き、すべてのコマンド シェルで単一引用符を使用します。Use single quotes in all command shells except for the Windows Command Shell (cmd.exe). Windows コマンド シェル (cmd.exe) を使用している場合は、単一引用符 ('') ではなく、二重引用符 ("") でパス引数を囲みます。If you're using a Windows Command Shell (cmd.exe), enclose path arguments with double quotes ("") instead of single quotes ('').

これらの例は、階層型名前空間があるアカウントでも機能します。These examples also work with accounts that have a hierarchical namespace. Data Lake Storage のマルチプロトコル アクセスでは、これらのアカウントで同じ URL 構文 (blob.core.windows.net) を使用できます。Multi-protocol access on Data Lake Storage enables you to use the same URL syntax (blob.core.windows.net) on those accounts.

オブジェクトをコピーするCopy an object

階層型名前空間があるアカウントに同じ URL 構文 (blob.core.windows.net) を使用します。Use the same URL syntax (blob.core.windows.net) for accounts that have a hierarchical namespace.

構文Syntax azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'
Example azcopy copy 'https://s3.amazonaws.com/mybucket/myobject' 'https://mystorageaccount.blob.core.windows.net/mycontainer/myblob'
(階層型名前空間)Example (hierarchical namespace) azcopy copy 'https://s3.amazonaws.com/mybucket/myobject' 'https://mystorageaccount.blob.core.windows.net/mycontainer/myblob'

注意

この記事の例では、AWS S3 バケットにパス形式の URL を使用します (例: http://s3.amazonaws.com/<bucket-name>)。Examples in this article use path-style URLs for AWS S3 buckets (For example: http://s3.amazonaws.com/<bucket-name>).

また、仮想ホスト形式の URL も使用できます (例: http://bucket.s3.amazonaws.com)。You can also use virtual hosted-style URLs as well (For example: http://bucket.s3.amazonaws.com).

バケットの仮想ホスティングの詳細については、「バケットの仮想ホスティング」(https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html) ) を参照してください。To learn more about virtual hosting of buckets, see [Virtual Hosting of Buckets]](https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html).

ディレクトリをコピーするCopy a directory

階層型名前空間があるアカウントに同じ URL 構文 (blob.core.windows.net) を使用します。Use the same URL syntax (blob.core.windows.net) for accounts that have a hierarchical namespace.

構文Syntax azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true
Example azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true
(階層型名前空間)Example (hierarchical namespace) azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

注意

この例では、--recursive フラグを追加して、すべてのサブディレクトリ内のファイルをコピーします。This example appends the --recursive flag to copy files in all sub-directories.

ディレクトリの内容をコピーするCopy the contents of a directory

ワイルドカード記号 (*) を使用することで、ディレクトリ自体をコピーせずにディレクトリの内容をコピーできます。You can copy the contents of a directory without copying the containing directory itself by using the wildcard symbol (*).

構文Syntax azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>/*' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true
Example azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory/*' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true
(階層型名前空間)Example (hierarchical namespace) azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory/*' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

バケットをコピーするCopy a bucket

階層型名前空間があるアカウントに同じ URL 構文 (blob.core.windows.net) を使用します。Use the same URL syntax (blob.core.windows.net) for accounts that have a hierarchical namespace.

構文Syntax azcopy copy 'https://s3.amazonaws.com/<bucket-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive=true
Example azcopy copy 'https://s3.amazonaws.com/mybucket' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive=true
(階層型名前空間)Example (hierarchical namespace) azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

すべてのリージョン内のすべてのバケットをコピーするCopy all buckets in all regions

階層型名前空間があるアカウントに同じ URL 構文 (blob.core.windows.net) を使用します。Use the same URL syntax (blob.core.windows.net) for accounts that have a hierarchical namespace.

構文Syntax azcopy copy 'https://s3.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true
Example azcopy copy 'https://s3.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true
(階層型名前空間)Example (hierarchical namespace) azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

特定の S3 リージョン内のすべてのバケットをコピーするCopy all buckets in a specific S3 region

階層型名前空間があるアカウントに同じ URL 構文 (blob.core.windows.net) を使用します。Use the same URL syntax (blob.core.windows.net) for accounts that have a hierarchical namespace.

構文Syntax azcopy copy 'https://s3-<region-name>.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true
Example azcopy copy 'https://s3-rds.eu-north-1.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true
(階層型名前空間)Example (hierarchical namespace) azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

オブジェクトの名前付け規則の違いに対処するHandle differences in object naming rules

AWS の S3 では、Azure BLOB コンテナーと比べると異なるバケット名の名前付け規則があります。AWS S3 has a different set of naming conventions for bucket names as compared to Azure blob containers. 詳しくは、こちらをご覧ください。You can read about them here. バケットのグループを Azure ストレージ アカウントにコピーする場合は、名前付けの違いのためにコピー操作が失敗することがあります。If you choose to copy a group of buckets to an Azure storage account, the copy operation might fail because of naming differences.

AzCopy は、発生する可能性のある最も一般的な 2 つの問題を処理します。期間が含まれているバケットと、連続するハイフンが含まれているバケットです。AzCopy handles two of the most common issues that can arise; buckets that contain periods and buckets that contain consecutive hyphens. AWS S3 バケットの名前には期間と連続するハイフンを含めることができますが、Azure 内のコンテナーには含めることができません。AWS S3 bucket names can contain periods and consecutive hyphens, but a container in Azure can't. AzCopy では、期間はハイフンに置き換えられ、連続するハイフンは、連続するハイフンの数を表す数に置き換えられます (たとえば、my----bucket という名前のバケットは my-4-bucket になります)。AzCopy replaces periods with hyphens and consecutive hyphens with a number that represents the number of consecutive hyphens (For example: a bucket named my----bucket becomes my-4-bucket.

また、AzCopy でファイルがコピーされるときには、名前の競合がチェックされ、その解決が試みられます。Also, as AzCopy copies over files, it checks for naming collisions and attempts to resolve them. たとえば、名前が bucket-namebucket.name のバケットがある場合、AzCopy は bucket.name という名前のバケットをまず bucket-name に解決してから、次に bucket-name-2 に解決します。For example, if there are buckets with the name bucket-name and bucket.name, AzCopy resolves a bucket named bucket.name first to bucket-name and then to bucket-name-2.

オブジェクトのメタデータの違いに対処するHandle differences in object metadata

AWS S3 と Azure では、オブジェクト キーの名前にさまざまな文字セットを使用できます。AWS S3 and Azure allow different sets of characters in the names of object keys. AWS S3 で使用する文字の詳細については、こちらをご覧ください。You can read about the characters that AWS S3 uses here. Azure 側では、BLOB オブジェクト キーは C# 識別子の名前付け規則に従います。On the Azure side, blob object keys adhere to the naming rules for C# identifiers.

AzCopy の copy コマンドの一部として、オプションの s2s-handle-invalid-metadata フラグの値を指定することができます。これは、ファイルのメタデータに互換性のないキー名が含まれているファイルを処理する方法を指定します。As part of an AzCopy copy command, you can provide a value for optional the s2s-handle-invalid-metadata flag that specifies how you would like to handle files where the metadata of the file contains incompatible key names. 次の表は、それぞれのフラグ値の説明です。The following table describes each flag value.

フラグ値Flag value 説明Description
ExcludeIfInvalidExcludeIfInvalid (既定のオプション) メタデータは転送されたオブジェクトに含まれていません。(Default option) The metadata isn't included in the transferred object. AzCopy は警告を記録します。AzCopy logs a warning.
FailIfInvalidFailIfInvalid オブジェクトはコピーされません。Objects aren't copied. AzCopy はエラーを記録し、そのエラーを、転送の概要に表示される失敗の数に含めます。AzCopy logs an error and includes that error in the failed count that appears in the transfer summary.
RenameIfInvalidRenameIfInvalid AzCopy は無効なメタデータ キーを解決し、解決されたメタデータのキーと値のペアを使用してオブジェクトを Azure にコピーします。AzCopy resolves the invalid metadata key, and copies the object to Azure using the resolved metadata key value pair. AzCopy でオブジェクト キーの名前を変更するために実行する正確な手順については、以下の「AzCopy でオブジェクト キーの名前を変更する方法」のセクションを参照してください。To learn exactly what steps AzCopy takes to rename object keys, see the How AzCopy renames object keys section below. AzCopy でキーの名前を変更できない場合、オブジェクトはコピーされません。If AzCopy is unable to rename the key, then the object won't be copied.

AzCopy でオブジェクト キーの名前を変更する方法How AzCopy renames object keys

AzCopy では次の手順が実行されます。AzCopy performs these steps:

  1. 無効な文字を '' に置き換えます。Replaces invalid characters with ''.

  2. 文字列 rename_ を新しい有効なキーの先頭に追加します。Adds the string rename_ to the beginning of a new valid key.

    このキーは、元のメタデータ を保存するために使用されます。This key will be used to save the original metadata value.

  3. 文字列 rename_key_ を新しい有効なキーの先頭に追加します。Adds the string rename_key_ to the beginning of a new valid key. このキーは、元のメタデータの無効な キー を保存するために使用されます。This key will be used to save original metadata invalid key. メタデータ キーは BLOB ストレージ サービスに値として保持されるため、このキーを使用して、Azure 側でメタデータを試して復元することができます。You can use this key to try to recover the metadata in Azure side since metadata key is preserved as a value on the Blob storage service.

次のステップNext steps

以下の記事にサンプルがあります。Find more examples in any of these articles: