【Powershell】AWS S3にファイルバックアップするスクリプトを作る

AWSに関して
Web上の事例はLinuxばかりでWindowsの事例が少ない気がする!(※個人の感想です)

あと、AWSではないが、
クラウドサービスでよくある「S3互換のストレージ」に関して
使いかたがわからん!!!!
AWSでは「AWS Tools for Windows PowerShell」があるけど、そのS3互換のストレージでは何使えばいいんや・・・
ナレッジやら事例をもっとあげてください。どことは言わないけど。。



その辺は置いておいて
今回はWindows ServerからS3へファイルを保存するPowershellスクリプトを作ります。

■やりたいこと
AWS EC2で稼働するWindows Serverインスタンスの特定のフォルダ配下全てをS3にアップロード(バックアップ)する。


■環境

・AWS EC2
OS:Windows Server 2016
instance type:t2.micro
AWSPowershellバージョン
PS C:\Users\Administrator> Get-AWSPowerShellVersion

AWS Tools for Windows PowerShell
Version 3.3.23.0
Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.

Amazon Web Services SDK for .NET
Core Runtime Version 3.3.5.0
Copyright 2009-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.

Release notes: https://aws.amazon.com/releasenotes/PowerShell

This software includes third party software subject to the following copyrights:
- Logging from log4net, Apache License
[http://logging.apache.org/log4net/license.html]



■やること

  1. AWS アカウント作成
  2. VPC、EC2インスタンス作成
  3. S3バケット作成
  4. IAM ロール作成
  5. IAM ロールをEC2へアタッチ
  6. Powershellスクリプト作成
  7. タスクスケジューラ タスク作成
1.AWS アカウント作成
→割愛
2.VPC、EC2インスタンス作成
→割愛
3.S3バケット作成
→割愛
4.IAM ロール作成
  • AWS マネジメントコンソールにログイン
  • IAMでロールを作成する。






5.IAM ロールをEC2へアタッチ
  • EC2へ移動。
  • 特定のインスタンスを選択して、[アクション > インスタンスの設定 > Attach/Replace IAM role]を選択。

  • 作成したロールを選択して、[Apply]を選択。
<備考>
EC2インスタンスへIAMロールのアタッチ。
何気に使いましたが、既存のEC2インスタンスへIAMロールをアタッチする機能は最近(2017年2月)になって利用可能になったようです。

6.Powershellスクリプト作成
powershellスクリプトとバックアップするフォルダを定義するxmlファイルを作成しました。

【S3BackupConfig.xml】

  
    
      Backup Directory1
      C:\BackupSapmle\Backup Directory1
    
  

【S3Backup.ps1】
$TargetBucketName = "バケット名"
$scriptPath = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)
$BKdirInfo = [xml](Get-Content "$scriptPath\S3BackupConfig.xml")

foreach ($Folders in $BKdirInfo.BKConfiguration.Folders) {
  foreach($FolderInfo in $Folders.Folder){
   Write-S3Object -BucketName  $TargetBucketName -Folder $FolderInfo.path -KeyPrefix $FolderInfo.KeyPrefix -Recurse
   #Write-Host $FolderInfo.KeyPrefix
   #Write-Host $FolderInfo.path
  }
}

<備考>
・xmlファイルとps1ファイルは同じ場所に置く。
・フォルダを変えたい、追加したい場合はxmlファイルをいじればよい。
・EC2にロールをアタッチすることで、アクセスキー IDとシークレットキーをスクリプトに記載する必要がない。セキュア!スクリプトが漏れても(???)大丈夫!初期設定も不要で楽!
・xmlファイルにファイル用のタグを作れば個別のファイルもバックアップ可能。
 ※もちろんPowershellスクリプトも作り直す必要あり。

7.タスクスケジューラ タスク作成
schtasks /create /tn S3BackupTask /tr \"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"\" /c "C:\Tool\S3Backup.ps1"" /st 17:00 /sc once /rl highest /F

<備考>
・スケジュール(/stと/sc)は適宜変えてください。

■結果

アップできました。
サブディレクトリもコピーされています。


<備考>
・世代管理はS3のバージョニングでやれるかな?
・S3エンドポイントとか作ればと性能(転送速度)上がる?


■参考にしたサイト

コメント

このブログの人気の投稿

【ActiveDirectory】ドメコンはNTPサーバーとして使えるの?クライアントLinuxでもいける?