Начало в заметке "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)".
