Начало в заметке "Servers - Архивирование в AWS Glacier (часть 2)".
В этой заметке описывается скрипт для установки задания по инвентаризации облачного архива AWS Glacier для того, чтобы удостовериться, что файл, скопированный на предыдущем этапе, успешно размещен в облаке.
Логика скрипта:
- Подключиться к AWS Glacier.
- Создать задание на инвентаризацию коллекции архивов.
- Создать файл с номером задания, чтобы через 4-12 часов считать результаты инвентаризации, основываясь на записанном в файле номере задания.
Код скрипта:
# AWS variables $AWSAccountID = 'AWS_Account_ID' $AWSRegion = 'AWS_region' $AWSVaultName = 'AWS_Vault_Name' $AWSProfileAccessKey = "AWS_Access_Key" $AWSProfileSecretKey = "AWS_Secret_Key" $AWSJobIdFileName = "AWSGlacier-InventoryJobId.txt" # Registering AWS libraries Add-Type -Path "C:\Program Files (x86)\AWS SDK for .NET\bin\Net45\AWSSDK.Core.dll" Add-Type -Path "C:\Program Files (x86)\AWS SDK for .NET\bin\Net45\AWSSDK.Glacier.dll" Function Write-ScriptLog { Param( [CmdletBinding()] [Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] [String]$Message, [Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] [String]$LogFile ) Process { $LogMessage = Get-Date -uformat "%d.%m.%Y %H:%M:%S" $LogMessage += "`t" $LogMessage += $Message $LogMessage | Out-File -FilePath $LogFile -Append } }#End Function # --- Start --- # Calculating variables $CurrentDate = Get-Date $ScriptFolder = $MyInvocation.MyCommand.Path.SubString(0,($MyInvocation.MyCommand.Path.Length - ` $MyInvocation.MyCommand.Name.Length)) $LogFile = $ScriptFolder + 'Logs\' + (Get-Date -format yyyy_MM_dd) + "_" + ` $MyInvocation.MyCommand.Name.SubString(0,($MyInvocation.MyCommand.Name.Length - 4)) + ".log" # Log-file creation If (-not(Test-Path ($ScriptFolder + 'Logs') -PathType Container )) { New-Item -ItemType Directory -Path ($ScriptFolder + 'Logs') } Out-File -FilePath $LogFile Write-ScriptLog -LogFile $LogFile -Message ($MyInvocation.MyCommand.Name + " started") Write-ScriptLog -LogFile $LogFile -Message ("============================== Input data ==============================") Write-ScriptLog -LogFile $LogFile -Message ("AWS Account ID = $AWSAccountID") Write-ScriptLog -LogFile $LogFile -Message ("AWS Region = $AWSRegion") Write-ScriptLog -LogFile $LogFile -Message ("AWS Vault Name = $AWSVaultName") Write-ScriptLog -LogFile $LogFile -Message ("AWS Job Id File Name = $AWSJobIdFileName") Write-ScriptLog -LogFile $LogFile -Message ("============================== Processing ==============================") # Output file name $AWSJobIdFilePath = $ScriptFolder + $AWSJobIdFileName If (-not (Test-Path($AWSJobIdFilePath))) { $AWSEndpoint = [Amazon.RegionEndpoint]::GetBySystemName($AWSRegion) # Set inventory job for a AWS Glacier vault $AWSGlacierClient = [Amazon.Glacier.AmazonGlacierClient]::New($AWSProfileAccessKey, $AWSProfileSecretKey, $AWSEndpoint) Write-ScriptLog -LogFile $LogFile -Message ("Connection to AWS Glacier is opened") $AWSGlacierJobParameters = [Amazon.Glacier.Model.JobParameters]::new() $AWSGlacierJobParameters.Type = "inventory-retrieval" $AWSGlacierJobParameters.Description = "Retrieve inventory of a vault" $AWSGlacierJobRequest = [Amazon.Glacier.Model.InitiateJobRequest]::new($AWSAccountID, $AWSVaultName, $AWSGlacierJobParameters) Try { $AWSGlacerJobId = $AWSGlacierClient.InitiateJob($AWSGlacierJobRequest).JobId Write-ScriptLog -LogFile $LogFile -Message ("Inventory retrieval job is set with Id $AWSGlacerJobId") } Catch { Write-ScriptLog -LogFile $LogFile -Message ("----> Error: " + $_.Exception.Message) } # Saving the result to the output file If ($AWSGlacerJobId -ne $Nothing) { $AWSGlacerJobId | Out-File -FilePath $AWSJobIdFilePath $AWSGlacierClient.Dispose() } Else { Write-ScriptLog -LogFile $LogFile -Message ("Job is not set") } Write-ScriptLog -LogFile $LogFile -Message ("Connection to AWS Glacier is closed") } Else { Write-ScriptLog -LogFile $LogFile -Message ("The processing is stopped") Write-ScriptLog -LogFile $LogFile -Message ("Use Process-AWSGlacierChecking.ps1 script to process existing Job Id") } # --- End --- Write-ScriptLog -LogFile $LogFile -Message ("========================================================================") Write-ScriptLog -LogFile $LogFile -Message ($MyInvocation.MyCommand.Name + " stopped")
Входные данные скрипта:
- AWSAccountID - ID учетной записи Amazon Web Services
- AWSRegion - регион, где находится коллекция архивов
- AWSVaultName - имя коллекции архивов
- AWSProfileAccessKey - учетная запись AWS с правом доступа к коллекции архивов
- AWSProfileSecretKey - ключ к учетной записи AWS
- AWSJobIdFileName - имя файла, в котором нужно сохранить номер задания (файл сохраняется в той же папке, где лежит скрипт)
Результат работы скрипта:
- Установленное задание на инвентаризацию коллекции архивов в AWS Glacier.
- Файл с номером задания по инвентаризации.
- Лог-файл работы скрипта.
Продолжение в заметке "Servers - Архивирование в AWS Glacier (часть 4)".