2016-10-11 8 views
1

私はS3バケットにファイルを転送するコードを持っていますが、今はファイルを2つのS3バケット(バケットAとバケットB)に同時に転送する必要があります。同じことを行う簡単な方法は、2番目のバケットのファイルを転送するコードを書き直しますが、私はこれをやりたくありません。それをスマートに行うための他の方法はありますか? 何か助けや助言をいただければ幸いです。事前に感謝phpで同時にローカルストレージから2つのS3バケット(バケットAとバケットB)にファイルを転送するには?

答えて

0

何を意味するのですか同じ時間に

ファイルを1つのaws s3バケットに送信するには、リクエストを開始する必要があります.1回のリクエストで1つのバケットにしかファイルをプッシュできないため、2つのリクエストを実行して、バケツ。 「同時に」

シームレス達成するために、あなたが転送オブジェクトがあることを意味GuzzleHttp \約束\ PromisorInterface、のインスタンスであるasync mode

に各要求を実行しているとして、並行して、要求を実行することができますPHPのv3のSDKを使用して転送は非同期に行われ、オブジェクトの約束メソッドを呼び出すことによって開始されます。

$clientA = new \Aws\S3\S3Client([ 
    'region' => 'us-east-1', 
    'version' => '2006-03-01', 
]); 
$clientB = new \Aws\S3\S3Client([ 
    'region' => 'us-west-2', 
    'version' => '2006-03-01', 
]); 
$source = '/path/to/source/files'; 
$destA = 's3://bucketA'; 
$destB = 's3://bucketB'; 
$managerA = new \Aws\S3\Transfer($clientA, $source, $destA); 
$managerB = new \Aws\S3\Transfer($clientB, $source, $destB); 

// Initiate the transfer and get a promise. 
$promiseA = $managerA->promise(); 
$promiseB = $managerB->promise(); 

// Do something when the transfer is complete using the then() method. 
$promiseA->then(function() { 
    echo 'sending to bucket A!'; 
}); 

$promiseB->then(function() { 
    echo 'sending to bucket B!'; 
}); 
+0

お返事ありがとうございます。はい、間違っていると同時に、同時に同じことを意味します。私はすでに2つの宛先バケットにファイルを送信するこの方法を持っています。これを行うための他の方法はありますか?私はあなたに尋ねたいもう一つのことはありますか?両方の宛先バケットの領域はこのケースでは異なりますが、同じことを達成できますか? –

+0

2つのクライアントを宣言する必要があります(各地域ごとに1つ)。更新された例を参照してください。別の方法として、最初のファイルをアップロードしてイベントをトリガーして他のバケット上のファイルを複製した後にトリガーをかけることはありませんが、これは重複を達成できますが、同時に_これは私がシームレスなリアルタイム –

0

あなたは別のバケットにコピーしたファイルラムダ関数を作成することができます。実装の例はContent Replication Using AWS Lambda and Amazon S3です。ラムダ関数を使うことで、PHPアプリケーションを変更する必要はありません。

+0

jbirdさん、ありがとう、私はあなたが共有したリンクを通過しましたが、私はすべてのファイルを2番目の送り先バケットに送りたくないので、1つの送り先バケットで送り先バケットと残りのファイルの両方に特定のファイルを送りたいもう1つのことをお聞きしたいと思います。両方の送り先バケットの領域がこのケースで異なる場合は、同じことを達成できますか? –

関連する問題