WindowsでWinSCPコマンドを用いてAWS S3にファイルを同期することにしました。
ファイル転送処理用にWindows PCを1台用意し、WinSCPで手動でAWS S3にフルバックアップを取っていたのですが、流石に同期を毎回手動実行することは容量的に厳しいためWinSCPのコマンドを用いて自動化することにしました。
手動でも簡単にできますが、一々作業に気を張るのはやはり賢くないため、自動化することにしました。
WinSCPコマンドを用いた同期処理を作成する
下記のローカル環境からリモート環境にミラーリングする処理を記載したファイルを作ります。
ファイル名は任意でここではsynchronize.txtとしておきます。
# エラー時に処理終了
option batch abort
# 確認をされなくする
option confirm off
# S3に接続
open S3://[アクセスキーID]:[シークレットキー]@ap-northeast-1
# ローカルからリモートに同期
synchronize remote [ローカルディレクトリ] [リモートディレクトリ] -delete -criteria=either
#切断
close 1
上記を作成したらWinSCP.comと同じフォルダに配置します。
実行バッチを作成する
同期処理のプログラムを実行する処理を作成します。
ファイル名はbackup.batとします。
# WinSCPで同期処理のプログラムを実行
cd “C:¥program files (x86)¥WinSCP”
WinSCP.com /script .¥synchronize.txt /logs .¥logs¥synchronize_log.txt
# 終了
exit
上記を作成したらWinSCP.comと同じパスに配置します。
タスクスケジューラに登録する
タスクスケジューラに実行バッチをスケジュール登録します。
タスクスケジューラを起動
タスクスケジューラライブラリを右クリック
タスクの作成をクリック
名前を任意で入力
ユーザーがログオンしているかどうかに関わらず実行する
トリガータブをクリック
新規をクリック
設定で任意のスケジュールを登録
OKをクリック
操作タブをクリック
新規をクリック
プログラムで下記を入力する
C:¥Program Files (x86)¥WinSCP¥baukup.bat
OKをクリック
以上で動作するはずです。
aws cliのsyncを利用したほうがいい
WinSCPのコマンドでできないかと思い進めましたが、AWS S3を使うのであればaws cliのsyncを利用したほうがいいです。
処理速度もWinSCPのコマンドより早いです。
まあ多少いじればS3以外にWindowsからバックアップ取る際に応用できるので勉強になりました。

