こんにちは、@Manabu です。
EC2内にあるファイルをS3に転送したり、S3からEC2に取得したりするAWS CLIがあるということなので、調べてみました!
色々、細かいオプションがあるようなので、まとめてみます。
S3にファイルを転送する方法
S3で管理するファイルをやりとりするためには、AWS CLIを使用するという方法があります。
大きくは、ファイルのコピーとディレクトリの同期という方法で実行します。
それぞれ以下のコマンドを使用します。
- ファイルのコピー:s3 cpコマンド
- ディレクトリの同期:s3 syncコマンド
今回は、s3 syncコマンドを使用したディレクトリの同期について紹介します。
s3 syncコマンドとは?
syncコマンドは、ローカルディレクトリとS3バケット(またはS3バケット同士)のファイルを効率的に同期するためのAWS CLIコマンドです。
このコマンドを使用すると、新しく追加されたファイルや更新されたファイルを自動的にコピーできます。
実行する場合は、実行環境に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のアクセス権限を付与しましょう。
基本構文
syncコマンドは、ローカル環境からS3バケットへの同期・S3バケットからローカル環境への同期・S3バケット間での同期のパターンがあります。
ローカルからS3バケットへの同期
以下のようなコマンドで、ローカル環境のファイルをS3バケットへ同期をします。
aws s3 sync <LocalPath> <S3Uri>
// 例
aws s3 sync . s3://mybucket
S3バケットからローカルへの同期
以下のようなコマンドで、S3バケットのファイルをローカル環境へ同期します。
aws s3 sync <S3Uri> <LocalPath>
// 例
aws s3 sync s3://mybucket .
S3バケット間での同期
以下のようなコマンドで、S3バケット間の同期を実行します。
aws s3 sync <S3Uri> <S3Uri>
// 例
aws s3 sync s3://mybucket s3://mybycket2
便利なオプション
s3 syncコマンドで使用できる、便利なオプションをいくつか紹介します。
–quiet オプション
s3 syncコマンドを実行すると、どのディレクトリ・ファイルを転送したのかを実行ログとして表示されます。
このオプションを使用すると、ログが一切表示されないシンプルな形で実行することができます。
aws s3 sync . s3://mybucket --quiet
–exclude と –include オプション
このオプションで特定のファイルを同期から除外したり、逆に含めたりするためのオプションです。
例えば、.jpgファイルを除外したい場合は、–exclude “*.jpg”を使用します。
aws s3 sync . s3://mybucket --exclude "*.jpg"
–delete オプション
ソースに存在しないファイルをデスティネーションから削除します。
このオプションを使用することで、同期先をソースと完全に一致させることができます。
aws s3 sync .s3://mybucket --delete
その他にも、色々オプションがあるようなので、以下のページから参考にするようにしてください・
まとめ
今回は、ローカルやS3のフォルダの同期のできるs3 syncコマンドについて紹介しました。
ファイル操作については、s3 cpコマンドを使用するようなので、別の機会にまとめたいと思います。