今回はWindowsのフォルダにあるファイルを定期的にs3バケットに同期させる方法について書きます。
ベタな内容とは思いますが、日頃はMacやLinuxな方には新鮮な内容かもしれません。
前提とする環境
- s3バケットは作成済み
- Windows Server 2012以降
- Windows上にawscliはインストール済み
- Windows上にaws configureで設定済み
- IAMユーザーにs3に対する適切な権限がある
やってみよう
下記の例では、system-aという仮のシステムに関するものです。
バケット名とかもsystem-aにしていますが、例なのでそこらへんは各自の名前に置き換えてください。
Step1.スクリプト作成
このスクリプトの機能は、2つです。
- 指定したフォルダをs3バケットに同期する
- 成功、失敗をWindowsイベントログに書き込む
下記スクリプト内の変数を調整していただければ、動くはずです。
# s3バケットを指定 $s3bucket = "s3://system-a" # ローカルフォルダを指定 $localfolder = "c:\data\system-a" # イベントログの名前 $eventlog = "s3sync_system-a" # IAMユーザーのプロファイルを指定 $iamprofile = "system-a" # イベントログが存在しない場合は作成する。 if ([System.Diagnostics.EventLog]::SourceExists($eventlog) -eq $false){ New-EventLog -LogName Application -Source $eventlog } # ローカルフォルダとs3バケットを同期する。 aws s3 sync $localfolder $s3bucket --profile $iamprofile # 同期の成功・失敗を確認し、イベントログにメッセージを書き込む。 if ($?) { Write-Output "s3への同期に成功しました。" Write-EventLog -LogName Application -EntryType Information -Source $eventlog -EventId 0 -Message "s3への同期に成功しました。" } else { Write-Output "s3への同期に失敗しました。" Write-EventLog -LogName Application -EntryType Error -Source $eventlog -EventId 1 -Message "s3への同期に失敗しました。" }
ちなみに「EventId 0」は情報、「EventId 1」はエラーとして、イベントログに記録されました。
イベントログは私もまだよく理解していませんが、最低限の分類はできたかなと思います。
試しに一度実行してみましょう。
PS C:\Users\Administrator> c:\script\s3sync_system-a upload: ..\..\data\system-a\testfile1.txt to s3://system-a/testfile1.txt upload: ..\..\data\system-a\testfile2.txt to s3://system-a/testfile2.txt s3への同期に成功しました。
イベントログも見てみましょう。
「s3への同期に成功しました。」と確認できますね。(エラーとあるのは、失敗した時のログになります。)
Step2.タスクの作成
次に定期実行できるようにタスクスケジューラにStep1で作成したスクリプトを登録します。
タスクスケジューラを開く
まず、タスクスケジューラを開いたら、適当な名前でフォルダを作成します。(今回はCustom)
全般タブ
次にタスクの作成に入ります。
なお、今回はAdministratorユーザーで実行するので「最上位の特権で実行する」のチェックは外していますが、他のユーザーの場合は必要かもしれません。
トリガータブ
トリガーの設定をします。
ここでは毎時0分に動作するように設定してみました。
操作タブ
操作の設定をします。
プログラム/スクリプト
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加
-c "C:\script\s3sync_system-a.ps1"
タスクの保存
タスク設定を保存します。
ここでパスワードを求められます。
完成
終わりに
冒頭に書いた通り、ベタですが、よく使える感じのスクリプト・手順が書けたのではないかと思います。
今後のステップとしては、ログをフィルタして通知といったところでしょうか。
AWS & Windows も、なかなかいいですね。
渡辺 信秀(記事一覧)
2017年入社 / 地味な内容を丁寧に書きたい