S3にバックアップを取るため、AWS CLIでの同期処理を実行しました。
一応説明しておくと、AWS CLIはAWSをコマンドラインから操作するためのオープンソースのツールです。
バックアップを取りたいフォルダサイズが大容量のため時間を短くする良い方法がないか模索中ですが、とりあえず単純実行してます。
少なくともWinSCPのコマンドを利用して同期処理を実行するよりは4倍近くスピード出てました。
WinSCPの設定は前の記事で記載しました。
環境はWindows10です。
AWS CLIの利用準備をする
私はAWS CLIをインストールしていなかったため、AWSのサイトでインストールします。
2023年3月時点では下記です。
Windowsでのインストール手順を使います。
下記のAWSのサイトの手順通りで問題なくインストールできました。
インストールしたら念のため下記コマンドPowershellで実行し、インストールできているかを確認。
aws --version
インストールされていたためバージョン情報がでてきました。
次にawsの接続設定をします。
下記コマンドを実行。
aws configure
下記の順で入力を求められると思うので入力します。
Access Key:[]
Secret Key:[]
Region:ap-northeast-1
Output Style:json
Regionは東京に住んでるなら基本はこれでいいと思ってます。
Output Styleは任意ですが、CLIで扱いやすいので基本的にはjsonでいいのではないかと判断します。
これで準備完了です。
AWS CLIのsyncコマンドで同期する
下記の通り書けば問題ありません。
aws s3 sync [バックアップ対象パス] [バックアップ先パス] --delete | Tee-Object FilePath C:¥logs¥sync_log.txt
aws s3 syncに続けてバックアップ対象のパス、バックアップ先のパスの順で記載します。
–deleteはオプションでこちらをつけるとバックアップ先にあるけどバックアップ対象でないファイルを削除してくれます。
Tee-Object以後は一応ログ出しとこうと思って付けました。
Tee-Objectは標準出力を画面に出した上で次の処理に受け渡すコマンドです。
syncコマンドの標準出力をテキストとしてファイルに書き込んでいます。
結構なログの量になるため容量にあまり空きがないなら書かない方がいいです。
ファイルパスが長すぎてsyncエラー発生
あまりに大量のファイルがありましたので多くのエラーが起きました。
ほとんどは書き方を変えたり処理を分割するなどして解決できたのですが、ファイルパスが長過ぎるものに関しては上手くsyncできませんでした。
ファイルパスが長すぎるものだけエラーが起きていることは突き止めたのですが、その詳細は確認しきりませんでした。
例えば、何文字からエラーが起きるのかやsyncコマンドの文字数制限なのかpowershellの変数の文字数制限(シンプルに1行コマンドを書きましたが実際には結構処理書いているため)なのかなどです。
このエラーが起きるファイルについてはそのファイルがあるパスごとWinSCPのGUIから同期を手動実行しました。
syncコマンドの実行は注意する
バックアップ対象とバックアップ先の記載順を間違えると大事件ですので、テストを十分にした上でジョブで自動実行するか、手動実行するのであれば慎重にやりましょう。
簡単に書けるからこそ注意です。
私はバックアップしているデータが何十テラもあるため間違えたらもう立ち直れないかもしれません。