1
/
5

Windowsのフォルダとs3バケットを定期的に同期させる【エンジニアブログより】

今回は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 も、なかなかいいですね。

株式会社サーバーワークス's job postings
1 Likes
1 Likes

Weekly ranking

Show other rankings
Like Kaede Suzuki's Story
Let Kaede Suzuki's company know you're interested in their content