AzCopy は、ストレージ アカウント間の BLOB またはファイル コピーに利用できるコマンドライン ユーティリティです。 この記事では、AzCopy を使用して Amazon Web Services (AWS) S3 から Azure Blob Storage にオブジェクト、ディレクトリ、バケットをコピーする方法について説明します。
注
AzCopy では、AWS によって定義された標準の仮想ホスト型またはパススタイルの URL がサポートされています。 たとえば、https://bucket.s3.amazonaws.com や https://s3.amazonaws.com/bucket などです。
承認資格情報を指定する方法を選択する
Azure Storage で承認するには、Microsoft Entra ID または Shared Access Signature (SAS) トークンを使用します。
AWS S3 で承認するには、AWS アクセスキーとシークレットアクセスキーを使用します。
Azure Storage を使用して承認する
AzCopy のダウンロードに関する AzCopy の概要 に関する記事を参照し、ストレージ サービスに承認資格情報を提供する方法を選択します。
注
この記事の例では、 AzCopy login コマンドを使用して ID を認証することを前提としています。 その後、AzCopy は Microsoft Entra アカウントを使用して、Blob Storage 内のデータへのアクセスを承認します。
SAS トークンを使用して BLOB データへのアクセスを承認する場合は、各 AzCopy コマンドでそのトークンをリソース URL に追加できます。
たとえば、 https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>と指定します。
AWS S3 で承認する
AWS アクセス キーとシークレット アクセス キーを収集し、次の環境変数を設定します。
| オペレーティング システム | Command |
|---|---|
| ウィンドウズ | PowerShell:$env:AWS_ACCESS_KEY_ID=<access-key>$env:AWS_SECRET_ACCESS_KEY=<secret-access-key> コマンド プロンプトで、次のコマンドを使用します。 set AWS_ACCESS_KEY_ID=<access-key>set AWS_SECRET_ACCESS_KEY=<secret-access-key> |
| リナックス | export AWS_ACCESS_KEY_ID=<access-key>export AWS_SECRET_ACCESS_KEY=<secret-access-key> |
| macOS | export AWS_ACCESS_KEY_ID=<access-key>export AWS_SECRET_ACCESS_KEY=<secret-access-key> |
これらの資格情報は、オブジェクトのコピーに使用される署名付き URL を生成するために使用されます。
オブジェクト、ディレクトリ、バケットをコピーする
AzCopy は PUT Block From URL API を 使用するため、データは AWS S3 とストレージ サーバーの間で直接コピーされます。 これらのコピー操作では、コンピューターのネットワーク帯域幅が使用されません。
ヒント
このセクションの例では、単一引用符 ('') でパス引数を囲みます。 Windows コマンド シェル (cmd.exe) を除き、すべてのコマンド シェルで単一引用符を使用します。 Windows コマンド シェル (cmd.exe) を使用している場合は、単一引用符 ('') ではなく、二重引用符 ("") でパス引数を囲みます。
これらの例は、階層型名前空間を持つアカウントでも機能します。
Data Lake Storage でのマルチプロトコル アクセス では、これらのアカウントで同じ URL 構文 (blob.core.windows.net) を使用できます。
オブジェクトをコピーする
階層型名前空間を持つアカウントには、同じ URL 構文 (blob.core.windows.net) を使用します。
構文
azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'
例
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>)。
また、仮想ホステッド スタイルの URL も使用できます (例: http://bucket.s3.amazonaws.com)。
バケットの仮想ホスティングの詳細については、「バケット の仮想ホスティング」を参照してください。
ディレクトリをコピーする
階層型名前空間を持つアカウントには、同じ URL 構文 (blob.core.windows.net) を使用します。
構文
azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true
例
azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true
注
次の使用例は、 --recursive フラグを追加して、すべてのサブディレクトリ内のファイルをコピーします。
ディレクトリの内容をコピーする
ワイルドカード記号 (*) を使用して、含まれるディレクトリ自体をコピーせずに、ディレクトリの内容をコピーできます。
構文
azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>/*' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true
例
azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory/*' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true
バケットをコピーする
階層型名前空間を持つアカウントには、同じ URL 構文 (blob.core.windows.net) を使用します。
構文
azcopy copy 'https://s3.amazonaws.com/<bucket-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive=true
例
azcopy copy 'https://s3.amazonaws.com/mybucket' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive=true
すべてのリージョン内のすべてのバケットをコピーする
階層型名前空間を持つアカウントには、同じ URL 構文 (blob.core.windows.net) を使用します。
構文
azcopy copy 'https://s3.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true
例
azcopy copy 'https://s3.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true
特定の S3 リージョンのすべてのバケットをコピーする
階層型名前空間を持つアカウントには、同じ URL 構文 (blob.core.windows.net) を使用します。
構文
azcopy copy 'https://s3-<region-name>.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true
例
azcopy copy 'https://s3-rds.eu-north-1.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true
オブジェクトの名前付け規則の違いを処理する
AWS S3 では、Azure BLOB コンテナーと比較して、バケット名に異なる名前付け規則のセットが使用されます。 詳細 については、こちらをご覧ください。 バケットのグループを Azure ストレージ アカウントにコピーすることを選択した場合、名前付けの違いによりコピー操作が失敗する可能性があります。
AzCopy は、発生する可能性がある最も一般的な問題の 2 つ(ピリオドを含むバケットと連続するハイフンを含むバケット)を処理します。 AWS S3 バケット名にはピリオドと連続するハイフンを含めることができますが、Azure のコンテナーには含められません。 AzCopy は、ピリオドをハイフンと連続するハイフンに置き換え、連続するハイフンの数を表す数値に置き換えます (たとえば、 my----bucket という名前のバケットが my-4-bucketになります)。
また、AzCopy はファイルをコピーするときに、名前の競合をチェックして解決を試みます。 たとえば、 bucket-name と bucket.nameという名前のバケットがある場合、AzCopy は最初に bucket.name という名前のバケットを bucket-name してから bucket-name-2に解決します。
オブジェクト メタデータの違いを処理する
AWS S3 と Azure では、オブジェクト キーの名前に異なる文字セットを使用できます。 AWS S3 で使用される文字については 、こちらをご覧ください。 Azure 側では、BLOB オブジェクト キーは C# 識別子の名前付け規則に従います。
AzCopy copy コマンドの一部として、オプションの s2s-handle-invalid-metadata フラグの値を指定して、ファイルのメタデータに互換性のないキー名が含まれているファイルの処理方法を指定できます。 次の表では、各フラグ値について説明します。
| フラグ値 | Description |
|---|---|
| 無効であれば除外 | (既定のオプション)メタデータは、転送されたオブジェクトには含まれません。 AzCopy によって警告がログに記録されます。 |
| FailIfInvalid | オブジェクトはコピーされません。 AzCopy はエラーをログに記録し、転送の概要に表示される失敗した数にそのエラーを含めます。 |
| RenameIfInvalid | AzCopy は無効なメタデータ キーを解決し、解決されたメタデータ キー値ペアを使用してオブジェクトを Azure にコピーします。 AzCopy がオブジェクト キーの名前を変更するために実行する手順の詳細については、「 AzCopy によるオブジェクト キーの名前変更方法 」セクションを参照してください。 AzCopy でキーの名前を変更できない場合、オブジェクトはコピーされません。 |
AzCopy でオブジェクト キーの名前を変更する方法
AzCopy では、次の手順を実行します。
無効な文字を '_' に置き換えます。
新しい有効なキーの先頭に文字列
rename_を追加します。このキーは、元のメタデータ 値を保存するために使用されます。
新しい有効なキーの先頭に文字列
rename_key_を追加します。 このキーは、元のメタデータの無効な キーを保存するために使用されます。 メタデータ キーは Blob Storage サービスの値として保持されるため、このキーを使用して Azure 側のメタデータの回復を試みることができます。
ソースと宛先の種類を指定する
AzCopy では、パイプのシナリオやエミュレーターなど、自動検出が失敗する可能性がある場合に、 --from-to パラメーターを使用して、ソースと宛先のリソースの種類を明示的に定義します。 このパラメーターは、AzCopy が転送のコンテキストを理解し、それに応じて最適化するのに役立ちます。 このパラメーターを S3Blob に設定して、コマンドが Amazon S3 から Azure Blob Storage にコピーされていることを明示的に示します。
次のステップ
その他の例については、次の記事を参照してください。
設定の構成、パフォーマンスの最適化、および問題のトラブルシューティングを行うには、これらの記事を参照してください。