Create Snapshot

VIAcode.AwsExtension.Task.EbsCreateSnapshot (Task)

This task creates snapshot for selected EBS Volume by means of AWS SDK.

Element properties:

TargetAmazon.AmazonWebServices.EbsVolume
AccessibilityPublic
CategoryMaintenance
EnabledTrue
RemotableFalse
Timeout120

Member Modules:

ID Module Type TypeId RunAs 
EbsCreateSnapshotProbe ProbeAction VIAcode.AWSExtension.Modules.ScriptClientProbeAction Default

Source Code:

<Task ID="VIAcode.AwsExtension.Task.EbsCreateSnapshot" Target="AWS!Amazon.AmazonWebServices.EbsVolume" Accessibility="Public" Enabled="true" Remotable="true" Timeout="120">
<Category>Maintenance</Category>
<ProbeAction ID="EbsCreateSnapshotProbe" TypeID="VAMM!VIAcode.AWSExtension.Modules.ScriptClientProbeAction">
<TimeoutSeconds>300</TimeoutSeconds>
<ScriptName>EbsCreateSnapshot.ps1</ScriptName>
<ScriptBody><Script>param($AWSAccessKey, $AWSSecretKey, $VolumeId, $RegionName)

$SCRIPT_EVENT_ID = 4210
Set-StrictMode -Version 1

#Event Severity values
$INFORMATION_EVENT_TYPE = 0
$ERROR_EVENT_TYPE = 1

$AWS_URL = "https://{0}.{1}.amazonaws.com"
$EC2_DOMAIN = "ec2"

function Main {
param(
$VolumeId,
$RegionName,
$AWSAccessKey,
$AWSSecretKey
)
try
{
$api = New-Object -comObject "MOM.ScriptAPI"

#
# Get access to Amazon EC2 via SDK
#
$ec2Config = New-Object Amazon.EC2.AmazonEC2Config;
$ec2Config.ServiceURL = $AWS_URL -f $EC2_DOMAIN, $RegionName
$ec2client = [Amazon.AWSClientFactory]::CreateAmazonEC2Client($AWSAccessKey, $AWSSecretKey, $ec2Config)

$header = "Create Snapshot EBS Volume task successfully completed."
$currentEventType = $INFORMATION_EVENT_TYPE

# Perform Create Snaphot
$request = New-Object Amazon.EC2.Model.CreateSnapshotRequest;
$request = $request.WithVolumeId($VolumeId);
$request = $request.WithDescription("VIAcode MP for AWS, Create EBS Volume Snapshot Task");
$response = $ec2client.CreateSnapshot($request);

$msg = "Snapshot for EBS Volume {0} was successfully created." -f $VolumeId
if ($response -and $response.CreateSnapshotResult -and $response.CreateSnapshotResult.Snapshot)
{
$msg += " Snapshot ID: '{0}' " -f $response.CreateSnapshotResult.Snapshot.SnapshotId
}

$api.LogScriptEvent($header, $SCRIPT_EVENT_ID, $currentEventType, $msg)

#
# Console Output
#
$propertyBag = $api.CreatePropertyBag()
$propertyBag.AddValue("Result Description", $msg)
$propertyBag
}
catch
{
$header = "Create EBS Volume Snapshot task for VolumeID {0} in Region {1} failed" -f $VolumeId, $RegionName
$msg = "Error occured!{0}Computer:{1} {0}Reason: {2}" -f [Environment]::NewLine, $env:COMPUTERNAME, $_.Exception.Message
$api.LogScriptEvent($header, $SCRIPT_EVENT_ID, $ERROR_EVENT_TYPE, $msg)
throw $msg
}
}

Main $VolumeId $RegionName $AWSAccessKey $AWSSecretKey</Script></ScriptBody>
<ScriptParameters>
<Parameter>
<Name>AWSAccessKey</Name>
<Value>$RunAs[Name="AWS!Amazon.AmazonWebServices.RunAsProfile.AwsKeys"]/UserName$</Value>
</Parameter>
<Parameter>
<Name>AWSSecretKey</Name>
<Value>$RunAs[Name="AWS!Amazon.AmazonWebServices.RunAsProfile.AwsKeys"]/Password$</Value>
</Parameter>
<Parameter>
<Name>VolumeId</Name>
<Value>$Target/Property[Type="AWS!Amazon.AmazonWebServices.EbsVolume"]/Id$</Value>
</Parameter>
<Parameter>
<Name>RegionName</Name>
<Value>$Target/Property[Type="AWS!Amazon.AmazonWebServices.Component"]/RegionName$</Value>
</Parameter>
</ScriptParameters>
</ProbeAction>
</Task>