回答:
詳細については、「AWS CLIコマンドリファレンス」を参照してください。
AWSは最近、コマンドラインツールをリリースしました。これはbotoとよく似ており、次を使用してインストールできます。
sudo easy_install awscli
または
sudo pip install awscli
インストールしたら、次のコマンドを実行するだけです。
aws s3 sync s3://<source_bucket> <local_destination>
例えば:
aws s3 sync s3://mybucket .
すべてのオブジェクトをダウンロードします mybucket
現在のディレクトリに。
そして出力します:
download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt
これにより、一方向の同期を使用してすべてのファイルがダウンロードされます。指定しない限り、現在のディレクトリにある既存のファイルは削除されません。 --delete
。また、S3のファイルは変更または削除されません。
S3バケットからS3バケットへの同期、またはローカルからS3バケットへの同期を行うこともできます。
ドキュメントとその他の例を確認してください。
上記の例はバケット全体をダウンロードする方法ですが、次のコマンドを実行してフォルダを再帰的にダウンロードすることもできます
aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive
これによりPATH/TO/FOLDER
、BUCKETNAME
バケット内のディレクトリ内のすべてのファイルとフォルダキーを再帰的にダウンロードするようにCLIに指示されます。
s3cmd
とCyberduck
、私にとってawscli
はるかに私のバケットから〜70.000ファイルをダウンロードする最速の方法でした。
s3cmd
バケットのダウンロードに使用できます。
s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder
と呼ばれる使用可能な別のツールがありますrclone
。これは、Rcloneドキュメントのコードサンプルです。
rclone sync /home/local/directory remote:bucket
私には、ローカルマシンにAmazon S3のデータをコピーするために、いくつかの異なる方法を使用していたs3cmd
、とはるかに最も簡単ですCyberduckの。
Amazonの認証情報を入力し、シンプルなインターフェースを使用して、バケット、フォルダー、ファイルをダウンロード、アップロード、同期するだけです。
これには多くのオプションがありますが、最善の方法はAWS CLIを使用することです。
ここにウォークスルーがあります:
マシンにAWS CLIをダウンロードしてインストールします。
AWS CLIを構成します。
アカウントの作成時に受け取った有効なアクセスキーと秘密キーを入力してください。
以下を使用してS3バケットを同期します。
aws s3 sync s3://yourbucket /local/path
上記のコマンドで、次のフィールドを置き換えます。
yourbucket
>>ダウンロードするS3バケット。/local/path
>>すべてのファイルをダウンロードするローカルシステムのパス。s3://
バケット名にそのプレフィックスがあることを確認してください!!! ではaws s3 ls
、そのs3://
プレフィックスは必要ありませんが、cp
コマンドが必要です。
AWS S3 CLIを使用してダウンロードするには:
aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive
コードを使用してダウンロードするには、AWS SDKを使用します。
GUIを使用してダウンロードするには、Cyberduckを使用します。
aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "*" --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"
Windowsの場合、私が見つけた最も簡単な方法はS3ブラウザーです。優れたソフトウェアであり、非営利目的での使用は無料です。
Visual Studioを使用する場合は、「AWS Toolkit for Visual Studio」をダウンロードしてください。
インストール後、Visual Studio-AWS Explorer-S3-バケットに移動します-ダブルクリックします
ウィンドウでは、すべてのファイルを選択できます。右クリックしてファイルをダウンロードします。
@Laykeの答えは良いですが、大量のデータがあり、永遠に待ちたくない場合は、「AWS CLI S3構成」をお読みください。
次のコマンドは、AWS CLIに1,000スレッドを使用してジョブ(それぞれ小さなファイルまたはマルチパートコピーの一部)を実行し、100,000ジョブを先読みするように指示します。
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
これらを実行した後、簡単なsync
コマンドを使用できます。
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
または
aws s3 sync s3://source-bucket/source-path c:\my\local\data\path
CPU 4コアと16GB RAMを備えたシステムで、私のような場合(3-50GBファイル)、同期/コピー速度は約9.5MiB / sから700 + MiB / sになり、デフォルト設定の70倍の速度向上になりました。
S3の開発を少し行いましたが、バケット全体をダウンロードする簡単な方法が見つかりませんでした。
Javaでコーディングしたい場合は、jets3tする場合は libを使用してバケットのリストを作成し、そのリストを反復処理してバケットをダウンロードするのが簡単です。
まず、AWS管理コンソールから公開秘密鍵セットを取得して、S3serviceオブジェクトを作成できるようにします。
AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);
次に、バケットオブジェクトの配列を取得します。
S3Object[] objects = s3Service.listObjects(YourBucketNameString);
最後に、その配列を反復処理して、一度に1つずつオブジェクトをダウンロードします。
S3Object obj = s3Service.getObject(bucket, fileName);
file = obj.getDataInputStream();
接続コードをスレッドセーフなシングルトンに入れました。明らかな理由により、必要なtry / catch構文は省略されています。
Pythonでコーディングする場合は、代わりにBotoを使用できます。
BucketExplorerを見回した後、「バケット全体をダウンロードする」と思い通りの結果が得られる場合があります。
https://github.com/minio/mcでこれを行うことができます:
mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir
mcは、セッション、再開可能なダウンロード、アップロードなどもサポートしています。mc
Linux、OS X、およびWindowsオペレーティングシステムをサポートしています。Golangで記述され、Apacheバージョン2.0でリリースされました。
S3FoxでFirefoxを使用している場合は、すべてのファイルを選択(Shiftキーを押しながら最初と最後を選択)し、右クリックしてすべてをダウンロードできます...問題のない500以上のファイルで実行しました
Windowsの場合、これに適したGUIツールはCloudberry Explorer for S3です。http://www.cloudberrylab.com/free-amazon-s3-explorer-cloudfront-IAM.aspxです。かなり洗練されたファイルエクスプローラー、ftpのようなインターフェイスがあります。
そこにファイルしかない場合(サブディレクトリがない場合)の簡単な解決策は、すべてのファイル(click
最初、Shift+click
最後)を選択し、Enter
またはright click
を押してを選択することですOpen
。ほとんどのデータファイルの場合、これはそれらを直接コンピューターにダウンロードします。
別のGUIオプションを追加するには、WinSCPのS3機能を使用します。接続は非常に簡単で、UIでアクセスキーとシークレットキーだけが必要です。次に、ネストされたフォルダの再帰的なダウンロードなど、アクセス可能なバケットから必要なファイルを参照してダウンロードできます。
セキュリティを介して新しいソフトウェアをクリアすることは困難な場合があり、WinSCPはかなり普及しているため、より専門的なユーティリティをインストールするよりも、それを使用するだけの方が本当に有益です。
Windowsユーザーは、このリンクからS3EXPLORERをダウンロードする必要があります。このリンクにもインストール手順があります。- http ://s3browser.com/download.aspx
次に、s3explorerにシークレットキー、アクセスキー、リージョンなどのAWS認証情報を提供します。このリンクには、ブラウザのs3explorer:Copy Paste Linkの構成手順が含まれています:s3browser.com/s3browser-first-run.aspx
これで、すべてのs3バケットがs3explorerの左側のパネルに表示されます。
バケットを選択し、左上隅の[バケット]メニューをクリックして、メニューから[すべてのファイルをダウンロード]オプションを選択するだけです。以下は同じもののスクリーンショットです:
次に、フォルダを参照して、特定の場所にバケットをダウンロードします
[OK]をクリックすると、ダウンロードが開始されます。
aws syncは完璧なソリューションです。双方向ではありません。ソースから宛先への片方向です。また、バケットに多くのアイテムがある場合は、ダウンロードが速くなるように(インターネット経由ではなくイントラネット経由でダウンロードが行われるため)s3エンドポイントを最初に作成することをお勧めします。
ここでは、すべてのバケットをダウンロードし、それらをリストし、それらのコンテンツをリストするためのものをいくつか示します。
//connection string
private static void dBConnection() {
app.setAwsCredentials(CONST.getAccessKey(), CONST.getSecretKey());
conn = new AmazonS3Client(app.getAwsCredentials());
app.setListOfBuckets(conn.listBuckets());
System.out.println(CONST.getConnectionSuccessfullMessage());
}
private static void downloadBucket() {
do {
for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
app.setBucketKey(objectSummary.getKey());
app.setBucketName(objectSummary.getBucketName());
if(objectSummary.getKey().contains(CONST.getDesiredKey())){
//DOWNLOAD
try
{
s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
s3Client.getObject(
new GetObjectRequest(app.getBucketName(),app.getBucketKey()),
new File(app.getDownloadedBucket())
);
} catch (IOException e) {
e.printStackTrace();
}
do
{
if(app.getBackUpExist() == true){
System.out.println("Converting back up file");
app.setCurrentPacsId(objectSummary.getKey());
passIn = app.getDataBaseFile();
CONVERT= new DataConversion(passIn);
System.out.println(CONST.getFileDownloadedMessage());
}
}
while(app.getObjectExist()==true);
if(app.getObjectExist()== false)
{
app.setNoObjectFound(true);
}
}
}
app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
}
while (app.getS3Object().isTruncated());
}
/ ----------------------------拡張メソッド------------------- ------------------ /
//Unzip bucket after download
public static void unzipBucket() throws IOException {
unzip = new UnZipBuckets();
unzip.unZipIt(app.getDownloadedBucket());
System.out.println(CONST.getFileUnzippedMessage());
}
//list all S3 buckets
public static void listAllBuckets(){
for (Bucket bucket : app.getListOfBuckets()) {
String bucketName = bucket.getName();
System.out.println(bucketName + "\t" + StringUtils.fromDate(bucket.getCreationDate()));
}
}
//Get the contents from the auto back up bucket
public static void listAllBucketContents(){
do {
for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
if(objectSummary.getKey().contains(CONST.getDesiredKey())){
System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
app.setBackUpCount(app.getBackUpCount() + 1);
}
}
app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
}
while (app.getS3Object().isTruncated());
System.out.println("There are a total of : " + app.getBackUpCount() + " buckets.");
}
}
Neel Bhaatがこのブログで説明しているように、この目的で使用できるさまざまなツールがあります。AWSが提供するものもあり、ほとんどがサードパーティのツールです。これらすべてのツールでは、AWSアカウントキーとシークレットをツール自体に保存する必要があります。サードパーティのツールを使用するときは、十分な注意を払ってください。保存した資格情報にコストがかかり、価値がなくなって死んでしまう可能性があります。
したがって、私は常にこの目的でAWS CLIを使用することをお勧めします。これはこのリンクから簡単にインストールできます。次に、次のコマンドを実行して、キーとシークレット値をAWS CLIに保存します。
aws configure
次のコマンドを使用して、AWS S3バケットをローカルマシンに同期します。(ローカルマシンにはAWS CLIがインストールされている必要があります)
aws s3 sync <source> <destination>
例:
1)AWS S3からローカルストレージへ
aws s3 sync <S3Uri> <LocalPath>
2)ローカルストレージからAWS S3へ
aws s3 sync <LocalPath> <S3Uri>
3)AWS s3バケットから別のバケットへ
aws s3 sync <S3Uri> <S3Uri>
このAWS CLIコマンドを使用して、S3バケットのコンテンツ全体をローカルフォルダーにダウンロードできます
aws s3 sync s3://your-bucket-name "Local Folder Path"
このようなエラーが発生した場合
fatal error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
--no-verify-ssl(ブール)
デフォルトでは、AWS CLIはAWSサービスと通信するときにSSLを使用します。SSL接続ごとに、AWS CLIはSSL証明書を検証します。このオプションは、SSL証明書を検証するデフォルトの動作を上書きします。 参照
このタグは--no-verify-sslコマンドで使用します
aws s3 sync s3://your-bucket-name "Local Folder Path" --no-verify-ssl
s3 sync
すでに複数回説明しています。+ --no-verify-ssl
セキュリティへの影響を説明せずにの使用を提案することは犯罪です。
バケットが非常に大きい場合は、s4cmd
並列接続を作成してダウンロード時間を改善するというコマンドがあります。
Debianのようにインストールするには
apt install s4cmd
ピップがある場合:
pip install s4cmd
~/.s3cfg
ファイルが存在する場合は(インストールs3cmd
して実行しない場合)、ファイルを読み取るs3cmd --configure
か--access-key=ACCESS_KEY --secret-key=SECRET_KEY
、コマンドで指定できます。
cliはに似ていs3cmd
ます。あなたの場合sync
、ファイルを再ダウンロードせずにダウンロードをキャンセルして再開できるので、をお勧めします。
s4cmd [--access-key=ACCESS_KEY --secret-key=SECRET_KEY] sync s3://<your-bucket> /some/local/dir
大量のデータ(> 1TB)をダウンロードする場合は、請求に影響する可能性があるので注意してください。
このコマンドを試してください:
aws s3 sync yourBucketnameDirectory yourLocalDirectory
たとえば、バケット名がでmyBucket
、ローカルディレクトリがの場合、次のようになりますc:\local
。
aws s3 sync s3://myBucket c:\local
awscliの詳細については、このaws cliインストールを確認してください
aws s3 sync
、最高です。しかし、誰も強力なオプションを指摘しませんdryrun
でした:。このオプションを使用すると、を使用してsync
いるときにs3から何がダウンロード/アップロードされるかを確認できます。これは、ローカルまたはs3バケットのコンテンツを上書きしたくない場合に非常に役立ちます。これは使用方法です:aws s3 sync <source> <destination> --dryrun
不要な変更をアップロードしないように、新しいコンテンツをバケットにプッシュする前にずっと使用していました。