こんにちは、@Manabu です。
EC2内にあるファイルをS3に転送したり、S3からEC2に取得したりするAWS CLIがあるということなので、調べてみました!
色々、細かいオプションがあるようなので、まとめてみます。
S3にファイルを転送する方法
S3で管理するファイルをやりとりするためには、AWS CLIを使用するという方法があります。
大きくは、ファイルのコピーとディレクトリの同期という方法で実行します。
それぞれ以下のコマンドを使用します。
- ファイルのコピー:s3 cpコマンド
- ディレクトリの同期:s3 syncコマンド
今回は、s3 cpコマンドを使用したディレクトリの同期について紹介します。
s3 cpコマンドとは?
syncコマンドは、ローカルファイルやS3オブジェクトを、ローカルやS3の別の場所にコピーするためのコマンドです。
単一のファイルやオブジェクトを簡単に転送でき、オプションを活用することで、柔軟な操作が可能です。
実行する場合は、実行環境にAWS CLIがインストールされており、適切なIAM権限が付与されていることを確認してください。
// aws cliのインストール確認
aws --version
aws-cli/2.15.30 Python/3.9.16 Linux/6.1.94-99.176.amzn2023.x86_64 source/x86_64.amzn.2023 prompt/off
EC2で実行するときは、IAMロールにS3のアクセス権限を付与しましょう。
基本構文
cpコマンドは、ローカルファイルをS3バケットにコピー・S3バケット内のオブジェクトをローカル環境にコピー・S3バケット間でのコピーのパターンがあります。
ローカルファイルをS3バケットにコピー
以下のようなコマンドで、ローカル環境のファイルをS3バケットへコピーします。
aws s3 cp <LocalPath> <S3Uri>
// 例
aws s3 cp ./test.txt s3://mybucket
S3バケット内のオブジェクトをローカル環境にコピー
以下のようなコマンドで、S3バケット内のオブジェクトをローカル環境にコピーします。
aws s3 cp <S3Uri> <LocalPath>
// 例
aws s3 cp s3://mybucket/test.txt .
S3バケット間でのオブジェクトをコピー
以下のようなコマンドで、S3バケット間のオブジェクトコピーを実行します。
aws s3 cp <S3Uri> <S3Uri>
// 例
aws s3 cp s3://mybucket/test.txt s3://mybycket2
便利なオプション
s3 syncコマンドで使用できる、便利なオプションをいくつか紹介します。
–quiet オプション
s3 syncコマンドを実行すると、どのファイルを転送したのかを実行ログとして表示されます。
このオプションを使用すると、ログが一切表示されないシンプルな形で実行することができます。
aws s3 cp ./test.txt s3://mybucket --quiet
–exclude と –include オプション
このオプションで特定のファイルを同期から除外したり、逆に含めたりするためのオプションです。
例えば、.jpgファイルを除外したい場合は、–exclude “*.jpg”を使用します。
aws s3 cp ./test.txt s3://mybucket --exclude "*.jpg"
–recursive オプション
指定したディレクトリやプレフィックス内の全てのファイルやオブジェクトを再帰的にコピーします。
コピーしたいものは、ファイルではなくディレクトリを指定するようにしましょう。
aws s3 cp . s3://mybucket --recursive
その他にも、色々オプションがあるようなので、以下のページから参考にするようにしてください・
まとめ
今回は、ローカルやS3のファイルを転送できる s3 cpコマンドについて紹介しました。
一つずつ転送したい場合に非常に便利なコマンドです。
ディレクトリごと転送(同期)したい場合は、以下の記事を参考にs3 syncコマンドを実行してみてください。