【AWS CLI】Amazon FSx for Windows File Serverの古いファイルをAmazon S3にエクスポートしてみた
こんにちは。kisaragi です。
この記事では、FSxの古いファイルをS3にエクスポートする方法について解説していきます。
この記事で何が得られる?
古いファイルのせいでディスク容量が足りない…
とはいえ、ディスク容量を大きくすると、コストもかさむし…
そういった時、解決できる方法を解説していきます。
前提 / 環境
- Windows Server 2019 Base
- ami-0a15fc610e3955298
- AWS CLI 接続できていること
- Windows Powershell
- S3関連権限があること
- FSxがマウント済みであること
コード全体像
$fsxPath = "\\FSxServer\share" $s3Bucket = "your-s3-bucket-name" $region = "ap-northeast-1" $cutoffDate = (Get-Date).AddMinutes(-10) $items = Get-ChildItem -Path $fsxPath -Recurse -File | Where-Object { $_.LastAccessTime -lt $cutoffDate } $items = $items | Sort-Object { ($_.FullName -split "\\").Count } -Descending foreach ($item in $items) { $s3Key = $item.FullName.Replace($fsxPath, "").Replace("\", "/") $s3Uri = "s3://$s3Bucket$s3Key" Write-Output "Copying $($item.FullName) to $s3Uri" aws s3 mv "$($item.FullName)" "$s3Uri" --region $region $folderItems = Get-ChildItem -Path $item.PSParentPath if ($folderItems.Count -eq 0) { Write-Output "Folder is empty. Deleting $($item.PSParentPath)" Remove-Item -Path $item.PSParentPath -Force } }
コード解説
以下のサンプルコードを参考にして入力してください。
▼ 変数を指定
# FSxのパスを入力 $fsxPath = "\\fs-0919xxxxxxxxxxxxx.NHNTechorus.local\share" # S3バケット名を入力 $s3Bucket = "xxxxx-bucket-test-fsxcopy" # リージョンを入力 $region = "ap-northeast-1"
▼ cutoffDate変数に時間を指定
$cutoffDate = (Get-Date).AddMinutes(-10) # 10分
$cutoffDate = (Get-Date).AddDays(-5):5日
$cutoffDate = (Get-Date).AddMonths(-3):3ヶ月
$cutoffDate = (Get-Date).AddYears(-1):1年
▼ items変数にファイルを収納
# 最後にアクセスされた時間から10分以上のもの $items = Get-ChildItem -Path $fsxPath -Recurse -File | Where-Object { $_.LastAccessTime -lt $cutoffDate }
-lt : 指定時間より古いファイル
-gt : 指定時間より新しいファイル
$_.LastAccessTime : 最後にアクセスした時間
$_.LastWriteTime : 最後に修正した時間
$_.CreationTime : ファイルが作られた時間
▼ 配下フォルダーから処理を行うためにsort
$items = $items | Sort-Object { ($_.FullName -split "\\").Count } -Descending
▼ WindowsからS3へエクスポート
foreach ($item in $items) { $s3Key = $item.FullName.Replace($fsxPath, "").Replace("\", "/") $s3Uri = "s3://$s3Bucket$s3Key" Write-Output "Copying $($item.FullName) to $s3Uri" aws s3 mv "$($item.FullName)" "$s3Uri" --region $region $folderItems = Get-ChildItem -Path $item.PSParentPath if ($folderItems.Count -eq 0) { Write-Output "Folder is empty. Deleting $($item.PSParentPath)" Remove-Item -Path $item.PSParentPath -Force } }
注意点
aws s3 mv コマンドはS3へのエクスポート後、Windowsのファイルが削除されてしまいます。
もし、S3へのエクスポート後にもWindowsにファイルを残したい場合はaws s3 cpをご利用ください。
foreach ($item in $items) { $s3Key = $item.FullName.Replace($fsxPath, "").Replace("\", "/") $s3Uri = "s3://$s3Bucket$s3Key" Write-Output "Copying $($item.FullName) to $s3Uri" aws s3 cp "$($item.FullName)" "$s3Uri" --region $region }
実行
▼ Windows Powershellを実行
画像を参考にして書いたコードを入力してください。
コードを実行すると、画像のようにメッセージが出力されます。
FSxの中身
エクスポート後S3の中身
FSxからS3バケットへのエクスポートが完了しました。
さいごに
今回はFSxを使用してS3へエクスポートを行いましたが、Windowsのパスならどこにでも活用できます。
$fsxPath = "\\FSxServer\share" → "C:\your_folder"
運用上、ストレージのディスク容量で悩んでしまう時がありますね。
S3は容量無制限の優れたストレージサービスです。
ストレージからS3への条件エクスポートでディスク容量を軽くしてみませんか。
ディスク容量で悩んでいる方に少しでも役立てたら嬉しいです。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2024 Japan AWS Jr. Champions
2023年度新卒入社。出身は韓国です。
Recommends
こちらもおすすめ
-
AWS初心者におすすめの勉強法と運用のポイント
2019.5.30
-
お願い城之内、Amazon S3 のバケットポリシーに Deny を使わないで!
2022.11.28
-
AWS Glueの「AmazonS3イベント通知を使用した加速クロール」とは何か
2022.12.22
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16